PDF Dokumente können bestimmte Strukturfehler aufweisen. Über die Angabe einer PDF-Lesestrategie können Heuristiken aktiviert werden, um gewisse Strukturfehler automatisch zu korrigieren und somit eine Anzeige des defekten Dokuments ermöglichen.
Hierfür müssen im Reader
die PDFStructureReaderSettings
gesetzt werden.
Die in diesen Einstellungen enthaltene Aufzählung
PDFStructureReaderSettings.PDFStructureReadStrategy
gibt die Strategie an. Im
folgenden Abschnitt werden die möglichen Einstellungen genauer erläutert.
WICHTIG: Es werden Heuristiken angewandt, die Fehler abfangen. Da nicht alle möglichen Fehler vorhersehbar sind, und die Reaktion auf solche Fehler nicht definiert ist, kann nicht bestimmt werden, ob die Anzeige korrekt ist.
Es kann gegebenenfalls Strukturprobleme geben, die von der Heuristik nicht korrekt behandelt werden.
Insbesondere wenn Dokumente in einem Langzeitarchiv abgelegt werden, muss die
integrierende Anwendung entscheiden, wie mit solchen Dokumenten umgegangen
werden soll. Weitere Hinweise zu diesem Thema im Abschnitt Beispiel 7.30, „Setzen von PDFStructureReaderSettings
für das Lesen fehlerhafter
Dokumente“.
Desweiteren kann es semantische Fehler im PDF-Datenstrom geben, die zwar syntaktisch fehlerfrei gelesen werden konnten, aber erst bei der späteren Anzeige oder Interpretation zu Fehlern führen.
Aus diesen Gründen sollte diese Funktion nicht verwendet werden, um ein
fehlerhaftes Dokument zu »bereinigen«, indem beispielsweise das Dokument mit
LENIENT_ON_ERROR
zur Anzeige gebracht und dann wieder
als PDF exportiert wird.
Die Lesestrategie kann über die PDFStructureReaderSettings
gesetzt werden
(enum PDFStructureReaderSettings.PDFStructureReadStrategy
):
PDFStructureReaderSettings.PDFStructureReadStrategy
.STRICT
-
Strenger Lesemodus; Fehler in der PDF Struktur führen gegebenenfalls zu Fehlern und Abbruch beim Lesevorgang.
Dieser Modus ist der Standardwert.
PDFStructureReaderSettings.PDFStructureReadStrategy
.LENIENT_ON_ERROR
-
Toleranter Lesemodus. Zunächst wird versucht, das Dokument mit dem strikten Mechanismus (
PDFStructureReaderSettings.PDFStructureReadStrategy
.STRICT
) zu lesen. Wenn hierbei Fehler auftreten, wird je nach Fehler versucht, das Problem zu korrigieren.Hinsichtlich Performance verhält sich dieser Modus bei fehlerfreien Dokumenten analog dem Lesemodus
STRICT
. Wenn Strukturfehler im PDF enthalten sind, erhöht sich die Lesedauer, um die Korrekturen anzuwenden.Dieser Modus ist in Produktionsumfeldern verwendbar, wenn mit strukturell defekten Dokumenten gerechnet werden muss. Bei Behebung von Strukturfehlern werden spezielle Log-Meldungen produziert, die über einen Listener abgefangen werden können. Eine integrierende Anwendung kann so den Benutzer darauf hinweisen, dass bei diesem Dokument eine Korrektur erfolgt ist.
Siehe hierzu auch das Kapitel Beispiel 7.30, „Setzen von
PDFStructureReaderSettings
für das Lesen fehlerhafter Dokumente“. PDFStructureReaderSettings.PDFStructureReadStrategy
.ALWAYS_GENERATE_XREF
-
In diesem Modus wird die im PDF enthaltene cross-reference table (Zuordnungstabelle von PDF-Objekten zu ihrem Byte-Offset innerhalb des Datenstroms) ignoriert und immer eine Tabelle generiert, unabhängig davon, ob der PDF Datenstrom tatsächlich Fehler aufweist.
Beim Generieren der cross-reference table wird der komplette Dokument-Datenstrom gelesen und die Positionen der Objekte ermittelt. Dieser Vorgang kann bei großen Dokumenten länger dauern, als das Lesen einer korrekten cross-reference table aus dem PDF. Bei kleinen Dokumenten ist der Unterschied gering.
Der Modus
LENIENT_ON_ERROR
informiert mittels spezifischer Log-Meldungen darüber, dass es sich um ein defektes Dokument handelt. Diese Meldungen werden beiALWAYS_GENERATE_XREF
nicht produziert, da die Fehler durch die Generierung der cross-reference table gar nicht erst auftreten.
Es können die folgenden Arten von Strukturfehlern im Modus
LENIENT_ON_ERROR
korrigiert werden (im Modus
ALWAYS_GENERATE_XREF
treten diese Fehler generell nicht
auf, da die originale cross-reference table gar nicht gelesen wird).
Im Kapitel Beispiel 7.31, „Behandlung/Erkennung von strukturell defekten Dokumenten“ ist ein Beispiel zur Auswertung und Erkennung von strukturell defekten Dokumenten enthalten.
- Falscher cross-reference offset
-
startxref
zeigt nicht auf den Anfang der cross-reference table. Korrektur: Suchen der korrekten Position. Im ModusSTRICT
erscheint bei diesem Fehler die Fehlermeldung:specified location does not contain a cross reference table
.Wenn dieser Fehler auftritt und korrigiert wird, erscheint die Log-Meldung
DOCP.FORMAT.PDF.STRUCT-XREF_OFFSET_WRONG
- Fehlende oder leere cross-reference table
-
Wenn die cross-reference table nicht vorhanden oder leer ist, wird die Tabelle generiert.
Wenn dieser Fehler auftritt und korrigiert wird, erscheint die Log-Meldung
DOCP.FORMAT.PDF.STRUCT-XREF_OFFSET_OR_TABLE_MISSING
- Fehler beim Lesen der cross-reference table
-
Wenn generelle Fehler beim Lesen der cross-reference table auftreten, wird die komplette cross-reference table generiert.
Wenn dieser Fehler auftritt und korrigiert wird, erscheint die Log-Meldung
DOCP.FORMAT.PDF.STRUCT-STRUCTURE_PARSE_ERROR_USING_GENERATED_XREF
- Position der cross-reference table nicht lesbar
-
Wenn die Position der cross-reference table (
startxref
) nicht ermittelt werden konnte, wird versucht, die Tabelle zu finden.Wenn dieser Fehler auftritt und korrigiert wird, erscheint die Log-Meldung
DOCP.FORMAT.PDF.STRUCT-XREF_OFFSET_WRONG
- Mehrere PDF Dokumente im Datenstrom
-
Wenn auf ein
%%EOF
ein%PDF-1.x.
folgt, wird dies erkannt als ›mehrere Dokumente im Datenstrom‹. In diesem Fall werden nur die Objekte aus dem letzten Dokument des Datenstroms ermittelt.Wenn dieser Fehler auftritt und korrigiert wird, erscheint die Log-Meldung
DOCP.FORMAT.PDF.STRUCT-MULTIPLE_DOCUMENTS_IN_STREAM
- Unbekanntes Root-Objekt im Trailer
-
Wenn ein unbekanntes Objekt im Trailer angegeben ist, wird dieses nach Möglichkeit ersetzt durch eine Referenz auf das korrekte Katalog-Objekt.
Wenn dieser Fehler auftritt und korrigiert wird, erscheint die Log-Meldung
DOCP.FORMAT.PDF.STRUCT-TRAILER_WRONG_ROOT_OBJECT
Wenn eine der genannten Fehlersituationen aufgetreten ist, wird neben der oben angegebenen Log-Meldung auch immer noch eine generelle Log-Meldung produziert, die allgemein auf eine Bereinigung hinweist. Diese Meldung kann beispielsweise dafür genutzt werden, um dem Benutzer einen Hinweis anzuzeigen.
Siehe hierzu auch das Beispiel im Abschnitt Beispiel 7.31, „Behandlung/Erkennung von strukturell defekten Dokumenten“.
WICHTIG: Korrekte Anzeige der Dokumente kann bei Verwendung der toleranten Modi nicht garantiert werden!