Wie funktionieren PDF-Formularfelder? AcroForm, Appearance Stream und Reduzieren
7 Min. Lesezeit
Sie haben ein PDF-Formular ausgefüllt und versandt, und der Empfänger sagt: "Die Felder sehen leer aus." Oder das Formular sieht in einem Programm korrekt aus und in einem anderen mit einer anderen Schrift. All diese Seltsamkeiten haben ihre Ursache im Aufbau von PDF-Formularen. In diesem Beitrag erklären wir, wie Formularfelder in der Datei abgebildet sind und wie das Reduzieren diese Struktur beseitigt.
Zwei getrennte Welten: Seiteninhalt und interaktive Ebene
Auf einer PDF-Seite gibt es zwei verschiedene Arten von Inhalt.
Der Seiteninhaltsstrom ist die Befehlsfolge, die beschreibt, wie die Seite zu zeichnen ist. Text, Linien, Füllungen, Bilder – alles Statische steht hier.
Anmerkungen (Annotations) sind eigenständige Objekte, die über der Seite liegen. Haftnotizen, Hervorhebungen, Hyperlinks und – unser Thema – Widgets von Formularfeldern gehören in diese Kategorie.
Diese Unterscheidung ist entscheidend: Ein Formularfeld ist kein Teil des Seiteninhalts. Es ist ein eigenständiges Objekt, das im Array /Annots des Seitenobjekts aufgeführt wird. Der Code, der die Seite zeichnet, und der Code, der das Formularfeld zeichnet, laufen über verschiedene Wege.
AcroForm: das Formularwörterbuch auf Dokumentebene
Im Katalogobjekt des Dokuments findet sich der Schlüssel /AcroForm, der auf ein Wörterbuch verweist. Dieses Wörterbuch verwaltet das gesamte Formular:
/Fields: Die Liste aller Formularfelder des Dokuments. Felder können hierarchisch sein; unter einem übergeordneten Feld können mehrere untergeordnete Felder liegen./DA: Die Standard-Darstellungszeichenfolge. Angaben wie Schrift, Größe und Farbe sind hier definiert (etwa/Helv 0 Tf 0 g)./DR: Das Standard-Ressourcenwörterbuch. Die tatsächlichen Definitionen der in/DAgenannten Schriften stehen hier./NeedAppearances: Ein entscheidendes Kennzeichen; dazu gleich mehr./XFA: Sofern vorhanden, die XML-basierten dynamischen Formulardaten.
Das Formularfeldobjekt selbst trägt Folgendes:
/FT: Der Feldtyp –/Tx(Text),/Btn(Schaltfläche/Kontrollkästchen),/Ch(Auswahlliste),/Sig(Signatur)./T: Der Feldname (etwa "name_nachname", "datum")./V: Der Wert des Feldes – die vom Nutzer eingegebenen Daten./AP: Das Darstellungswörterbuch – wie dieser Wert gezeichnet wird.
Der Darstellungsstrom: die Quelle der Uneinheitlichkeit
Nun kommen wir zum wichtigsten Punkt. Der Wert eines Formularfeldes (/V) und dessen Darstellung (/AP) sind zwei verschiedene Dinge.
/V ist nur Datum: (Anna Müller). Mit welcher Schrift, in welcher Größe und in welcher Ausrichtung dieser Text auf der Seite gezeichnet wird, steht hier nicht.
/AP ist dagegen ein Darstellungsstrom – ein kleines XObject-Formular, das ganz wie der Seiteninhaltsstrom Zeichenbefehle enthält. Ein korrekt arbeitendes Formularprogramm aktualisiert beim Ausfüllen eines Feldes sowohl den Wert /V als auch den Darstellungsstrom /AP.
Das Problem ist, dass manche Programme den zweiten Schritt auslassen. Sie schreiben den Wert, aktualisieren aber die Darstellung nicht. Was geschieht dann?
Es hängt vom Betrachtungsprogramm ab. Ein fortgeschrittener Betrachter erzeugt die Darstellung selbst, wenn /AP fehlt oder veraltet ist – anhand der Schriftangabe in der /DA-Zeichenfolge. Doch nicht jeder Betrachter tut das auf dieselbe Weise: Bei Zeilenabstand, vertikaler Ausrichtung und dem Abschneiden überstehenden Textes verhalten sie sich unterschiedlich.
In einfachen Betrachtern erscheint das Feld leer. Manche schlanken PDF-Betrachter und mobile Anwendungen besitzen keine Fähigkeit, Darstellungen zu erzeugen. Fehlt /AP, zeichnen sie nichts.
Auch Druckertreiber haben dasselbe Problem. Das ist die häufigste technische Ursache für die Klage "Ich habe das Formular ausgefüllt, aber es kommt leer heraus."
Das NeedAppearances-Kennzeichen
Als Lösung für diese Lage wurde dem Standard das Kennzeichen /NeedAppearances hinzugefügt. Auf true gesetzt bedeutet es: "Vertrauen Sie den Darstellungsströmen dieses Formulars nicht, erzeugen Sie sie neu."
Formularwerkzeuge setzen dieses Kennzeichen, wenn sie die Darstellung nicht aktualisieren können.
Doch das Kennzeichen löst das Problem nicht vollständig:
- Betrachter ohne Fähigkeit zur Darstellungserzeugung ignorieren das Kennzeichen, und das Feld bleibt leer.
- Betrachter, die Darstellungen erzeugen können, tun das auf ihre eigene Weise; das Ergebnis unterscheidet sich von Programm zu Programm.
- Druckertreiber kümmern sich meist nicht um das Kennzeichen.
/NeedAppearances löst das Problem also in bestimmten Betrachtern, bietet aber keine allgemeingültige Garantie.
Wie das Reduzieren diese Unsicherheit beendet
Der Reduziervorgang leistet Folgendes:
1. Er nimmt den Darstellungsstrom jedes Formularfeldes. Ist /AP vorhanden, wird es direkt verwendet; andernfalls wird es aus dem Wert /V und der Angabe /DA erzeugt.
2. Er zeichnet diese Darstellung in den Seiteninhaltsstrom. Anhand von Position (/Rect) und Größe des Feldes wird sie als XObject-Formularaufruf oder unmittelbar als Zeichenbefehle eingefügt.
3. Er entfernt die Widget-Anmerkung aus dem Array /Annots.
4. Er löscht das Wörterbuch /AcroForm samt der darin enthaltenen /Fields-Liste.
5. Er entfernt die Formular-JavaScripts – Berechnungs- und Prüfcode ist damit wirkungslos.
Das Ergebnis: Der Wert ist nun ein dauerhafter Teil der Seite. Kein Betrachtungsprogramm muss ihn mehr auslegen, und er sieht in jedem Programm und auf jedem Drucker gleich aus.
| Aspekt | Vor dem Reduzieren | Nach dem Reduzieren | |---|---|---| | Einheitlichkeit der Darstellung | Vom Betrachter abhängig | Eindeutig | | Verlässlichkeit beim Drucken | Vom Treiber abhängig | Eindeutig | | Bearbeitbarkeit | Vorhanden | Nicht vorhanden | | JavaScript-Berechnungen | Funktionieren | Werden entfernt | | Formular-Tags für Screenreader | Vorhanden | Gehen verloren | | Dateigröße | — | Sinkt leicht |
Was geschieht, wenn der Darstellungsstrom fehlerhaft ist
Hier lauert eine Falle des Reduzierens. Das Werkzeug schreibt den vorhandenen /AP-Darstellungsstrom fest. Ist dieser Strom veraltet oder leer – hat das Formularprogramm also den Wert geschrieben, aber die Darstellung nicht aktualisiert –, kann das Reduzieren eine leere oder falsche Darstellung festschreiben.
Das Anzeichen: Öffnen Sie die Datei in einem Programm, sind die Werte sichtbar (dieses Programm erzeugt die Darstellung selbst), nach dem Reduzieren kommt sie jedoch leer heraus.
Die Lösung: Öffnen Sie das Formular in einem Programm, das Darstellungsströme sauber erzeugt, speichern Sie es und reduzieren Sie erst danach. Oder nutzen Sie die Fähigkeit des Reduzierwerkzeugs, die Darstellung aus dem Wert /V zu erzeugen, sofern vorhanden.
Das Problem des überlaufenden Textes
Formularfelder werden innerhalb ihres eigenen Rechtecks (/Rect) gezeichnet. Passt der eingegebene Text nicht in dieses Rechteck, lässt sich das Feld im interaktiven Modus scrollen – Sie klicken hinein und scrollen, um zu lesen.
Beim Reduzieren gibt es kein Scrollen. Nur der sichtbare Teil wird festgeschrieben; der Rest geht verloren.
Bei langen Adressfeldern, Bemerkungsfeldern und mehrzeiligen Textfeldern besteht damit ein echtes Risiko des Datenverlusts. Vor dem Reduzieren sollten Felder mit langen Inhalten geprüft werden.
XFA-Formulare: eine eigene Welt
Manche PDFs verwenden statt AcroForm (oder zusätzlich dazu) XFA. Das ist Adobes XML-basierte Technologie für dynamische Formulare: Felder wachsen je nach Daten, Tabellen erhalten neue Zeilen, und die Seitenzahl kann sich ändern.
XFA-Formulare sind kein natürlicher Bestandteil des PDF-Standards; sie sind eine eigene, in PDF eingebettete Technologie. Sie funktionieren nur in Adobes eigenen Produkten vollständig. In anderen Betrachtern erscheint meist der Hinweis, dass zur Anzeige dieses Dokuments Adobe Reader nötig sei.
In neueren PDF-Versionen wurde XFA abgeschafft. Ein XFA-Formular, das Ihnen begegnet, lässt sich meist nicht reduzieren; Sie müssen es zuvor in ein einfaches AcroForm oder ein statisches PDF umwandeln.
Der Zusammenhang mit digitalen Signaturen
Eine digitale Signatur speichert die kryptografische Prüfsumme des Bytebereichs zum Zeitpunkt der Signatur. Weil das Reduzieren die Datei neu schreibt, stimmt diese Prüfsumme nicht mehr überein, und die Signaturprüfung schlägt fehl.
Zudem ist das Signaturfeld selbst ein Formularfeld (/FT /Sig). Wandelt das Reduzieren es in festen Inhalt um, geht auch die kryptografische Struktur der Signatur verloren – zurück bleibt nur die optische Darstellung der Signatur, die keinerlei Prüfwert besitzt.
Die richtige Reihenfolge: ausfüllen → reduzieren → signieren.
Zusammengefasst
PDF-Formularfelder leben in einer vom Seiteninhalt getrennten interaktiven Ebene. Der Wert des Feldes (/V) und dessen Zeichnung (der Darstellungsstrom /AP) sind getrennte Strukturen, und fehlt der Darstellungsstrom oder ist er veraltet, legt ihn jedes Betrachtungsprogramm auf eigene Weise aus – daher rühren uneinheitliche Darstellung und leere Ausdrucke. Das Kennzeichen /NeedAppearances ist eine Teillösung, aber keine allgemeingültige. Das Reduzieren beendet die Unsicherheit, indem es die Darstellung dauerhaft in den Seiteninhalt zeichnet und die interaktive Ebene vollständig entfernt. Der Preis ist die Unumkehrbarkeit und der Verlust der Barrierefreiheitsstruktur; das Risiko besteht darin, einen fehlerhaften Darstellungsstrom oder überlaufenden Text festzuschreiben.
Häufig gestellte Fragen
Warum sieht dasselbe Formular in verschiedenen Programmen unterschiedlich aus?
Weil der Wert eines Formularfeldes und der Darstellungsstrom, der beschreibt, wie dieser Wert gezeichnet wird, zwei verschiedene Dinge sind. Fehlt der Darstellungsstrom oder ist er veraltet, zeichnet jedes Betrachtungsprogramm das Feld mit seiner eigenen Standardschrift, -größe und -ausrichtung. Ein Feld, das in einem Programm als Helvetica mit 11 Punkt erscheint, kann in einem anderen mit 9 Punkt in einer Systemschrift gezeichnet werden. Das Reduzieren beseitigt diese Unsicherheit.
Wozu dient das NeedAppearances-Kennzeichen?
Es ist ein Kennzeichen auf Dokumentebene und bedeutet: 'Den Darstellungsströmen der Felder in diesem Formular ist nicht zu trauen, das Betrachtungsprogramm soll sie neu erzeugen.' Hat ein Formularprogramm den Wert geschrieben, aber die Darstellung nicht aktualisiert, setzt es dieses Kennzeichen. Das Problem: Jedes Betrachtungsprogramm erzeugt die Darstellung auf seine eigene Weise, sodass Uneinheitlichkeit entsteht; und manche einfachen Betrachter ignorieren das Kennzeichen, sodass die Felder leer erscheinen.
Bleiben nach dem Reduzieren Formularfelddaten in der Datei?
Ein sauberes Reduzieren entfernt das AcroForm-Wörterbuch und die Widget-Anmerkungen aus der Datei, womit auch die Felddaten verschwinden. Trägt die Datei jedoch eine Historie inkrementeller Aktualisierungen, können frühere Fassungen darin verbleiben. Geht es um sensible Informationen, ist es sicherer, die Datei nach dem Reduzieren durch einen Vorgang zu schicken, der sie vollständig neu schreibt (etwa eine Komprimierung), und anschließend die Metadaten zu bereinigen.
Was ist ein XFA-Formular und worin unterscheidet es sich von AcroForm?
XFA ist Adobes XML-basierte Technologie für dynamische Formulare; Felder können je nach Daten wachsen und schrumpfen, und die Seitenzahl kann sich ändern. AcroForm ist dagegen Teil des PDF-Standards und statisch. XFA-Formulare funktionieren nur in Adobes eigenen Produkten vollständig; in anderen Betrachtungsprogrammen erscheint meist der Hinweis, dass zur Anzeige Adobe Reader nötig sei. In neueren PDF-Versionen wurde XFA abgeschafft.
Probieren Sie es gleich mit Formu Düzleştir aus.
Formu Düzleştir ausprobieren