von Patrick Gundlach |

Neue Option --suppressinfo

Es gibt ab Version 3.9.3 einen neuen Kommandozeilenparameter --suppressinfo, um die Datumsangaben aus dem PDF zu löschen und die zufällige Dokumenten ID durch eine feste zu ersetzen.

Normalerweise werden in dem Info-Dictionary Angaben zur Software und zum Dokument gemacht, z.B.

2 0 obj
<<
  /CreationDate (D:20200128205428+01'00')
  /Creator (speedata Publisher 3.9.2, www.speedata.de)
  /ModDate (D:20200128205428+01'00')
  /Producer (LuaTeX 111 - 7235)
  /Trapped /False
>>
endobj

Die Einträge CreationDate und ModDate beinhalten das Datum der Dokumenterzeugung. Manchmal möchte man das aber nicht im PDF haben.

Ebenso ist am Ende der PDF Datei (Trailer) die Dokumenten ID zu finden, die meist zufällig generiert wird:

trailer <<
  /Info 2 0 R
  /Root 1 0 R
  /Size 20
  /ID [<68365150b6c3965d17fe7bf2a16f4a4b><68365150b6c3965d17fe7bf2a16f4a4b>]
>>

Reproduzierbare (identische) PDF-Dateien erzeugen

Mein aktueller Anwendungsfall ist folgender: ich möchte Publisher mit denselben Eingabedateien aufrufen und bei jedem Durchlauf exakt dieselbe Ausgabe haben. Und zwar nicht nur optisch (die PDF-Ausgabe sieht gleich aus), sondern die Dateien auf der Festplatte sollen identisch sein (gleiche Checksumme). Das funktioniert natürlich nur, wenn eben nicht der aktuelle Zeitstempel bzw. eine zufällige Dokument ID in die Datei geschrieben wird.

Wird der Publisher nun mit sp --suppressinfo aufgerufen, so wird bei jedem Durchlauf exakt dieselbe Datei geschrieben. Das gilt aber nur innerhalb einer Version des Publishers und mit denselben Eingabedateien.

Automatisierte Tests stark beschleunigt

Inzwischen ist die Testsuite des Publishers auf über hundert Testfälle angewachsen, die vor jedem Commit und auch zwischendurch aufgerufen wird. Für jeden Testfall wird ein Dokument generiert und mit einem Muster verglichen. Ergeben sich hier Abweichungen, so deutet das auf einen Fehler in der aktuellen Version des Publishers hin.

Auf meinem Notebook aus dem Jahre 2015 benötigen die Tests derzeit ca. 40 Sekunden. Damit ist eine Grenze erreicht, wo man fast nicht mehr auf das Ende der Tests warten kann. Dank der Möglichkeit nun reproduzierbare PDF-Dateien zu schreiben, kann nun auf den optischen Test verzichtet werden, wenn die Dateien (das erzeugte Dokument und die Referenz) dieselbe Prüfsumme haben. Das beschleunigt die Tests im besten Fall auf 20 Sekunden, im schlimmsten Fall (alle Dokumente sind unterschiedlich) bleibt es bei den ca. 40 Sekunden.

Ändert sich die Version des Publishers, müssen die Referenz-Dokumente neu generiert werden. In der Entwicklungsumgebung des Publishers ruft man dazu einfach

rake regenerateqa

auf. Das geht rekursiv durch das qa-Verzeichnis und erzeugt die Referenz-PDF mit folgenden Befehlen:

sp -s --jobname reference
sp --jobname reference clean