Foliehattsvänlig komprimering
En PDF ska iväg med mejl och väger 24 MB+ = upp med den i webbläsaren, dra in filen på någon av de där mer eller mindre skumma sajterna, vänta, ladda ner... Pang där är den igen, rutan om att gratisförsöken är slut för idag.
En struntsak, men en återkommande sådan. Och varje gång vibrerar foliehatten på toppen av hjässan: “Ska det här superhemliga dokumentet verkligen upp på någon random server, i ett land jag inte valt, och ligga kvar där tills någon råkar städa?”
Foliehatten har rätt oftare än den får kredd för. Inte för att det ligger något illvilligt bakom, utan för att det är ett beslut man har låtit någon annan ta. För en semesterbild spelar det ingen roll. För ett kunddokument borde det vara ett val.
Det roliga är att verktyget tjänsterna använder har legat fritt tillgängligt i ~trettio år. De flesta av dem är ett webbgränssnitt ovanpå Ghostscript.
Ja, jag vet att förhandsvisning kan det
Kvartsfilter → Minska filstorlek. Den finns där, den kostar ingenting och den laddar inte upp någonting. Jag tycker bara inte att den är tillräckligt bra.
Problemet är att det inte finns ett reglage. Filtret är hårdkodat på en nivå som är i aggressivaste laget, så bilder blir ofta grötiga på ett sätt man inte vill skicka till en kund och när det inte räcker finns ingenting att skruva på. Ibland blir filen till och med större än originalet. Vill man ha kontroll får man bygga egna kvartsfilter i ColorSync-verktyget, och då har man redan passerat den punkt där det är enklare att skriva ett kommando.
Reglaget
En PDF väger för mycket för att bilderna i den ligger i en upplösning ingen kommer se. Text väger ingenting i sammanhanget. Komprimering är alltså mest att skala ner bilderna och städa bort dubblerade fonter på vägen:
brew install ghostscript
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook \
-dNOPAUSE -dQUIET -dBATCH -sOutputFile=ut.pdf in.pdfHela reglaget sitter i -dPDFSETTINGS: /screen ger 72 dpi, /ebook 150 dpi, /printer och /prepress 300 och uppåt. För något som ska läsas på skärm är /ebook nästan alltid rätt, och 24 MB-filen landar gärna under 3 utan att någon märker skillnaden.
Från kommando till högerklick
Ett terminalkommando löser problemet bara för den som orkar öppna terminalen. Skillnaden mellan ett verktyg man har och ett man använder är oftast några sekunders friktion.

Öppna Automator, välj “Snabbåtgärd”. Arbetsflödet tar emot “PDF-filer” i “Finder”. Dra in “Kör kommandotolkskript” från Verktyg.
Två inställningar avgör om det fungerar: kommandotolken ska vara /bin/zsh, och “Överför indata” måste stå på som argument. Standardvärdet är till stdin, och med det får skriptet aldrig några filnamn. Det är den vanligaste anledningen till att en Automator-åtgärd tyst inte gör någonting.
GS="/opt/homebrew/bin/gs"
EXIFTOOL="/opt/homebrew/bin/exiftool"
for f in "$@"; do
dir=$(dirname "$f")
base=$(basename "$f" .pdf)
out="$dir/${base}-komprimerad.pdf"
"$GS" -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 \
-dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH \
-sOutputFile="$out" "$f" || continue
"$EXIFTOOL" -all= -overwrite_original -q "$out"
pct=$(( 100 - ($(stat -f%z "$out") * 100 / $(stat -f%z "$f")) ))
osascript -e "display notification \"$base: −${pct}%\" with title \"PDF komprimerad\""
doneSpara, döp den. Nu ligger den under Snabbåtgärder när du högerklickar på en PDF i Finder. Markera en, två eller tio filer om du vill, de körs i tur och ordning.
Tre saker värda att veta. Automator ärver inte din PATH, så gs måste anges med full sökväg; kör which gs och använd det du får. Originalet rörs aldrig, eftersom komprimering är destruktiv och man vill kunna gå tillbaka. Och metadataraden är det stycke foliehatten faktiskt ska läsa: Ghostscript stämplar in sig själv som Producer, och originalfilen kan bära på författarnamn och sökvägar från maskinen där den skapades. Ordningen är rätt så här, exiftool kan inte radera på riktigt inuti en befintlig PDF, men när Ghostscript först skrivit om hela strukturen finns ingen gammal revision kvar att gömma sig i.
Var lagom foliehatt, dock: det här tar bort metadata, inte innehåll. Text under en svart ruta är fortfarande text.
Mallen är återanvändbar
Resten är varianter på samma tema. Samma sju rader med ett annat kommando i mitten ger bildkonvertering till WebP med magick, Figma-SVG:er minifierade med svgo, skärminspelningar krympta med ffmpeg till en tiondel.
Det tog en kvart. Den betalar av sig ungefär en gång i veckan, men poängen är snarare minskad friktion med min dator och filerna lämnar aldrig maskinen. Foliehatten kan ligga kvar i lådan nästa gång jag ska komprimera PDF:er.
Har du en egen återkommande irritation eller en idé? Hör av dig.