pdf file tömörebben (megoldva)

Fórumok

Sziasztok!

 

Latex-hel generált,sok képet tartalmazópdf fájlt szeretnék tömörebben előállítani.

Az eredeti fájlom 16 MB, ha ebből fájlba nyomtatom a felét, hirtelen 130MB-ra növekedik a méret. Nem tudom ennek okát, nyilván a pdfolvasók fájlba nyomtatásakor eltűnik a tömörítés, melyet a latex fordító és a dvipdf rendesen megcsinál.

Van erre valami megoldás?

Hozzászólások

Szerkesztve: 2020. 04. 30., cs – 19:18

Nem értem mid van és mit szeretnél.

Egy adott pdf file néhány oldalát szeretnéd kiszedni egy másik pdf file-ba úgy, hogy ne nőjön a mérete? Én a pdfpages csomaggal (\usepackage{pdfpages} és \includepdf parancs) szoktam babrálni a meglevő könyveimet (összefűzöm, átrendezem, bookmarkokat rakok bele).

Vagy olyan pdf-et akarsz előállítani, amit a pdfolvasód nyomtatója jól kezel? Szerintem a képeket ha jpg-ben csatolod, akkor a pdfolvasó nyomtatója nem fog vele foglalkozni, egy-az-egyben be fogja illeszteni konvertálgatás nélkül.

Vagy valami más?

pdftk input.pdf cat 1-akárhány output fele.pdf?

BlackY

"Gyakran hasznos ugyanis, ha számlálni tudjuk, hányszor futott le már egy végtelenciklus." (haroldking)

Koszi, megnezem mindkettot. Eddig atril, foxitreader es evince programokat hasznaltam, ezek egyike sem volt megfelelo. Otszorosere novelte a filemereteket. 

Gondom azzal van, hogy minden oldal kapott grafikai elemet, a pdfwriterek szerintem ezeket egyesevel hozzairjak a kimeneti fajlhoz, emiatt adodik a meretnovekedes

10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.

Tudtommal a PDF-et, akárcsak a JPG-t nem lehet tovább tömöríteni. De javítsatok ki, ha tévedek.

Lehet, pl. a képeket áttömöríted benne, kidobod belőle a beágyazott fontokat stb. Az Acrobat pl. így tudja https://helpx.adobe.com/hu/acrobat/how-to/compress-pdf.html

Szerk.: Ez jobb link: https://helpx.adobe.com/hu/acrobat/using/optimizing-pdfs-acrobat-pro.ht…

BlackY

"Gyakran hasznos ugyanis, ha számlálni tudjuk, hányszor futott le már egy végtelenciklus." (haroldking)

Ha jól értem az a cél, hogy csak bizonyos oldalakat tarts meg az eredeti pdf-ből. Erre nem a fájlba nyomtatás a jó megoldás, de ezt a próbálkozásból már te is látod. Számtalan pdf matató eszköz van, amivel ezt remekül el lehet végezni, ha kényelmes kell: pdfarranger, pdfsam, de azt hiszem a pdfchain is tud ilyet. Ágyúval verébre, de a masterpdfeditorral is meg lehet sztem csinálni. Parancssorból meg pdftk, de megoldható ghostscripttel is, ha igazán perverz vagy :D Ezek mellett biztos, hogy akad még erre kitalált script is pár, már találkoztam ilyennel.

A pdfjam is egy opció lehet:

pdfjam -o output.pdf input.pdf 1-3

Ez az input.pdf fájl 1-3. oldalát írja ki az output.pdf-be. A pdfjam szkript a TeXLive része (ami egyébként a pdfpages csomagot használja, amit fentebb bohocmasni említett).

Szerkesztve: 2020. 05. 02., szo – 09:32

Föntebb már sok ötlet előjött, az eredeti problémához háttérinfó:

ha pl. az okular-ral megnyitok egy PDF 1.5-ös fájlt, és a "nyomtatás fájlba PDF-ként" opciót választom, az eredetinél valóban sokkal nagyobb, PDF 1.4-es fájlt ír ki a program.

Ha valaki unatkozik a karantén alatt, itt az idő a parancssoros GhostScript opciókat megtanulni :D

https://www.ghostscript.com/doc/current/VectorDevices.htm

Ezek célszerű párosításaival is lehet faragni az outputon.

Már sokadjára van említve a ghostscript. De tudtommal éppen az az, ami pdf átkódolásra való. (Akár azt is megkockáztatom hogy az okular, evince stb azt hívja meg nyomtatáshoz.)

OP-nak ennek a szöges ellenkezője kell, valami, ami _nem_ kódolja újra a PDF-et.

Nem feltétlen kódolja át, de alapvetően igazad van, a gs inkább akkor jöjjön a képbe, ha spec formába kell áttolni a meglévő anyagot, pl eszközre/kimenetre optimalizálni. A CUPS is a gs-t használja valóban, ha pdf-be nyomtat.

De arra például remek, ha van egy "tömörítetlen" pdf, amit képernyőre szeretnénk optimalizálni minél kisebb méretben. Vagy épp nyomdakész pdf-et kell csinálni - bár ez utóbbi már nem kezdő feladat és eléggé el lehet veszni a dokumentációjában.

Hát én nem vagyok abban biztos, hogy a legegyszerűbb split paranccsal ne hatalmas PDF-et kapna a kérdező, de még abban sem, hogy bárhogyan elérhetné ghostscript segítségével, amit akar.

De még ha megoldható is, alapvetően az ellenkezőjére való.

Mert nem ismered a ghostscriptet. Nincs olyan, hogy split parancs, egész másként működik, ebbe most ne is menjünk bele. De hogy ne a levegőbe beszéljek, egy minimalista példa a fentiek megoldására, meg talán érthetőbb is:

gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dSAFER -dFirstPage=10 -dLastPage=32 -sOutputFile=outfile_p10-p32.pdf inputfile.pdf

Ez esetben nem simán split történik, de nem nyúl a képtartalmakhoz, és nem raszterezi a vektoros tartalmakat, a méret az eredetihez közeli marad. Viszont a pdf verzió az aktuálisan a gs által támogatott legfrissebb lesz (nálam pl 1.7). További paraméterekkel beállítható még sokminden, pl a pdf verzió ha kell. De mint fentebb is írtam, és ebből is látszik nem ez a legegyszerűbb módja a pdf szétszedésnek vagy épp összerakásnak sem. :) A gs egy ps/pdf interpreter, oda-vissza szinte mindent tud ezekkel a formátumokkal, így erre is "való", de segítségével szoftveres RIP is megvalósítható, és létezik is ilyen alkalmazása a CUPS pdf printeren kívül is.

De könnyedén lehet vele beállítható felbontású jpeg vagy más támogatott kimeneti  képformátumú képszekvenciát is előállítani bármekkora dokumentumból, vagy a fenti parancsban megadott módon annak a részleteiből. Csak nem egyszerűek a parancsok.

A kiinduló problémára a magyarázat: ha a pdf úgy lett volna előállítva, hogy truetype vagy opentype vagy esetleg ps fontokat használ beágyazva, akkor azt valószínűleg nem így raszterezné, így nem lenne olyan nagy a kimenet sem, viszont pl a TeX saját raszterfontjait sajna így lehet csak kezelni.

A kiinduló problémára a magyarázat: ha a pdf úgy lett volna előállítva, hogy truetype vagy opentype vagy esetleg ps fontokat használ beágyazva, akkor azt valószínűleg nem így raszterezné, így nem lenne olyan nagy a kimenet sem, viszont pl a TeX saját raszterfontjait sajna így lehet csak kezelni.

A kiinduló problémában talán a képek vagy a "grafikai elemek" miatt nőtt meg a file mérete. (Nyilak vagy nem tudom.)

Igen, sok mindent tud, kérdés hogy tudja-e azt is, amit OP akar, vagyis szétszedni egy file-t, anélkül hogy babrálna valamit, amitől 10x-esére ugrik a file mérete.

Más: a pdf olvasó "nyomtatás file-ba" opciója az nyomtatható (tehát bizonyos dolgokban korlátozott) pdf-et generál? Mert a neve nem ezt sugallja.

Leteszteltem egy olyan pdf-en amiben fotók, grafikák és ábrák egyaránt vannak, az eredmény:

pdftk-val a kimenet 1,6 Mb

gs-sel a korábbi hsz-emben megadott módon: 1,6 Mb

Eléggé egyformának tűnik a végeredmény. Természetesen nem az, van különbség a pdf verzióban is, de a pdftk által használt itext sem hagyja változatlanul a pdf-et, ennek magában a formátumban van a magyarázata, ha érdekel olvass utána.

Hogy legyen csavar is a dologban, kinyomtattam ugyanazt a dokumentumot ugyanazokkal az oldalakkal pdf nyomtatón, és az is csak 1,6 Mb...

A tartalom mindenesetre azonos mind3nál. Most nincs kéznél olyan doksim amit a dvipdf generált, de fenntartom a korábbi álláspontom, hogy a problémás fájl a TeX metafontok miatt lett nagy. Érdemes lehet pdftex-el közvetlen, dvi közbeiktatása nélkül pdf-et generálni az ilyesmit elkerülendő szerintem.

szerk: a pdf printer és a pdf nézegető nyomtatás pdf-be kimenete nem ugyanaz, az előbbi a CUPS virtuális pdf nyomtatóján keresztül megy (és elérhető mindenhonnan, ahonnan nyomtatni lehet), a másik az nézegetőtől függően valamilyen egyéb megoldás, de nem igényli a CUPS jelenlétét.

Ha valaki LaTeX forrásból valamilyen értelemben - pl. méret szerint - optimális PDF outputot szeretne, messze nem olyan egyszerű a helyzet. Régen (huszonsok éve) sokat szórakoztam ezzel. Most is lehet kísérletezni, például

1) LaTeX forrás --> DVI fájl --> PS fájl --> PDF fájl

2) LaTeX forrás --> DVI fájl --> PDF fájl

3) LaTeX forrás --> PDF fájl

Általában minden konverziós lépéshez több program/szkript is választható több/kevesebb opcióval. Plusz még a használt fontok formátuma, és a beágyazott képek formátuma (meg  a tömörítés paraméterei - ha tömörített) is befolyásolják a végeredményt...

ha meg aktualis…

ha optimalizalni akarom a fajlt akkor:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf

ha az oldalak szamat/sorrendjet akarom piszkalni akkor:

http://pdfshuffler.sourceforge.net/