πŸ’Ύ Archived View for gemini.strahinja.org β€Ί blog β€Ί 2021-10 β€Ί 20211012.gmi captured on 2023-04-19 at 22:31:52. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2022-03-01)

➑️ Next capture (2024-06-20)

-=-=-=-=-=-=-

Од тСкста Π΄ΠΎ PDF-Π°

ПонСкад јС корисно ΠΈΠΌΠ°Ρ‚ΠΈ могућност Π΄Π° сС Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½Π° тСкстуална Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΠΏΡ€Π΅Ρ‚Π²ΠΎΡ€ΠΈ Ρƒ PDF. Наравно, тСкст сС ΠΌΠΎΠΆΠ΅ ΡƒΡ‡ΠΈΡ‚Π°Ρ‚ΠΈ Ρƒ Π½Π΅ΠΊΠΈ процСсор тСкста ΠΊΠ°ΠΎ ΡˆΡ‚ΠΎ јС Libre Office Writer, Π°Π»ΠΈ ΡƒΠ· CUPS, ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ ΠΈ Π΄Π°Π»Π΅ΠΊΠΎ Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΈΡ˜Π΅ Ρ€Π΅ΡˆΠ΅ΡšΠ΅, којС Π½Π΅ Π·Π°Ρ…Ρ‚Π΅Π²Π° ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ΅ спорих Π³Ρ€Π°Ρ„ΠΈΡ‡ΠΊΠΈΡ… Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π·Π° Ρ‚Π°ΠΊΠΎ Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π°Π½ посао.

CUPS ΠΈΠ·ΠΌΠ΅Ρ’Ρƒ осталог садрТи ΠΈ CLI ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌ texttopdf, који сС ΠΌΠΎΠΆΠ΅ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚ΠΈ Π·Π° β€žΡˆΡ‚Π°ΠΌΠΏΠ°ΡšΠ΅β€œ Ρƒ PDF. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π° бисмо ΠΏΡ€Π΅Ρ‚Π²ΠΎΡ€ΠΈΠ»ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ file.txt Ρƒ file.pdf, ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΄Π° ΠΏΠΎΠΊΡ€Π΅Π½Π΅ΠΌΠΎ:

$ CHARSET=utf-8 /usr/lib/cups/filter/texttopdf 1 1 1 1 1 \
		< file.txt > file.pdf

ΠœΠ΅Ρ’ΡƒΡ‚ΠΈΠΌ, овај ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌ Π΄ΠΎΠ·Π²ΠΎΡ™Π°Π²Π° ΠΈ Π΄Π° Π·Π°Π΄Π°ΠΌΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΡ™Π°Π½ Ρ„ΠΎΠ½Ρ‚ ΡƒΠ· ΠΏΠΎΠΌΠΎΡ› Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ Π·Π° задавањС ΠΊΠΎΠ΄Π½ΠΎΠ³ распорСда. ΠŸΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π½ΠΎ, ΠΎΠ²Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ сС Π½Π°Π»Π°Π·Π΅ Ρƒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌΡƒ /usr/share/cups/charsets. ΠŸΡ€ΠΎΡΡ‚ΠΈΠΌ ΠΊΠΎΠΏΠΈΡ€Π°ΡšΠ΅ΠΌ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ /usr/share/cups/charsets/pdf.utf-8.simple Ρƒ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ Ρƒ корисничком Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌΡƒ, Ρ€Π΅Ρ†ΠΈΠΌΠΎ ~/.config/cups/charsets/pdf.utf-8.custom, ΠΈ ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ΠΌ симболичкС Π²Π΅Π·Π΅ ΠΎΠ΄ Ρ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ Π΄ΠΎ pdf.utf-8 Ρƒ истом Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌΡƒ, ΠΌΠΎΠΆΠ΅ΠΌΠΎ texttopdf-Ρƒ Π·Π°Π΄Π°Ρ‚ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΡ™Π°Π½ Ρ„ΠΎΠ½Ρ‚, Π°ΠΊΠΎ поставимо ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Ρƒ CUPS_DATADIR.

$ CUPS_DATADIR=~/.config/cups CHARSET=utf-8 \
	/usr/lib/cups/filter/texttopdf 1 1 1 1 1 \
		< file.txt > file.pdf

Π€ΠΎΠ½Ρ‚ сС ΠΌΠΎΠΆΠ΅ Π·Π°Π΄Π°Ρ‚ΠΈ Π½Π° Π΄Π²Π° Π½Π°Ρ‡ΠΈΠ½Π°: ΠΏΡ€Π΅ΠΊΠΎ fontconfig-ΠΎΠ²ΠΎΠ³ ΠΈΠΌΠ΅Π½Π° Ρ„ΠΎΠ½Ρ‚Π°, ΠΈΠ»ΠΈ ΠΏΡ€Π΅ΠΊΠΎ апсолутнС ΠΏΡƒΡ‚Π°ΡšΠ΅ ΠΊΠ° .ttf ΠΈΠ»ΠΈ .otf Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ†ΠΈ. Π Π΅Ρ†ΠΈΠΌΠΎ:

charset utf8
0000 04FF ltor single /usr/local/share/fonts/iosevkanf/Iosevka_Nerd_Font_Complete.ttf
0500 05FF rtol single /usr/local/share/fonts/iosevkanf/Iosevka_Nerd_Font_Complete.ttf
3000 9FFF ltor double ARPLUmingCN

поставља Π΄Π°Ρ‚ΠΈ TTF Ρ„ΠΎΠ½Ρ‚ ΠΊΠ°ΠΎ Ρ„ΠΎΠ½Ρ‚ којим Ρ›Π΅ Π±ΠΈΡ‚ΠΈ исписан тСкст Ρƒ PDF Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ†ΠΈ.

НСдостаци ΠΎΠ²ΠΎΠ³ приступа су, ΠΈΠΏΠ°ΠΊ, ΡˆΡ‚ΠΎ добијСни PDF Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€Π΅Ρ‚Ρ€Π°ΠΆΡƒΡ˜Π΅ ΠΈ ΡˆΡ‚ΠΎ сС Ρ„ΠΎΠ½Ρ‚ ΡƒΠ³Ρ€Π°Ρ’ΡƒΡ˜Π΅ Ρƒ цСлости. Ово сС ΠΌΠΎΠΆΠ΅ ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΠΈΡ‚ΠΈ позивањСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° pdftocairo ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° poppler:

poppler

$ pdftocairo file.pdf -pdf file-optimized.pdf

ΠŸΠΎΡˆΡ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌ texttopdf Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡˆΠ΅ ΠΊΠ°ΠΎ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΈ Уникс Π°Π»Π°Ρ‚ΠΈ, односно Ρ‡ΠΈΡ‚Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΊΠ΅ са stdin-Π° ΠΈ ΠΈΡΠΏΠΈΡΡƒΡ˜Π΅ ΠΈΡ… Π½Π° stdout, ΠΎΠ²Π°ΠΊΠΎ сС ΠΌΠΎΠΆΠ΅ ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚ΠΈ PDF Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π½Π΅ само ΠΎΠ΄ ΠΏΠΎΡΡ‚ΠΎΡ˜Π΅Ρ›Π΅ тСкстуалнС Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅, Π²Π΅Ρ› ΠΈ ΠΎΠ΄ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΡ™Π½ΠΎ добијСног тСкста послатог Π½Π° stdin:

$ df -h | CUPS_DATADIR=~/.config/cups CHARSET=utf-8 \
	/usr/lib/cups/filter/texttopdf 1 1 1 1 1 \
		> df-listing.pdf

Π Π΅Ρ†ΠΈΠΌΠΎ, ΠΌΠΎΠΆΠ΅ сС искористити мој ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌ table Π΄Π° сС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π° CSV Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΠΈ ΠΈΠ·Π»Π°Π· ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΡƒΡ˜Π΅ Ρƒ PDF. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ΠΊΠ° јС Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° sales.csv:

мој ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌ table

"Item","Q1 2020","Q2 2020","Q3 2020","Q4 2020"
"Toothpick","15.2","12","","10"
"Teapot","1.2","","5","3.5"

НарСдбама:

$ table -n sales.csv | CUPS_DATADIR=~/.config/cups CHARSET=utf-8 \
	/usr/lib/cups/filter/texttopdf 1 1 1 1 1 \
		> sales-unoptimized.pdf
$ pdftocairo sales-unoptimized.pdf -pdf sales.pdf

добијамо Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ sales.pdf:

sales.pdf

$ ls -l
-rw-r--r--   1 strajder strajder  191159 12. ΠΎΠΊΡ‚. Ρƒ 20:24  sales-unoptimized.pdf
-rw-r--r--   1 strajder strajder   12459 12. ΠΎΠΊΡ‚. Ρƒ 20:25  sales.pdf

Ако Π½Π°Ρ€Π΅Π΄Π±Ρƒ којом ΠΏΠΎΠ·ΠΈΠ²Π°ΠΌΠΎ texttopdf β€žΡΠΏΠ°ΠΊΡƒΡ˜Π΅ΠΌΠΎβ€œ Ρƒ алијас, Π½ΠΏΡ€:

alias txt2pdf='CUPS_DATADIR=~/.config/cups CHARSET=utf-8 \
	/usr/lib/cups/filter/texttopdf 1 1 1 1 1'

ΠΏΡ€Π²Π° Π½Π°Ρ€Π΅Π΄Π±Π° добија Π΄Π°Π»Π΅ΠΊΠΎ Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΈΡ˜ΠΈ ΠΎΠ±Π»ΠΈΠΊ:

$ table -n sales.csv | txt2pdf > sales-unoptimized.pdf

Наравно, мислим Π΄Π° Π½Π΅ Ρ‚Ρ€Π΅Π±Π° Π½ΠΈ ΠΏΠΎΠΌΠΈΡšΠ°Ρ‚ΠΈ Π΄Π° Ρ†Π΅ΠΎ процСс Ρ‚Ρ€Π°Ρ˜Π΅ Π·Π½Π°Ρ‚Π½ΠΎ Π±Ρ€ΠΆΠ΅ ΠΎΠ΄ самог ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ° Π½Π΅ΠΊΠΎΠ³ процСсора тСкста.