rokom-web-PDF-shrink

Extrem kleine PDF-Dateien erstellen

Create and shrink PDF

Thema: Kleine und qualitativ hochwertige PDF-Dateien für den Versand erstellen

Zielgruppe: Alle die sich über zu große PDF ärgern oder/und nicht versenden können

Motivation: Versender und Empfänger zufriedenstellen, sowie das Arbeiten im Office und das Internet selbst, schneller machen

Für ganz Eilige: Warnung und Zusammenfassung

Inhaltsverzeichnis

  1. Create and shrink PDF
  2. Generell
  3. Große und übergroße PDF-Dokumente
    1. Bilder
    2. Bildkomprimierung
    3. Schriften
    4. Hybrid-PDF
    5. Archiv-PDF
    6. Formatierungen
    7. Vorschaubild
    8. Sicherheitsmerkmale
    9. PDF-Version
  4. PDF erstellen
    1. Moderne Office-Suiten
    2. PDF-Datei „drucken“
  5. Optimierung
    1. Programme mit GUI
    2. Bilder optimieren
    3. Grafiken bevorzugen als SVG
    4. Texte optimieren
    5. Standard-Schriftarten für PDF
    6. Vektorschriftarten
    7. Tabellen optimieren
    8. Audio- und Videodateien
  6. Terminal
    1. Qualitätseinstellungen
    2. PDF komprimieren mit Windows-Batch
    3. PDF komprimieren mit python
    4. PDF konvertieren in Text mit Layout
    5. lowriter
    6. Datei-Umwandlung
  7. PDF bearbeiten
  8. Warnung
  9. Zusammenfassung
  10. Epilog
    1. Eigentum

Generell

Die Quellen zu diesem Beitrag sind meine Erfahrungen und Erinnerungen aus meine langjährigen Tätigkeit als IT-Supporter. Aber um nicht einer Selbsttäuschung zu unterliegen, habe ich mit den entsprechenden help-pages, manpages, Wikipedia und Google einige meiner Erfahrungen nochmals überprüft.

Dieser Beitrag bezieht sich hauptsächlich auf Linux. Trotzdem trifft das allermeiste auch auf Windows zu und erst recht für macOS-Benutzer, da macOS auch POSIX-kompatibel ist. Was PDF ist, dass ist nicht Gegenstand dieses Beitrages und kann zum Teil in der Wikipedia nachgelesen werden oder mit Suchmaschinen gefunden werden. Dieser Beitrag erhebt keinen Anspruch auf Vollständigkeit, trotzdem sollte es möglich sein, die Problematik zu sensibilisieren.

In diesem Beitrag weise ich immer wieder darauf hin, das moderne Programme dieses oder jenes können sollten. Genauso ist es auch gemeint, denn beispielsweise kann ein „MS Office 2017“ nicht als solches betrachtet werden. Wenn es unbedingt und unnötigerweise eine gekaufte Office-Suite sein muss, dann kauft man ein „MS Office 2021“ oder noch teurer „Microsoft 365“. Die kostenlose Alternative wäre ohnehin ein professionelles Betriebssystem, wie Linux, mit LibreOffice.

Hinweis: LibreOffice kann seit Version 7.4, also seit dieser Woche, das webp-Dateiformat nativ einbinden und das sehr hochwertige LanguageTool nutzen.

Der Hinweis, das manche Software keine Open-Source-Software ist, beruht darauf, das andere Lizenzformen nicht unbedingt vertrauenswürdig sind. „Freeware“ und „Freemium“ sind meist mit einer restriktiven proprietären Lizenz ausgestattet. Übrigens, die Attribute „kostenlos“, „gratis“ und „free“ haben auch 99% aller Viren.

Große und übergroße PDF-Dokumente

Hier einige Ursachen für zu große PDF-Dokumente. Es gibt auch noch einige andere Ursachen, die ich aber hier nicht betrachten werde. Mit übergroße Dokumente meine ich, ab 100 MB und sogar Gigabyte große PDF-Dokumente habe ich schon gesehen.

Bilder

Heutige Smartphones können Bilder in der Größe von über 108 Megapixel aufnehmen, also etwa 12.000 x 9.000 Pixel. Würde man so ein Bild in Originalgröße in ein PDF-Dokument in der Größe „DIN A4“ einbinden wollen, funktioniert das gar nicht, daher wird es mit seiner Ansichtsfläche mindestens auf etwa ein Hundertstel geschrumpft, um es in ein DIN-A4 Dokument einzubinden. Trotzdem bleibt die Speichergröße des Bildes erhalten. Also 99% überflüssiges Bildmaterial wird in ein mehrere Megabyte großes PDF-Dokument gespeichert.

Bildkomprimierung

Die Verkleinerung der Ansichtsfläche bei bestehendem Speicherbedarf ist also effektiv keine Verkleinerung des PDF-Dokumentes.

Aber die algorithmische Verkleinerung von Bildern geschieht durch die verschiedenen Bildformate mit den verschiedenen Graden an Komprimierungen. Nach der Anpassung der Auflösung und der algorithmische Verkleinerung, kann somit eine Verkleinerung vom ursprünglichen Dokument mit dem Original-Bild auf wenige Promille, also Tausendstel erreicht werden.

Schriften

Für die Übermittlung eines Dokumentes und generell im Office-Bereich, sollte man auf Schreibschriftarten und andere exotische Schriften verzichten. Denn wenn diese im PDF-Dokument auch als solche sichtbar sein sollen, müssen diese mit extra großen Speicherplatz eingebunden werden.

Als Schriften sind empfohlen eine mit Serifen oder/und eine ohne Serifen oder/und eine nichtproportionale Schrift.

Adobe selbst, also der ursprünglicher Erfinder von PDF, hat die sogenannten PDF-Fonts in der ISO-Standardisierung festgelegt.

Hinweis: Text nicht als Bild einbinden. Text belegt deutlich kleinere Speicherkapazitäten als Bilder. Zudem kann der Text in Pixel- beziehungsweise Raster-Bildern, nicht als Vektor skaliert werden, also Qualitätseinbusse trotz größerer Speicherkapazität.

Hybrid-PDF

Das sind PDF-Dokumente, die das erstellte Office-Dokument in den PDF-Container einbinden. Warum dieses Sicherheitsrisiko eingegangen werden sollte, erschließt sich nicht so schnell. Deshalb bitte nur innerbetrieblich verwenden.

Archiv-PDF

Eine Gang höher als Hybrid-PDF schaltet das PDF/A-3 für das archivieren. Hier werden alle Daten geladen um eine PDF wiederherzustellen. Damit ist es das aufwendigste PDF-Format, also der größte Speicherverbrauch. Daher ist es wichtig das notwendige Grafiken, Diagramme, Logos, Schriften und so weiter im skalierbaren Format untergebracht werden. SVG-Dateien sind klein und exakt lesbar durch die XML-Beschreibungssprache, also der markup-language. Bei Schriften sind das unter anderem TrueType und OpenType. Zudem ist SVG nativ in PDF eingebunden.

Wem es wirklich interessiert, was alles in so ein PDF-Archivformat hinein gepackt wird, der lese die Spezifikationen PDF-ISO-Standard 32000 und PDF/A-ISO-Standard 19005.

Das Archiv-PDF wird nur für sehr lange Aufbewahrungszeiten benötigt, ich schätze so ab 10 Jahre aufwärts. Das ist nämlich der Zeitraum in den sich Betriebssysteme, Anwendungsprogramme und spezielle Algorithmen qualitativ verändern oder überhaupt noch nutzbar sind.

Formatierungen

Sichtbare Formatierungen können bei übermäßigen Gebrauch, ebenfalls das PDF-Dokument aufblähen. Wobei ich es noch nie verstanden habe, warum eine Mehrfachformatierung notwendig sein soll. Also Großschreibweise UND Unterstreichung UND farblicher Hintergrund UND exotische Schriftart UND Ausrufezeichen UND noch infantiler mit fünf weitere Ausrufezeichen. Und es geht noch schlimmer.

Unsichtbare Formatierungen in Office-Dokumente, HTML-Dokumenten, Tabellen und eingebettete Tabellen und andere eingebetteten Objekte, sind noch größer im Speicherverbrauch. Zum Beispiel bei partikularem CSS, also „Cascading Style Sheets“, zu viel HTML5-Markup und unnötigem Javascript.

Vorschaubild

Kein großer Speicherplatzverlust ist hingegen ein Vorschaubildbild. Trotzdem kann man darauf verzichten, da es effektiv keine besonderen Informationen zeigt, sondern nur das Layout der ersten Seite.

Sicherheitsmerkmale

Sicherheit kostet nur sehr wenig Speicherkapazität mehr. Also Signaturen, Passwörter, Wasserzeichen und ein Rechtemanagement. Doch sollte der Umgang damit sehr überlegt sein.

PDF-Version

Ab der PDF-Version 1.7 aus dem Jahre 2012, ist man gut gerüstet, um alle meine vorgeschlagenen Optimierungen umzusetzen. Aber genauso ist diese Version auch geeignet, das richtige Archiv-Format zu implementieren.

Ansonsten würde für normale PDF-Dokumente auch ab Version 1.4 ausreichend sein.

PDF erstellen

Es gibt mehr als zwei Methoden mit GUI, also grafischer Oberfläche, um PDF-Dokumente zu erstellen, doch ich stelle hier nur zwei Methoden vor, die Office-Suite und das Drucken. Doch auch moderne Bildbetrachter, Bildverarbeitungsprogramme, Vektorprogramme, Mindmap-Programme und CAD-Programme können hervorragend in PDF exportieren.

Moderne Office-Suiten

Mit jeder modernen Office-Suite können heute PDF-Dokumente erstellt werden, wie beispielsweise nachfolgende.

  • LibreOffice
  • Calligra Suite
  • NeoOffice
  • OnlyOffice

Es existieren in den Office-Suiten fein granulierte Exportmöglichkeiten um ein kleines PDF-Dokument zu erstellen oder eben auch ein Archiv-PDF.

PDF-Datei „drucken“

Mit einem PDF-Drucker kann aus jeder beliebigen Anwendung ein PDF-Dokument erzeugt werden, wenn es das Drucken an sich unterstützt.

Seit „Windows 10“ gibt es standardmäßig unter Drucker auch den „Microsoft Print to PDF“-Drucker.

Unter Linux kann man einfach im Druckerdialog auswählen „Drucken in Datei“, egal oder Postscript- oder PDF-Datei. Selbstverständlich kann auch über das Terminal gedruckt werden.

Optimierung

Jetzt geht’s ans Eingemachte. Hier wird die Frage beantwortet, wie man kleine PDF-Dateien erstellt.

Ja, ich weiß es, jetzt kommt die Frage „Welches Programm ist das beste zum PDF verkleinern?“ und ja es gibt Programme die das zum Teil können. Doch das Problem ist damit immer noch nicht gelöst, gerade wenn es um Bilder geht, bleibt die Datei immer noch sehr groß, denn wie soll ein Programm erkennen, welche jeweilige Auflösung an dem bestimmten Absatz benötigt wird.

Programme mit GUI

Also da wären:

  • PDF Tricks
  • Calibre
  • Master PDF Editor
  • compress-pdf als Appimage

Leider können, außer Calibre, all diese Programme nur einzelne PDF-Dokumente verkleinern. Aber wie schon darauf hingewiesen, Bilder werden nicht bearbeitet, nur die Umwandlung in Graustufen ist noch möglich.

Eine Liste weiterer Software hier.

Bilder optimieren

Am besten ist es, wenn die Bilder nicht wirklich inline sein müssen, diese extra zu übermitteln mit aussagekräftigem Dateinamen.

Ansonsten gilt:

  • Ausschließlich das webp-Bilddateiformat nutzen, Konvertierung in jedem modernen Bildbetrachter möglich
  • webp-Dateien auf 76% Komprimierung einstellen, mein Erfahrungswert
  • Auflösung nicht über 1920 x 1980 Pixel, besser höchstens bis SXGA, also 1280 x 1024 Pixel

Grafiken bevorzugen als SVG

Den Vorteil von PDF-Regeln, kann mit skalierbaren Vektorgrafiken hervorragend genutzt werden. PDF ist als skalierbares Vektordokument ausgelegt.

Laden sie jede Grafik, die nicht unbedingt ein mehrfarbiges Foto sein muss, als SVG-Dokument in die PDF-Datei und man spart sehr viel Speicherkapazität.

  • Logos
  • Diagramme
  • Clipart
  • Technische SW-Fotos
  • Schmuck und Verzierungen
  • Symbole

Pixelgrafiken in Vektoren konvertieren, geht unter anderem sehr gut mit Inkscape. Noch besser in der Qualität und kleiner im Speicherbedarf ist es, Logos und kleine Pixelgrafiken neu als SVG-Dokument zu erstellen.

Texte optimieren

Hier empfehle ich ich folgendes.

  • Nicht mehr als drei Schriftarten
    • Mit Serifen für den Text, wie „Times“, „Garamond“ und „Optima“, aber nicht unbedingt „Times New Roman“
    • Serifenlos plakativ für Überschriften, wie Helvetica, Univers oder Arial
    • Dicktengleich für Code oder Eigennamen, wie Courier und Monospace
  • Nicht mehr als zwei Formatierungen, wenn überhaupt notwendig, denn Syntax ist besser
  • Syntax des Wortprozessors, also des Schreibprogramms, nutzen
  • Wenn möglich Blocksatz, englisch „justify“, einsetzen

Standard-Schriftarten für PDF

  • Courier, als Standard, fett, kursiv, fett und kursiv
  • Helvetica, als Standard, fett, kursiv, fett und kursiv
  • Symbol
  • Times Roman, als Standard, fett, kursiv, fett und kursiv
  • Zapf Dingbats

Für Linux-Nutzer, das Paket poppler enthält auch dieses pdffonts-Paket.

Vektorschriftarten

Ansonsten sind generell Vektorschriftarten den fixen Schriftarten vorzuziehen. Ausnahmen sind die Standard-PDF-Fonts.

  • OpenType, meine Empfehlung, da die wenigsten Begrenzungen vorliegen, wie beispielsweise die Ligaturen, also das Zeichenzusammensetzen zu einer Glyphe
  • TTF, also TrueTypeFont

Tabellen optimieren

Bitte beachten, das csv-Dateiformat ist wunderbar als Austauschformat und zum konvertieren zu nutzen, denn das meist unnütze und oft doppelte Background-Layout aus CSS, Javascript, HTML5-Markup und so weiter, wird dabei vernachlässigt. Zum Schluss bleibt die reine data-Essenz.

Übrigens die Tabulator-Separation oder die Semikolon-Separation der Spalten sind besser, wenn viel Text mit Kommas enthalten sind.

Audio- und Videodateien

Multimedia-Dateien würde ich separat ausliefern, obwohl ein PDF-Dokument eben ein Container ist. Denn durch die Vielfalt von tausenden Formaten in Dateiextensionen, Variationen, Frequenzen, Komprimierungen und Containerformaten, könnte ein PDF-Dokument stolpern oder versagen.

Terminal

Im Terminal sind die meisten PDF-Bearbeitungen möglich, auch die Qualitätseinstellungen beziehungsweise wie viel Speicherkapazität genutzt wird.

LibreOffice besitzt eine CLI-Schnittstelle. Darunter ist der lowriter und der ist unter anderem auch geeignet für eine Umwandlung in PDF.

Ansonsten sind im Terminal vor allem entscheidend das Paket ghostscript und eventuell noch die Pakete pdftricks und pdftk.

Mit den zwei letzt genannten Paketen können unter anderem folgende Optionen für PDF genutzt werden:

  • Teilen und Zusammenfügen
  • Drehen
  • Wasserzeichen setzen
  • Metadaten abfragen
  • Formulare ausfüllen
  • Verschlüsseln und Entschlüsseln
  • Komprimieren und Dekomprimieren
  • Anlagen einfügen

Gerade eine Stapelverarbeitung, ist in der Konsole am einfachsten. Ich selbst habe mir einige Scripts gebastelt.

Qualitätseinstellungen

In Ghostscript können einige Parameter genutzt werden, um kleine PDF-Dokumente zu erstellen. Das entbindet trotzdem nicht vorher die Bilder und andere genannten Optionen zuerst einzurichten.

Standardexport in Ghostscript:

path/gs -P- -dSAFER -dCompatibilityLevel=1.7 -q -P- -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sstdout=? -sOutputFile=? -P- -dSAFER -dCompatibilityLevel=1.7

Eine vorhandenes PDF-Dokument kann man wie folgt verkleinern.

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dBATCH -sOutputFile=Ausgabe.pdf Eingabe.pdf

-dPDFSETTINGS setzt die Qualität des PDF-Dokumentes:

  • screen niedrige Qualität (72 dpi)
  • ebook mittlere Qualität (150 dpi)
  • printer hohe Qualität (300 dpi)
  • prepress Druckvorstufe (300 dpi)
  • -sOutputFile Pfad und Name des zu erstellenden PDF-Dokumentes
  • Eingabe.pdf Pfad und Name des Quell-Dokumentes
  • -sDEVICE das Ausgabegerät festlegen
  • -dCompatibilityLevel PDF Standard festlegen
  • -dNOPAUSE läuft ohne zusätzliche Bestätigung durch
  • -dBATCH beendet am Ende Ghostscript automatisch

Die weiteren Parameter werden beschrieben in gs --help und man gs.

PDF komprimieren mit Windows-Batch

Mehrfach getestet CMD-Script.

@echo off
setlocal

set "sourceDir="
set "targetDir=neu"
echo Bitte kompletten Pfad zum PDF-Verzeichnis eingeben:
set /p "sourceDir=Verzeichnis: "
if not exist "%sourceDir%" (
    echo Verzeichnis nicht gefunden!
    exit /b
)

cd /d "%sourceDir%"
if not exist "%targetDir%" mkdir "%targetDir%"

for %%f in (*.pdf) do (
    echo Verarbeite: %%f
    gswin64c.exe -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dSAFER ^
        -dCompatibilityLevel=1.7 -dPDFSETTINGS=/screen ^
        -sOutputFile="%targetDir%\%%~nf_neu.pdf" "%%f"

    if exist "%targetDir%\%%~nf_neu.pdf" (
        exiftool -all= -overwrite_original "%targetDir%\%%~nf_neu.pdf"
    ) else (
        echo Fehler bei Datei %%f
    )
)
echo Fertig! Die verkleinerten PDFs liegen im Unterverzeichnis "%targetDir%".
pause

PDF komprimieren mit python

Damit man sieht, dass es auch andere Möglichkeiten gibt, hier ein python-Beispiel für das Verkleinern aller PDF-Dokumente in einem Verzeichnis.

An dieser Adresse habe ich folgendes Python-Script pdfcompress.py gesehen.

from __future__ import print_function
import os
import subprocess

root = "."

try:
   os.mkdir('compressed')
except FileExistsError:
   pass   
   
for file in os.listdir(root):
      if file.endswith(".pdf"):
         filename = os.path.join(root, file)
         arg1= '-sOutputFile=' + './compressed/' + file
         print ("compressing:", file )
         p = subprocess.Popen(['gs', '-sDEVICE=pdfwrite', '-dCompatibilityLevel=1.4', '-dPDFSETTINGS=/screen', '-dNOPAUSE', '-dBATCH',  '-dQUIET', str(arg1), filename], stdout=subprocess.PIPE).wait()

Die Terminal-Ausführung im Verzeichnis mit den PDF-Dokumenten:

python3 pdfcompress.py

Alle verkleinerten PDF-Dokumente befinden sich nun im Unterverzeichnis „compressed“.

Da ich noch nie mit python zu tun hatte, wurde ein Test absolviert. Mit Erfolg bestanden, nur wird sehr viel Tamtam benötigt. Es werden notwendigerweise die Verzeichnisse „os“ und „subprocess“ erstellt, die dann wieder gelöscht werden müssen.

PDF konvertieren in Text mit Layout

Wer sich später überlegt, nichts geht über Datensparsamkeit, kann PDF in Textdateien umwandeln bei Beibehaltung des Layout. Dazu wird das Paket pdftotext benötigt. Hier ein Code-Beispiel, bei dem alle PDF-Dokumente im Verzeichnis zu Text-Dateien umgewandelt werden.

for file in *.pdf; do pdftotext -layout "$file"; done

Windows-Pedant ist das PDF2TXT.

lowriter

Beispiel einer Stapelverarbeitung, also alle docx-Dokumente im Verzeichnis, werden zu PDF-Dokumenten konvertiert.

lowriter --convert-to pdf *.docx

Datei-Umwandlung

Für die Umwandlung von oder in PDF-Dokumenten stehen sehr viele Werkzeuge zur Verfügung. In den verbreitetsten Distributionen bracht man nur zu suchen nach:

  • *2pdf
  • *topdf
  • pdf2*
  • pdfto*

Dann werden schon die Tools ausgeworfen wie pdf2svg, gscan2pdf, img2pdf, rs2pdf, html2pdf, svg2pdf, text2pdf, email2pdf, wrt2pdf und sehr viele weitere. Diese Werkzeuge arbeiten in der Regel sehr effizient, also schonend mit Speicherkapazitäten.

Der Umgang mit den Tools ist relativ einfach. Wird Hilfe benötigt, dann zuerst <paketname> --help und noch mehr Hilfe unter man <paketname>.

Übrigens, auch die manpages kann man in ein sehr kleines PDF-Dokument exportieren, hier ein Beispiel mit den PDF-Standard-Schriftarten Courier und Times.

man -t inkscape | ps2pdf - inkscape-manpage.pdf

PDF bearbeiten

Nur um diesen Beitrag abzurunden, dieser Abschnitt über das nachträgliche grafische Editieren.

Jede schon erstellte PDF-Datei könnte nachträglich, auch wenn das originale Office-Dokument nicht vorhanden ist, doch noch editiert werden.

Theoretisch geht jeder Texteditor, der PDF einlesen kann. Trotzdem stelle ich mal einige grafische Editoren vor.

  • masterpdfeditor, nur bis Version 4.3.89-1 vollumfänglich als Editor nutzbar, proprietäre Lizenz
  • xournalpp, hübsche schnelle Lösung
  • LibreOfficeDraw, der Vorteil, es ist schon in der LibreOffice-Suite vorhanden
  • inkscape, nicht zu empfehlen bei mehrseitigen Dokumenten
  • Liste weiterer Software hier

Warnung

Bitte zur eigenen Sicherheit, niemals PDF-Dokumente Online im Internet erstellen oder konvertieren. Der Inhalt ist ab diesem Zeitpunkt dem Anbieter bekannt und könnte missbraucht werden!

Zusammenfassung

Das sind meine Empfehlungen.

  • Bilder in webp-Dateiformat mit 76% Komprimierung
  • Grafiken in svg-Dateiformat
  • Schriften in otf-Dateiformat
  • Schriften-Anzahl nicht mehr als drei
  • Syntax nutzen, statt Schriften-Formatierung
  • Blocksatz bevorzugen
  • Tabellen erst in csv-Dateiformat konvertieren
  • Audio- und Videodateien vermeiden einzubinden
  • Stapelverarbeitung sehr vieler Dokumente am besten in der Konsole
  • Konvertierungen ebenfalls schneller und besser in der Konsole
  • Niemals online im Internet PDF-Dokumente erstellen oder konvertieren

Epilog

Manchmal steht man wie vor einer Wand, dieser Beitrag soll den Wanddurchbruch ermöglichen, zumindest die Umgehung der Wand.

Eigentum

Die Bilder sind allermeist im Quellformat hochauflösende Vektorgrafiken und meine Schöpfungen sowie mein Eigentum. Wenn nicht anders gekennzeichnet, sind die Bilder, Grafiken und Websites-Screenshots von mir erstellt und mein Eigentum.