Von AsciiDoc zum barrierefreien PDF/UA

Veröffentlicht als Einblick
von Joschi Kuphalam

So verbreitet das Portable Document Format (PDF) ist, so unzugänglich und unbenutzbar ist es auch — meint zumindest Usability-Experte Jakob Nielsen in seinem jüngst erschienenen Artikel PDF: Still Unfit for Human Consumption, 20 Years Later. Darin spricht er dem De-facto-Standard für elektronische Schriftstücke nicht zum ersten Mal jede Form von Gebrauchstauglichkeit ab — zumindest für die Nutzung auf einem Bildschirm. Doch auch wenn viele Wahrheiten in Nielsens vernichtender Analyse stecken, so ist PDF als Format so schnell nicht wegzudenken aus unserem digitalen Alltag — und leider wohl auch nicht aus dem Web.

Simple Helfer

In unserer täglichen Praxis entstehen laufend umfangreiche Schriftstücke. Viele von ihnen sind technischer Natur: Dokumentationen, Spezifikationen, Recherche- und Analyseergebnisse, Test- und Audit-Berichte, Konzepte und Protokolle. Manche Dokumente entstehen parallel zu Programmierungen und landen zusammen mit irgendwelchem Quellcode in einem Software-Versionierungssystem, etwa in unserer Gitlab-Instanz oder im Bitbucket der Kundschaft.

In der Regel steckt wenig Expressionismus in solchen Dokumenten — die Palette an wirklich notwendigen Gestaltungsmöglichkeiten ist sehr überschaubar. Ein bisschen fett hier, eine Liste oder Tabelle dort, vielleicht mal ein Bild oder zwei. Eindeutig wichtiger ist da schon die saubere Struktur der Dokumente, und dass man möglichst wenig falsch machen kann. Kommen wir zum Punkt: Genau hier schlägt die Stunde von Markdown, dem supersimplen Textformat, in dem ich gerade diesen Blogartikel verfasse. Oder AsciiDoc, das ähnlich funktioniert, aber mehr Ausdrucksmöglichkeiten als Markdown hat. AsciiDoc hat sich bei uns im Team inzwischen zum Liebling für technische Dokumente entwickelt.

Manche unserer Schriftstücke sind allerdings für die Weitergabe nach draußen gedacht. Und da wird schnell klar, dass wir bis auf Weiteres kaum jemanden mit Markdown oder AsciiDoc kommen brauchen. Zur Verdeutlichung des Klientels, dass wir mit unseren Werken gelegentlich erreichen müssen, ein Beispiel, wie es sich letzte Woche ernsthaft zugetragen hat: Da erhielt ich eine E-Mail-Nachricht, mit einer PowerPoint-Präsentation im Anhang, darin ein Screenshot von einem im Browser geöffneten PDF (dem Corporate Design Guide, der uns seit Wochen hätte vorliegen sollen). Keine Pointe. Da wären wir wieder. Hello again, PDF!

Formatting Objects

Wie bei Herrn Nielsen liegt meine erste ernsthafte Affäre mit PDF bereits 20 Jahre in der Vergangenheit. Damals hatte ich XSL-FO (Extensible Stylesheet Language – Formatting Objects) für mich entdeckt — einen XML-Dialekt zur Beschreibung grafisch gestalteter Dokumente, der sich unter anderem für die Produktion hochwertiger Druckerzeugnisse eignet. XSL-FO kann mit Hilfe geeigneter Umwandlungsprogramme, sogenannter Prozessoren, in verschiedene Formate übersetzt werden: In Reintext oder in PNG-Bilder, ins Rich Text Format oder in Hewlett-Packard's Printer Command Language (PCL), in SVG-Grafiken — oder eben auch in drucktaugliche PDF-Dokumente.

Natürlich war ich vor allem am Einsatz im Web-Kontext interessiert, etwa zur dynamischen Generierung von PDF-Produktdatenblättern im Hintergrund einer Website. XSL-FO war damals noch sehr jung, alle verfügbaren FO-Prozessoren hochexperimentell und durchweg in Java implementiert, weshalb ein Einsatz in den üblichen Hosting-Umgebungen quasi unmöglich war. Und hupsi: Kaum hatte ich mich versehen, schon steckten eineinhalb Jahre Entwicklungsarbeit in phop, meinem eigenen kleinen, PHP-basierten FO-Prozessor. Das muss etwa um 2002 herum gewesen sein, und immerhin hat phop eine Weile lang im bescheidenen Maß seinen Dienst hinter den Kulissen von ein paar kleinen Websites verrichtet, bevor ich das Projekt schließlich aufgab.

Apache FOP

Der mitunter älteste, quelloffene und frei verfügbare FO-Prozessor ist der Apache FOP. Erstaunlicherweise hat seine Weiterentwicklung nach langem Stillstand in den letzten Jahren wieder etwas an Fahrt gewonnen. Begünstigt durch die Tatsache, dass wir in immer mehr Hosting-Umgebungen Java zur Verfügung hatten, konnten wir über die Jahre einige Lösungen auf Basis von XSL-FO und dem Apache FOP implementieren — so kommen beispielsweise die dynamisch generierten Fahrzeug-Exposés bei Fischer Automobile mit dieser Technik zustande.

Manche fragen vielleicht: Was können XSL-FO und Apache FOP, das die bekannten freien PHP-Bibliotheken wie FPDF und TCPDF nicht können? Die Antwort ist simpel, aber ein echter Game Changer: Mit den genannten Bibliotheken muss jeder Block, jede Zeile einzeln positioniert und dimensioniert werden. Es ist Aufgabe des erzeugenden Programms, die Einhaltung von Begrenzungen sicherzustellen und etwa bei Bedarf neue Seiten anzulegen. Die Erzeugung umfangreicher und komplexer Dokumente und Layouts kann schnell zum unüberschaubaren Albtraum werden. Anders beim FO-Prozessor: Er übernimmt vollautomatisch den Textfluss, wie man es von Office-Programmen her kennt, passt Inhalte in Begrenzungen ein, sorgt für Umbrüche und Spaltigkeit, Seitenzahlen und Fußnoten. Statt Positionen und Dimensionen definieren Formate und Regeln, wie der Prozessor Inhalte anordnet und gestaltet. Kurzum: Formatting Objects sind die weitaus intelligentere, fortschrittlichere und skalierbarere Technik.

DocBook

Doch zurück zum eigentlichen Thema. Wenn AsciiDoc das Format ist, in dem wir gerne schreiben, und PDF das Format, in dem unsere Kundschaft gerne liest, wie kommen wir dann möglichst einfach vom einen zum anderen Format? Und: Wie können wir dabei am besten auch unseren Anspruch verwirklichen, möglichst konsequent barrierefrei zu kommunizieren?

Der erste Teil der Antwort heißt DocBook: Ein weiterer XML-Dialekt, der speziell für die Auszeichnung von — nicht nur, aber vor allem — technischen Texten, Artikeln und Büchern entwickelt wurde. Passenderweise kann das offizielle Kommandozeilen-Programm asciidoc das AsciiDoc-Format direkt in DocBook (Version 4.5) übersetzen.

Die restliche Strecke erledigen schließlich die ebenfalls frei verfügbaren DocBook XSLT 1.0 Stylesheets: Mit ihnen lassen sich DocBook-Dokumente direkt in XSL-FO übersetzen — und hier schließt sich der Kreis, denn zwischen XSL-FO und PDF liegen dank Apache FOP ja bekanntermaßen nur noch ein paar Sekunden …

PDF/UA

Für alle diejenigen, denen das zu kompliziert war, hier nochmal in ganz, ganz einfach:

AsciiDoc → DocBook XML 4.5 → XSL-FO → PDF/UA

Geht doch, oder? Aber Moment, was bedeutet nur dieses „UA“ am Ende?

„UA“ steht für „Universal Accessibility“. Gemeint sind PDF-Dateien, die den ISO-Standard 14289-1:2014 erfüllen und damit gemeinhin als barrierefrei bezeichnet werden. Die europäische Norm EN 301 549 V.2.1.2 (2018-08), die in Deutschland durch die Barrierefreie Informationstechnik-Verordnung (BITV) 2.0 umgesetzt wird und die von öffentlichen Stellen unter anderem barrierefreie Dokumente fordert, bezieht sich indirekt auf diesen Standard. Soweit Barrierefreiheit bei PDFs zu erreichen ist, darf der PDF/UA-Standard als Zielmarke verstanden werden. Zur Prüfung der Konformität mit dem PDF/UA-Standard wurde das Matterhorn-Protokoll entwickelt. Mit dem kostenlosen PDF Accessibility Checker 3.0 (PAC 3) können PDF-Dateien anhand des Matterhorn-Protokolls auf Barrierefreiheit geprüft werden.

Alles fügt sich

Es gibt also tatsächlich eine funktionierende Umwandlungskette, mit der man aus AsciiDoc-Texten reproduzierbar barrierefreie PDF-Dokumente erzeugen kann — zumindest, wenn man ein bisschen nachhilft:

  • Das asciidoc-Programm verliert standardmäßig unterwegs die Dokumentbeschreibung und ein paar andere Merkmale, die im PDF nützlich sind.
  • Die DocBook XSLT-Stylesheets übernehmen oder erzeugen von Haus aus nicht alle Merkmale, die für ein barrierefreies PDF/UA notwendig sind.
  • Die Unterstützung des PDF/UA-Standard im Apache FOP wurde in den letzten Jahren zwar stark verbessert, aber im Detail ist noch Luft nach oben. Wenigstens barrierefreie Fußnoten würden wir schon gerne nutzen …

Das ist aber alles halb so wild, wenn man sich zu helfen weiß: asciidoc kann mit einer Konfigurationsergänzung hingebogen werden, die XSLT-Stylesheets unterstützen ohnehin individuelle Anpassungen über ein Customization Layer, und auch der Java-Quellcode des Apache FOP lässt sich patchen. Wer ein klares Ziel vor Augen hat, der lässt sich eben nicht aufhalten. ;)

Die Flexibilität der XSLT-Stylesheets ermöglicht uns außerdem, unser Corporate Design in den Umwandlungsprozess einfließen zu lassen. Indem wir ein eigenes Theme für die Umwandlung bereitstellen, werden unsere PDF-Dokumente automatisch mit unserem Logo und anderen individuellen Angaben versehen — ganz ohne Zutun der Redakteurinnen und Redakteure beim Verfassen.

adoc2pdfua

Schlussendlich sind am skizzierten Workflow doch einige individuell angepasste Programme und Konfigurationen beteiligt. Von den Anwendungen sind manche schon unter Linux nicht ganz einfach in Betrieb zu nehmen. Dabei arbeiten wir doch überwiegend unter Windows und würden auch und vor allem dort gerne barrierefreie PDFs erzeugen, möglichst ohne aufwendige Installations- und Wartungsorgien. Was tut also der geneigte Nerd in solchen Situationen? Richtig: Er fällt nach vorne, packt alles in ein Docker-Image namens adoc2pdfua, installiert sich benutzerdefinierte Kontextmenüeinträge und konvertiert drauf los. Wie das in der Praxis aussieht, zeigt das folgende Video.

Transkript: Deutsch (German)

Mein Name ist Joschi Kuphal und ich möchte in diesem kurzen Video zeigen, wie wir hier im Tollwerk mit unserem Docker-basierten Konverter auf Knopfdruck AsciiDoc-Dateien in barrierefreie PDFs umwandeln können.

Wir sehen hier ein AsciiDoc-Dokument, das ich in diesem Fall mit meiner Programmierumgebung PHPStorm geschrieben habe. Das Dokument enthält etliche Bilder, Listen, Tabellen und natürlich vor allem viel formatierten Text.

Um dieses Dokument jetzt in ein barrierefreies PDF umzuwandeln, schließe ich erstmal meine Bearbeitungsumgebung und gehe im Windows Explorer zum Speicherort dieser Datei. Wenn ich dort das Kontextmenü öffne, finde ich eine Reihe von benutzerdefinierten Optionen, die mir erlauben, das Dokument in ein PDF/UA zu konvertieren. Ich entscheide mich für die Option, unser Tollwerk-Design anzuwenden, und sobald ich die Option aktiviere, öffnet sich ein Kommandozeilenfenster, in dem ich über den Fortschritt der Konvertierung informiert bleibe.

Während wir warten, öffne ich schon mal den PDF Accessibility Checker, oder auch PAC 3 genannt. Das ist ein kleines Tool, mit dem man PDFs darauf prüfen kann, ob sie dem PDF/UA-Standard entsprechen.

Die Konvertierung kann durchaus mal eine halbe Minute oder Minute dauern, je nachdem, wie viele Bilder beteiligt sind. Sobald sie abgeschlossen ist, finde ich in meinem Windows Explorer das fertig konvertierte PDF, das ich testweise jetzt mal mit dem Adobe Acrobat öffnen kann. Wie ich sehe, erstrahlt mein formatierter Text samt Bildern, Listen und allem, was da so drin ist, jetzt in unserem Design.

Um zu beweisen, dass es sich um ein barrierefreies PDF handelt, ziehe ich die Datei aus meinem Windows Explorer noch auf den PDF Accessibility Checker und lasse sie analysieren. Wie wir sehen, wird mir zum Schluss bestätigt, dass meine Datei dem PDF/UA-Standard entspricht. Diese Warnung hier ist kein wirklicher Fehler, sondern hier ist sich nur PAC 3 nicht ganz sicher, ob unsere Hauptüberschrift auch wirklich eine sein sollte. Ich bin mir da wiederum sehr sicher.

Das war es auch schon mit der Demonstration, und es wurde hoffentlich deutlich, wie einfach die Konvertierung zwischen AsciiDoc und einem barrierefreien PDF mit diesem Workflow sein kann. 

Mit dem adoc2pdfua-Prozess steht uns eine experimentelle, aber funktionierende und portable Lösung zur Verfügung, mit der wir auf Knopfdruck AsciiDoc-Texte in individuell gestaltete, barrierefreie PDF/UA-Dokumente konvertieren können. Die Formatoptionen, die AsciiDoc bietet, sind bestens geeignet für die Sorte technischer Dokumente, die wir in unserer Praxis verfassen.

Ob unser Workflow bereit für den Massenmarkt wäre, sei dahingestellt — in jedem Fall haben wir eine Menge über die Möglichkeiten gelernt und können davon sicherlich einiges auch auf Online-Szenarien übertragen. Dynamisch erzeugte, barrierefreie Datenblätter zum Download auf der Website? Kein Problem (mehr). Wir bleiben dran, und werden unsere Prozesse weiter verfeinern. Und sollte in der Zwischenzeit jemand Interesse an einem eigenen, maßgeschneiderten PDF/UA-Workflow haben: Wir sind jederzeit bereit!