Fotobuch unter Linux

Meine Anforderungen

Software

Ein paar Anbieter bieten die Möglichkeit, das Fotobuch als PDF abzuliefern. Nur, mit welcher Software soll man es erzeugen? Beispiele:

Umsetzung

Die genannten Maße gelten für den Anbieter ePubli, siehe dessen Spezifikationen.

Inhalt in LaTeX

Ich habe mich entschieden, das Fotobuch in LaTeX zu realisieren.

Umschlag in SVG

Die Umschlagseiten habe ich mit Inkscape gestaltet:

Überprüfen des Ergebnisses

Anschnittrand

Man kann mit Hilfe des Programms pdftk eine PDF-Seite auf ein anderes PDF-Dokument stempeln, und somit den Beschnittrand sichtbar auf das Fotobuch stempeln. Dazu erstellt man zuerst einen geeigneten Stempel – ich habe dazu in Inkscape eine Seite mit der Brutto-Seitengröße des Fotobuchs erstellt, dann ein seitenfüllendes rotes halbtransparentes Rechteck eingefügt, und ein weiteres Rechteck mit der Netto-Seitengröße davon per Differenz-Operator abgezogen. Übrig bleibt der gewünschte Beschnittrand. Hier ist die Inkscape-Datei; und die daraus exportierten Stempel sind hier für linke Seiten und hier für rechte Seiten.

Das Draufstempeln funktioniert dann mit folgendem Skript; es ist etwas aufwändig, weil linke und rechte Seiten getrennt behandelt werden müssen, und dazu muss das PDF zuerst in Einzelseiten aufgespalten und die wieder zusammengesetzt werden:

#!/bin/bash

TEMPDIR=`mktemp -d`
PREVDIR="$PWD"

pushd $TEMPDIR > "/dev/null"

pdftk "$PREVDIR/$1" burst output "%04d.pdf"

for i in +([0-9]).pdf; do
	if [ $(( 10#${i/.pdf/} % 2 )) -eq 0 ]; then
		STAMP="$PREVDIR/stamp_epubli_left.pdf"
	else
		STAMP="$PREVDIR/stamp_epubli_right.pdf"
	fi

	pdftk $i stamp $STAMP output out_$i
done

pdftk out_+([0-9]).pdf cat output "$PREVDIR/$2"

popd > "/dev/null"

rm -Rf $TEMPDIR
Alternativer Weg: Mit dem Programm pdfjoin kann man auch PDF-Dateien beschneiden:
pdfjoin --trim "0mm 3mm 3mm 3mm" --outfile output.pdf input.pdf

Da auch hier linke und rechte Seiten unterschiedlich behandelt werden müssen, muss man ein ähnliches Skript wie oben verwenden, aber den pdftk-Aufruf durch pdfjoin ersetzen und statt der Variablen STAMP eine mit dem Beschnittrand-String definieren (die Reihenfolge der Zahlen bedeutet links, unten, rechts, oben).

Drittens hatte ich noch ein eigenes Skript zum Beschneiden gebastelt, bevor ich die vorigen beiden Wege entdeckt habe. Dieses fügt CropBox-Einträge in das PDF ein – weil das die xref-Tabelle nicht anpasst, kommt es zu Fehlermeldungen, aber in der Praxis funktioniert das PDF weiterhin.

#!/usr/bin/awk -f

BEGIN {
	margin = 3;	# crop margin in mm
	margin *= 360 / 127;	# convert mm to DTP point (= unit used in Postscript)
}

{ print; }

/^\/MediaBox / {
	match( $0, "\\[ *([0-9.-]+) +([0-9.-]+) +([0-9.-]+) +([0-9.-]+) *\\]", a );

	print "/CropBox [" (a[1] + margin) " " (a[2] + margin) " " (a[3] - margin) " " (a[4] - margin) "]";
}

Satzspiegel

Dazu verkleinert man das PDF, so dass zwei Seiten auf eine Seite passen. So sieht man, welche Bilder nebeneinander zu liegen kommen:

pdfnup --nup 2x1 --openright true --outfile output.pdf input.pdf

Farben

Digitalfotos verwenden den RGB-Farbraum; gedruckt wird jedoch meist mit dem CMYK-Farbmodell, welches nicht alle RGB-Farben darstellen kann. Entsprechend können besonders die reinen RGB-Grundfarben nicht korrekt wiedergegeben werden. Wie man die Farbwiedergabe mit freien Werkzeugen überprüfen kann, weiß ich nicht; ein allgemeingültiges Verfahren gibt es jedenfalls nicht, für die Konvertierung von einem Farbraum in einen anderen benötigt man die passenden Farbprofile.

Wenn man sein PDF-Fotobuch in CMYK konvertieren will, kann man das mit dem Programm ps2pdf mit der Option -dProcessColorModel=/DeviceCMYK tun. Anscheinend müssen außerdem auch die Bilder einzeln zu CMYK konvertiert werden, dies geht mit ImageMagick:

convert -profile /usr/share/color/icc/rgb.icc -profile /usr/share/color/icc/cmyk.icc input.jpg output.jpg

Bilder drehen

Die schwarzen Seitenränder heben zwar die Fotos hervor, allerdings entlarven sie auch schonungslos einen schiefen Horizont oder schräge Gebäude. Man sollte sich darauf gefasst machen, diverse Bilder nachbearbeiten zu müssen.

Mit GIMP geht das folgendermaßen:

PDF-Datei komprimieren

Mit einem Fotobuch sprengt man schnell das Größenlimit des Anbieters, wenn man die Bilder in voller Auflösung nimmt und viele Seiten hat. Weil der PDF-Overhead im Vergleich zu den eigentlichen Bilddaten vernachlässigbar ist, rekomprimiert man am besten die Bilder. Das geht beispielsweise mit jpegoptim:

jpegoptim --strip-all --max=90 *.jpg