Technischer Artikel

Excel-Arbeitsmappen aus Delphi als PDF/A exportieren

HotXLS exportiert eine Arbeitsmappe oder ein einzelnes Arbeitsblatt aus Delphi und C++Builder direkt nach PDF/A, ohne Excel und ohne PDF-Druckertreiber. Setzen Sie UsePDFA und wählen Sie ein Profil auf TXLSPDFExport, und die exportierte Datei trägt ein eingebettetes sRGB-ICC-Profil als Output-Intent, den pdfaid-Identifikationsblock in ihren XMP-Metadaten und einen zum Konformitätsgrad passenden PDF-Versions-Header

Die Anforderung kommt meist aus einer Aufbewahrungsrichtlinie und nicht von einem Entwickler. Finanzberichte, Laborergebnisse, behördliche Einreichungen und alles, was eine öffentliche Stelle jahrzehntelang aufbewahren muss, müssen in einem Format gespeichert werden, das in fünfzig Jahren identisch dargestellt wird, und genau das soll PDF/A, ISO 19005, garantieren. Eine Tabellenkalkulation ist eine lebende Berechnung; eine archivierte Kopie einer Tabellenkalkulation muss ein festes Abbild davon sein

Was macht ein PDF zu einem archivfähigen PDF?

Drei Anforderungen leisten den Großteil der Arbeit. Die Datei muss in sich geschlossen sein, sodass jede verwendete Schrift eingebettet ist und keine externe Ressource referenziert wird. Ihre Farbe muss eindeutig sein, was einen Output-Intent bedeutet, der den Farbraum benennt, für den die Datei erstellt wurde. Und sie muss sich selbst identifizieren, durch XMP-Metadaten, die die Teilnummer und den Konformitätsgrad deklarieren

HotXLS liefert alle drei. Das sRGB-Profil wird als Stream-Objekt mit drei Komponenten und DeviceRGB als Alternative eingebettet, referenziert von einem GTS_PDFA1-Output-Intent, dessen Bedingung und Kennung beide sRGB IEC61966-2.1 benennen. Das XMP-Paket trägt die pdfaid-Teil- und Konformitätseinträge. Die Profil-Bytes sind in die Bibliothek einkompiliert statt zur Laufzeit geladen, sodass kein Bereitstellungsschritt nötig ist und keine Gefahr besteht, dass eine fehlende Datei einen archivischen Export in einen gewöhnlichen verwandelt

Diagramm der drei PDF/A-Archivierungsanforderungen und des Apparats, den HotXLS aus Delphi schreibt: eingebettete FontFile2-Subsets, ein GTS_PDFA1-sRGB-Output-Intent und pdfaid-XMP-Identifikation
Eine PDF/A-Datei muss in sich abgeschlossen, farbeindeutig und selbstidentifizierend sein, und HotXLS schreibt das passende Instrumentarium aus der UsePDFA-Eigenschaftspaarung
uses
  lxHandleX, lxPDF;

var
  Book: TXLSXWorkbook;
  Exporter: TXLSPDFExport;
begin
  Book := TXLSXWorkbook.Create;
  Exporter := TXLSPDFExport.Create;
  try
    if Book.Open('quarterly-results.xlsx') <> 1 then
      Exit;

    Exporter.UsePDFA := True;
    Exporter.PDFAProfile := xlsPdfA2b;      // ISO 19005-2 Level B
    Exporter.DocumentLanguage := 'en-GB';
    Exporter.TagMode := xlsPdfTagsAutomatic;

    if Exporter.SaveAsPDF(Book, 'quarterly-results-archive.pdf') <> 1 then
      raise Exception.Create('archival export failed');
  finally
    Exporter.Free;
    Book.Free;
  end;
end;

Welches Profil sollten Sie wählen?

Die Profilaufzählung deckt PDF/A-1, PDF/A-2 und PDF/A-3 ab, jeweils in einer barrierefreien und einer grundlegenden Variante. Die praktischen Unterschiede sind geringer, als die Liste vermuten lässt

Level B, die grundlegende Variante, garantiert, dass die visuelle Erscheinung reproduzierbar ist. Level A fügt strukturelle und semantische Anforderungen hinzu, vor allem einen getaggten Strukturbaum und eine definierte Lesereihenfolge, sodass das Dokument für assistive Technologien zugänglich ist. Teil 2 lockert einige Einschränkungen von Teil 1 und erlaubt Objektströme und JPEG 2000; Teil 3 erlaubt zusätzlich beliebige eingebettete Dateien, was elektronische Rechnungsformate nutzen, um maschinenlesbares XML neben der menschenlesbaren Seite mitzuführen

Für eine archivierte Tabellenkalkulation ist PDF/A-2b die pragmatische Standardwahl: Es wird von Archiven breit akzeptiert, erfordert nicht die Tagging-Disziplin, die Level A einem Zellenraster auferlegt, und erlaubt die kompakten Strukturen, die verhindern, dass ein 200-seitiger Arbeitsmappen-Export aufbläht. Wählen Sie Teil 3, wenn das Archiv die Quelldaten zusätzlich als Anhang mitführen muss, was der Exporter über AddAttachment unterstützt

Die Schriftregel, die die meisten Leute erwischt

Jede Glyphe, die eine PDF/A-Datei zeichnet, muss aus einer eingebetteten Schrift stammen. Das ist der mit Abstand häufigste Grund, warum ein ansonsten korrekter Export die Validierung nicht besteht, und der Fehlermodus ist subtil: Die Datei sieht auf der Maschine, die sie erstellt hat, richtig aus, weil diese Maschine die Schrift installiert hat

HotXLS bettet TrueType-Subsets für die verwendeten Schriften ein, aber der Base-14-Fallback-Pfad existiert für Fälle, in denen eine Schrift nicht aufgelöst werden kann, und ein Base-14-Fallback ist per Definition nicht eingebettet. Konfigurieren Sie für archivische Ausgabe eine explizite Unicode-Schriftdatei, damit der Fallback-Pfad niemals genommen wird. Die Mechanik von Subsetting und der Fallback-Kette ist unter TrueType-Font-Subsetting beschrieben; die praktische Regel lautet, den Export auf einer Maschine zu testen, auf der Ihre Unternehmensschriften nicht installiert sind

Diagramm der PDF/A-Schriftregel in HotXLS-Delphi-Exporten: aufgelöste Schriften werden eingebettete TrueType-Subsets, die überall validieren, während der Base-14-Rückfall nie eingebettet wird und auf Maschinen ohne die Schrift scheitert
Eine nicht auflösbare Schrift fällt auf eine Base-14-Schrift zurück, die nie eingebettet wird, daher konfigurieren Sie eine explizite Unicode-Fontdatei und testen Sie auf einer Maschine ohne Ihre Firmenschriften

Was der Exporter garantiert, und was nicht

Präzision ist hier wichtiger als selbstsicher zu klingen. Der Export erzeugt den Identifikationsapparat von PDF/A — Output-Intent, eingebettetes ICC-Profil, pdfaid-Metadaten, einen passenden Versions-Header — und leitet Text über den Einbettungspfad. Er lässt jedoch keinen vollständigen Validator über die eigene Ausgabe laufen und erzwingt daher nicht jedes Verbot der Spezifikation, etwa die Regeln zu Transparenz, zu bestimmten Annotationstypen und zu optionalem Inhalt

Bei einem Tabellenkalkulations-Export tauchen diese Konstrukte selten auf, weshalb die praktische Erfolgsquote hoch ist. Hoch ist jedoch nicht dasselbe wie garantiert, und für eine echte Archivpipeline lautet die richtige Architektur, zu exportieren und anschließend mit einem unabhängigen Werkzeug zu validieren, wobei ein Validierungsfehler als Pipeline-Fehler und nicht als Warnung behandelt wird. Eine vergleichbare Aufgabenteilung für PDF-Dokumente ist unter PDF/A-Preflight-Validierung beschrieben

Layout ist Teil der archivischen Treue

Eine archivierte Tabellenkalkulation, die technisch konform, aber optisch unlesbar ist, hat ihre eigentliche Aufgabe verfehlt. Die Seiteneinrichtung trägt bei einem archivischen Export mehr Gewicht als bei einem alltäglichen Ausdruck, denn niemand wird sie später neu umbrechen können

Drei Einstellungen zahlen sich aus. Auf-Breite-anpassen verhindert den klassischen Fehler, bei dem eine 14 Spalten breite Tabelle als sieben Seiten mit je zwei Spalten ankommt. Sich wiederholende Kopfzeilen halten jede Seite für sich allein lesbar. Und explizite Druckbereiche schließen die Arbeitsnotizen aus, die rechts neben den eigentlichen Daten liegen. Der vollständige Satz an Druck- und Seiteneinrichtungssteuerungen ist unter Schutz, Seiteneinrichtung und Druck behandelt

// Archivfertige Seiteneinrichtung, vor dem Export angewendet
Sheet := Book.Sheets[0];
Sheet.PageLandscape := True;
Sheet.FitToWidth := 1;
Sheet.FitToHeight := 0;                  // so viele Seiten hoch wie nötig
Sheet.SetPrintArea('A1:N480');
Sheet.PrintTitleRows := '$1:$3';

// Metadaten gehören ebenfalls ins Archiv
Book.Title := 'Quarterly results 2026 Q2';
Book.Author := 'Finance';

Eine Checkliste, bevor der erste Batch läuft

Bestätigen Sie, dass sich die Datei selbst identifiziert: Nichts entpacken, einfach das PDF in einem Texteditor öffnen und nach den pdfaid-Teil- und Konformitätseinträgen sowie dem GTS_PDFA1-Output-Intent suchen. Bestätigen Sie die Schriften: prüfen Sie, dass jede Schrift im Dokument als eingebettet gemeldet wird. Bestätigen Sie die Erscheinung: vergleichen Sie die exportierten Seiten mit einer gedruckten Kopie, denn eine Auf-Seite-anpassen-Einstellung, die Text stillschweigend auf vier Punkt schrumpft, ist konform und nutzlos

Lassen Sie dann einen unabhängigen Validator über eine repräsentative Stichprobe laufen und bewahren Sie den Bericht auf. Archive verlangen zunehmend den Validierungsnachweis, nicht nur die Datei, und ihn zum Exportzeitpunkt zu erzeugen ist weit günstiger, als ihn Jahre später zu rekonstruieren. Für den alltäglichen, nicht archivischen Exportpfad und seine Rendering-Optionen siehe Worksheet-PDF-Export

Archivischer Export, Seiteneinrichtung und die dahinterliegende Rendering-Engine werden in einer Bibliothek für Delphi und C++Builder ausgeliefert; die vollständige Funktionsliste finden Sie auf der HotXLS-Delphi-Tabellenkalkulationskomponentenseite

Diagramm der Export-dann-Validieren-Architektur für HotXLS-Delphi-PDF/A-Ausgaben: der Exporteur schreibt den Identifikationsapparat, und ein unabhängiger Validator leitet die Datei ins Archiv oder wirft einen Pipelinefehler
Der Exporteur baut das Identifikationsinstrumentarium, während ein unabhängiger Validator die Konformität beweist, und eine gescheiterte Validierung stoppt den Stapel, statt eine Warnung zu protokollieren