Jiří Meitner | IT služby Linux | Kladno | Česko

Širokoúhlý obrázek znázorňující vizuální reprezentaci konceptu, kde více webových stránek je převáděno do PDF souborů pomocí bash skriptu na Linuxu.

Jak vytisknout web na Linuxu do pdf v bash scriptu

Tisk do pdf z příkazové řádky linuxu je na linuxovém desktopu jednoduchý, ale ne vždy jsme spokojeni s výsledkem. Pokud máme k dispozici Google Chrome nebo Chromium, tak máme z půlky vyhráno. Existují i jiné možnosti, jako například wkhtmltopdf, ověřte si, který nástroj vám poskytne nejlepší výsledek.

Google Chrome/Chromium vs wkhtmltopdf

Každý web je jiný, proto některé webové stránky jdou lépe konvertovat do pdf v google chrome či chromiu, a jiné třeba v wkhtmltopdf. Tam kde si jeden nástroj může vylámat zuby, druhý podá lepší výsledek. Neexistuje univerzální tool, který nejlépe převede web do pdf za všech okolností.

Bash script pro tisk webu do pdf pomocí Google Chrome

web_to_pdf:

#!/bin/bash
user_data_dir="${HOME}/.config/google-chrome-for-print"
if [[ -n ${1} ]]; then
url="${1}"; else
read -erp "zadej url: " url
fi
if [[ -z ${url} ]]; then
        echo "url nemůže být prázdné!"
        echo "příklad:"
        echo "${0} https://itislove.cz/"
        exit 1
fi
vystup=$(echo "${url}"|cut -f3-10 -d/|tr '/' '_' \
  |sed 's/_$/.pdf/')

if ! [[ ${vystup} =~ .pdf ]]; then
   vystup="${vystup}.pdf"
fi

if ! [[ -d ${user_data_dir} ]]; then
echo "první konfigurace user_data_dir"
echo "nainstaluj doplňky a pak zavři prohlížeč"
google-chrome --user-data-dir="${user_data_dir}"
fi

realpath_vystup="$(realpath "./${vystup}")"
rm "${realpath_vystup}"
google-chrome \
  --headless \
  --print-to-pdf="${realpath_vystup}" \
  --run-all-compositor-stages-before-draw \
  --disable-gpu \
  --user-data-dir="${user_data_dir}" \
  "${url}"

if [[ -s ${realpath_vystup} ]]; then
        echo "${url} úspěšně vytisknuto do ${realpath_vystup}"
# řádek níže odkomentujte pokud chcete výstup automaticky 
# otevřít
#       xdg-open "${realpath_vystup}"
else
        echo "tisk do pdf selhal"
        exit 2
fiCode language: Bash (bash)

Vysvětlení parametrů:

  • headless # otevírá prohlížeč mimo grafické rozhraní
  • print-to-pdf # místo zobrazení webové stránky v prohlížeči vytvoří pdf soubor
  • run-all-compositor-stages-before-draw # tento přepínač vynutí, aby všechny fáze kompozice byly dokončeny před tím, než se obsah stránky skutečně vykreslí na obrazovce. V tomto případě do pdf.
  • disable-gpu # obvykle se doporučuje tento parametr, ale pokud tiskneme do pdf doma na normálním desktopu a máme tedy grafickou kartu, klidně můžeme tento přepínač zakomentovat
  • no-pdf-header-footer # tento přepínač umožňuje netisknutí záhlaví a zápatí
  • user-data-dir # tento přepínač můžeme zakomentovat, pokud nepotřebujeme se zbavit nějakých prvků na webu, třeba cookie lišty

Praktická ukázka, převedeme články z wplama.cz do pdf

První krok je zjistit url článků z webu, který si chceme stáhnout. Rozhodl jsem se, že uložím články z wplama do pdf, abych jimi nakrmil chatgpt. Url adresy by měly být v sitemapě. A sitemapy jsou v robots.txt. Analýzou těchto souborů jsem se rozhodl použít https://www.wplama.cz/post-sitemap.xml a https://www.wplama.cz/post-sitemap2.xml.

Z těchto sitemap je potřeba vyseparovat adresy jednotlivých příspěvků:

(curl -s https://www.wplama.cz/post-sitemap.xml;
curl -s https://www.wplama.cz/post-sitemap2.xml) \
|grep '<loc>'|tr -d '[:blank:]' \
|sed 's/<loc>//g'|sed 's/<\/loc>//g'Code language: Bash (bash)

Seznam příspěvků získaných z post-sitemap.xml a post-sitemap2.xml (abych sem nedával vše – je jich mnoho, tak jsem vygrepoval prvních deset obsahujících jak):

seznam článků obsahující jak v url:
https://www.wplama.cz/jak-pridat-na-wp-web-barevny-scrollbar-posuvnik/
https://www.wplama.cz/jak-omezit-redaktorovi-pravo-pridavat-prispevky-pouze-do-urcite-kategorie/
https://www.wplama.cz/jak-automaticky-pridat-vodoznak-do-obrazku-ve-wordpressu/
https://www.wplama.cz/jak-odstranit-shake-effect-efekt-tresu-u-prihlasovani/
https://www.wplama.cz/jak-posilat-z-wordpressu-maily-pres-smtp-server/
https://www.wplama.cz/jak-hromadne-nainstalovat-oblibene-pluginy/
https://www.wplama.cz/jak-zvysit-pocet-fanousku-na-socialnich-sitich-pomoci-popup/
https://www.wplama.cz/jak-umoznit-navstevnikum-menit-sve-wordpress-komentare/
https://www.wplama.cz/jak-u-wordpressu-zapnout-zobrazeni-chyb-wp_debug/
https://www.wplama.cz/jak-nastavit-bezpecnostni-klice-wordpressu-a-k-cemu-slouzi/

Nyní celá smyčka i s konverzí do pdf:

(curl -s https://www.wplama.cz/post-sitemap.xml; 
curl -s https://www.wplama.cz/post-sitemap2.xml) \
|grep '<loc>'|tr -d '[:blank:]' \
|sed 's/<loc>//g'|sed 's/<\/loc>//g'\
|while read -r line; do web_to_pdf "${line}"; doneCode language: JavaScript (javascript)

Po chvilce máme úspěšně vytisknuty všechny články do pdf.

Obsah složky obsahující vytvořené pdf soubory
Obsah složky obsahující vytvořené pdf soubory

Pro účely krmení umělé inteligence daty můžeme články projít, promazat a vytisknout pdf do jednoho souboru. ChatGPT má totiž limit na množství souborů, kterými ho můžeme učit.

Summary
Jak vytisknout web na linuxu do pdf v bash scriptu
Article Name
Jak vytisknout web na linuxu do pdf v bash scriptu
Description
Ať už potřebujete nakrmit daty umělou inteligenci daty, nebo máte jiný důvod, hodí se umět vytisknout větší mnoštví webů do pdf. A nevadí, že ztratíme hlavu.
Author
Publisher Name
ITisLove.cz
Publisher Logo

Comments

Jeden komentář: „Jak vytisknout web na Linuxu do pdf v bash scriptu“

  1. […] scriptu v minulém článku (https://itislove.cz/2024/02/jak-vytisknout-web-na-linuxu-do-pdf-v-bash-scriptu/ jsou výsledné soubory cca desetinové. Používá stejný postup komprese a nastavení, jako […]

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..