PDF-bestanden optimaliseren (met Ghostscript of iets anders)

Is Ghostscript de beste optie als u een PDF-bestand wilt optimaliseren en de bestandsgrootte wilt verkleinen?

Ik moet veel PDF-bestanden opslaan en daarom moet ik de bestandsgrootte zo veel mogelijk optimaliseren en verkleinen

Heeft iemand ervaring met Ghostscript en/of andere?

opdrachtregel

exec('gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.4
-dPDFSETTINGS=/screen -sOutputFile='.$file_new.' '.$file);

Antwoord 1, autoriteit 100%

Als u op zoek bent naar gratis (zoals in ‘libre’) software, dan is Ghostscript zeker uw beste keuze. Het is echter niet altijd gemakkelijk te gebruiken — sommige van de (zeer krachtige) verwerkingsopties zijn niet gemakkelijk gedocumenteerd te vinden.

Kijk eens naar dit antwoord, waarin wordt uitgelegd hoe u een meer gedetailleerde controle over downsampling van de beeldresolutie kunt uitvoeren dan wat de generieke -dPDFSETTINGS=/screendoet (die een aantal algemene standaardinstellingen definieert, die u wil misschien overschrijven):

Kortom, het vertelt je hoe je Ghostscript alle afbeeldingen laat downsamplen naar een resolutie van 72 dpi (deze waarde is wat -dPDFSETTINGS=/screengebruikt — misschien wil je nog lager gaan):

-dDownsampleColorImages=true \
-dDownsampleGrayImages=true \
-dDownsampleMonoImages=true \
-dColorImageResolution=72 \
-dGrayImageResolution=72 \
-dMonoImageResolution=72 \

Als je wilt proberen of Ghostscript ook in staat is om de gebruikte lettertypen te ‘un-inbedden’ (soms werkt het, soms niet — afhankelijk van de complexiteit van het ingesloten lettertype, en ook op het gebruikte lettertype), kunt u proberen het volgende aan uw gs-opdracht toe te voegen:

gs \
  -o output.pdf \
   [...other options...] \
  -dEmbedAllFonts=false \
  -dSubsetFonts=true \
  -dConvertCMYKImagesToRGB=true \
  -dCompressFonts=true \
  -c ".setpdfwrite <</AlwaysEmbed [ ]>> setdistillerparams" \
  -c ".setpdfwrite <</NeverEmbed [/Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic /Symbol /ZapfDingbats /Arial]>> setdistillerparams" \
  -f input.pdf

Opmerking:Houd er rekening mee dat het downsamplen van de afbeeldingsresolutie de kwaliteit zeker (onomkeerbaar) zal verminderen en dat het verwijderen van lettertypen het moeilijk of onmogelijk maakt om de PDF’s weer te geven en af ​​te drukken, tenzij dezelfde lettertypen zijn geïnstalleerd op de machine….


Bijwerken

Een optie die ik in mijn oorspronkelijke antwoord over het hoofd had gezien, is toevoegen

-dDetectDuplicateImages=true

naar de opdrachtregel. Deze parameter zorgt ervoor dat Ghostscript probeert afbeeldingen te detecteren die meerdere keren in de PDF zijn ingesloten. Dit kan gebeuren als u een afbeelding als logo of pagina-achtergrond gebruikt en als de PDF-genererende software niet is geoptimaliseerd voor deze situatie. Dit was vroeger het geval met oudere versies van OpenOffice/LibreOffice (ik heb de nieuwste release van LibreOffice, v4.3.5.2 getest, en het doet niet langer zulke domme dingen).

Het gebeurt ook als u PDF-bestanden samenvoegt met behulp van pdftk. Om u het effect te laten zien en hoe u het kunt ontdekken, bekijken we een voorbeeld-pdf-bestand:

pdfinfo p1.pdf
 Producer:       libtiff / tiff2pdf - 20120922
 CreationDate:   Tue Jan  6 19:36:34 2015
 ModDate:        Tue Jan  6 19:36:34 2015
 Tagged:         no
 UserProperties: no
 Suspects:       no
 Form:           none
 JavaScript:     no
 Pages:          1
 Encrypted:      no
 Page size:      595 x 842 pts (A4)
 Page rot:       0
 File size:      20983 bytes
 Optimized:      no
 PDF version:    1.1

Recente versies van het hulpprogramma pdfimagesvan Poppler hebben ondersteuning toegevoegd voor een parameter -list, die alle afbeeldingen in een PDF-bestand kan weergeven:

pdfimages -list p1.pdf
 page num  type width height color comp bpc  enc interp objectID x-ppi y-ppi size ratio
 --------------------------------------------------------------------------------------
    1   0 image    423   600   rgb    3   8 jpeg     no     7  0    52    52 19.2K 2.6%

Deze voorbeeld-PDF is een document van 1 pagina met een afbeelding die is gecomprimeerd met JPEG-compressie, een breedte heeft van 423 pixels en een hoogte van 600 pixels en wordt weergegeven met een resolutie van 52 PPI op de pagina.

Als we 3 exemplaren van dit bestand samenvoegen met behulp van pdftkzoals:

pdftk p1.pdf p1.pdf p1.pdf cat output p3.pdf

dan toont het resultaat deze afbeeldingseigenschappen via pdfimages -list:

pdfimages -list p3.pdf
 page num  type width height color comp bpc  enc interp objectID x-ppi y-ppi size ratio
 --------------------------------------------------------------------------------------
    1   0 image   423    600   rgb    3   8 jpeg     no     4  0    52    52 19.2K 2.6%
    2   1 image   423    600   rgb    3   8 jpeg     no     8  0    52    52 19.2K 2.6%
    3   2 image   423    600   rgb    3   8 jpeg     no    12  0    52    52 19.2K 2.6%

Dit laat zien dat er 3 identieke PDF-objecten zijn (met de ID’s 4, 8 en 12) die nu zijn ingesloten in p3.pdf. p3.pdfbestaat uit 3 pagina’s:

pdfinfo p3.pdf | grep Pages:
 Pages:          3

Optimaliseer PDF door dubbele afbeeldingen te vervangen door verwijzingen

Nu kunnen we de bovengenoemde optimalisatie toepassen met behulp van Ghostscript

gs -o p3-optim.pdf -sDEVICE=pdfwrite -dDetectDuplicateImages=true p3.pdf

Controleren:

pdfimages -list p3-optim.pdf
 page num  type width height color comp bpc  enc interp objectID x-ppi y-ppi size ratio
 --------------------------------------------------------------------------------------
    1   0 image   423    600   rgb    3   8 jpeg     no    10  0    52    52 19.2K 2.6%
    2   1 image   423    600   rgb    3   8 jpeg     no    10  0    52    52 19.2K 2.6%
    3   2 image   423    600   rgb    3   8 jpeg     no    10  0    52    52 19.2K 2.6%

Er staat nog steeds één afbeelding per pagina — maar de PDF-object-ID is nu altijd hetzelfde: 10.

ls -ltrh p1.pdf p3.pdf p3-optim.pdf
   -rw-r--r--@ 1 kp  staff    20K Jan  6 19:36 p1.pdf
   -rw-r--r--  1 kp  staff    60K Jan  6 19:37 p3.pdf
   -rw-r--r--  1 kp  staff    16K Jan  6 19:40 p3-optim.pdf

Zoals je kunt zien, heeft de “domme” aaneenschakeling met pdftk de oorspronkelijke bestandsgrootte vergroot tot drie keer de oorspronkelijke. De optimalisatie door Ghostscript bracht het aanzienlijk omlaag.

De meest recente versies van Ghostscript kunnen zelfs standaard de -dDetectDuplicateImagestoepassen. (AFAIR, v9.02, waarin het voor het eerst werd geïntroduceerd, gebruikte het standaard niet.)


Antwoord 2, autoriteit 38%

U kunt goede resultaten behalen door van PDF naar Postscript te converteren en vervolgens terug naar PDF met

pdf2ps file.pdf file.ps
ps2pdf -dPDFSETTINGS=/ebook file.ps file-optimized.pdf

De waarde van argument -dPDFSETTINGSbepaalt de kwaliteit van de afbeeldingen in de resulterende PDF. Opties zijn, van lage tot hoge kwaliteit: /screen, /default, /ebook, /printer, /prepress, zie http://milan.kupcevic.net/ghostscript- ps-pdf/voor een referentie.

Het Postscript-bestand kan behoorlijk groot worden, maar de resultaten zijn het waard. Ik ging van een 60 MB PDF naar een 140 MB Postscript-bestand, maar eindigde met een 1,1 MB geoptimaliseerde PDF.


Antwoord 3, autoriteit 10%

Ik gebruik Ghostscript met de volgende opties overgenomen van hier.

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

Antwoord 4, autoriteit 8%

Misschien vindt u dat pdftocairo(van Poppler ) kan kleinere PDF’s maken, maar Pas op dat het enkele functies (zoals hyperlinks) weg zal strippen.


Antwoord 5, Autoriteit 3%

Dit werkte voor mij

Converteer uw PDF naar PS (dit maakt een groot bestand

pdf2ps large.pdf very_large.ps

Converteer de nieuwe PS terug naar een PDF

ps2pdf very_large.ps small.pdf

Bron:
https://pandemoniumillusion.wordpress.com/2008 / 05/07 / COMPRESS-A-PDF-MET-PDFTK /


Antwoord 6, Autoriteit 3%

U verliest in kwaliteit, maar als het geen probleem is, is ImageMagick’s convertMAG BEPAALD EN NBSP;:

convert original.pdf reduced.pdf

Merk op dat het niet altijd werkt & nbsp;: ik heb eenmaal een 126MB-bestand geconverteerd naar een 14 MB één met behulp van deze opdracht, maar een andere keer verdubbelde het de grootte van een 350KO-bestand.

Hoe dan ook, het is de moeite waard om het te proberen …

Zoals vermeld in opmerkingen, is er natuurlijk geen zin in het toepassen van deze opdracht op een op vector gebaseerde PDF, het is alleen handig op gerasterde afbeeldingen.

Zie ook dit bericht voor gerelateerde opties.


Antwoord 7, Autoriteit 2%

Ghostscript wordt geleverd met ps2pdf14UTILITY die kan worden gebruikt om PDF-bestand (en) te optimaliseren, maar in sommige gevallen van “geoptimaliseerd” bestand kan groter zijn dan origineel.

Other episodes