Diese Seite kann automatisch übersetzten Text enthalten.

PDF in PDF/A konvertieren

Dieser Artikel erklärt, wie Sie PDF-Dokumente mit Docotic.Pdf in PDF/A konvertieren. Diese .NET-Bibliothek enthält einen hochperformanten PDF-zu-PDF/A-Konverter, der vollständig offline läuft. Sie können Docotic.Pdf auch verwenden, um PDF/A-Dokumente von Grund auf neu zu erstellen.

PDF in PDF/A

Warum PDF in PDF/A konvertieren?

PDF/A ist eine spezielle PDF-Version für die Archivierung. Die Konvertierung standardmäßiger PDF-Dokumente in PDF/A bietet mehrere Vorteile:

  1. Langzeitarchivierung
    PDF/A-Dokumente bleiben über viele Jahre zugänglich und nutzbar, was sie ideal für rechtliche, behördliche und archivische Zwecke macht.

  2. Einhaltung regulatorischer Anforderungen
    Branchen mit strengen Compliance- und gesetzlichen Anforderungen speichern Dokumente häufig in PDF/A.

  3. Einheitliche Darstellung in PDF-Viewern
    PDF/A-Dokumente werden auf verschiedenen Systemen und in unterschiedlichen PDF-Viewern konsistent angezeigt.

Lesen Sie den Artikel Was ist PDF/A? für weitere Informationen zum PDF/A-Standard.

PDF in PDF/A in C#

Um von PDF nach PDF/A zu konvertieren, benötigen Sie:

  1. Docotic.Pdf mit dem Conformance-Add-on.
  2. Einen Lizenzschlüssel. Sie können eine kostenlose, zeitlich begrenzte Lizenz von der Download-Seite erhalten.

Der folgende C#-Code konvertiert eine PDF-Datei in PDF/A-4:

using var pdf = new PdfDocument("input.pdf");
pdf.SaveAsPdfa("output.pdf", PdfaConformanceLevel.Pdfa4);

Die Methode SaveAsPdfa wird vom Add-on im Namespace BitMiracle.Docotic.Pdf.Conformance bereitgestellt. Sie unterstützt alle PDF/A-Konformitätsstufen: PDF/A-1a, PDF/A-1b, PDF/A-2a, PDF/A-2b, PDF/A-2u, PDF/A-3a, PDF/A-3b, PDF/A-3u, PDF/A-4, PDF/A-4e, PDF/A-4f. Die Ausgabe kann entweder in eine Datei oder in einen Stream geschrieben werden.

Wenn das Quelldokument nicht in die angeforderte PDF/A-Konformitätsstufe konvertiert werden kann, löst SaveAsPdfa eine ConformanceException aus. Details finden Sie im Abschnitt Fehlerbehandlung.

Erweiterte Konvertierungsszenarien

Docotic.Pdf unterstützt eine breite Palette von PDF/A-Workflows, einschließlich dem Erstellen von PDF/A-Dokumenten von Grund auf, dem Konvertieren von HTML in PDF/A und dem Zusammenführen von Dokumenten in eine einzelne PDF/A-Datei.

PDF/A-Dokumente erstellen

Docotic.Pdf bietet verschiedene Möglichkeiten, PDF-Dokumente in .NET zu erstellen. Sie können dieselbe Methode SaveAsPdfa verwenden, um PDF/A-Dokumente mit der Core API oder der Layout API zu erzeugen.

Dieser C#-Code erstellt mithilfe der Core API ein PDF/A-3u-Dokument:

using var pdf = new PdfDocument();
pdf.Pages[0].Canvas.DrawString("Hello PDF/A");
pdf.SaveAsPdfa("output.pdf", PdfaConformanceLevel.Pdfa3U);

Mit der Layout API erstellen Sie ein normales PDF-Dokument und konvertieren es dann in PDF/A. Dieses Codebeispiel zeigt, wie Sie ein PDF/A-1b-Dokument erzeugen:

using var ms = new MemoryStream();
PdfDocumentBuilder.Create().Generate(ms, doc => doc.Pages(pages =>
{
    pages.Content().Text("Hello, world!");
}));

using var pdf = new PdfDocument(ms);
pdf.SaveAsPdfa("output.pdf", PdfaConformanceLevel.Pdfa1B);

HTML in PDF/A

Das HtmlToPdf-Add-on konvertiert HTML in PDF. Um das Ergebnis für die Archivierung vorzubereiten, speichern Sie das erzeugte PDF als PDF/A:

var uri = new Uri("https://google.com");
var options = new HtmlConversionOptions
{
    PreserveStructureInformation = true,
};

using var converter = await HtmlConverter.CreateAsync();
using var pdf = await converter.CreatePdfAsync(uri, options);
pdf.SaveAsPdfa("output.pdf", PdfaConformanceLevel.Pdfa3A);

Die Option PreserveStructureInformation = true hilft dabei, barrierefreie Dokumente zu erzeugen. Dies ist wichtig für die Konformitätsstufen PDF/A-1a, PDF/A-2a oder PDF/A-3a.

PDF-Dokumente in PDF/A zusammenführen

Docotic.Pdf unterstützt das Zusammenführen von PDF-Dokumenten. Ersetzen Sie den Aufruf PdfDocument.Save durch SaveAsPdfa, um das zusammengeführte Dokument als PDF/A zu speichern:

using var pdf = new PdfDocument("first.pdf");
pdf.Append("second.pdf");
pdf.SaveAsPdfa("merged.pdf", PdfaConformanceLevel.Pdfa1B);

Sie können dasselbe Prinzip in anderen PDF-Bearbeitungsszenarien anwenden. Entfernen Sie zum Beispiel PDF-Seiten, bearbeiten Sie Text, reduzieren Sie Formularfelder und speichern Sie schließlich als PDF/A.

ZUGFeRD / Factur-X-Dateien in C# erstellen

Factur-X / ZUGFeRD ist ein europäischer E-Rechnungsstandard auf Basis von PDF/A-3. Sie können Docotic.Pdf verwenden, um eine XML-Rechnungsdatei einzubetten und ein gültiges Factur-X / ZUGFeRD-Dokument zu erzeugen:

using var pdf = new PdfDocument();

PdfFileSpecification xml = pdf.CreateFileAttachment("your_path_to/xrechnung.xml");
xml.Relationship = "Alternative";
pdf.SharedAttachments.Add(xml);

var fx = new XmpSchema("fx", "urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#");
var props = fx.Properties;
props.Add(new XmpProperty("DocumentType", new XmpString("INVOICE")));
props.Add(new XmpProperty("DocumentFileName", new XmpString("xrechnung.xml")));
props.Add(new XmpProperty("Version", new XmpString("3.0")));
props.Add(new XmpProperty("ConformanceLevel", new XmpString("XRECHNUNG")));

pdf.Metadata.Schemas.Add(fx);

pdf.SaveAsPdfa("zugferd.pdf", PdfaConformanceLevel.Pdfa3A);

Order-X-Dokumente erstellen

Order-X ist ein weiterer EU-Standard, der die elektronische Verarbeitung von Bestellungen ermöglicht. Dieses C#-Snippet zeigt, wie Sie mithilfe des COMFORT-Profils ein Order-X-Dokument erstellen:

using var pdf = new PdfDocument();

using (var file = File.OpenRead("order-data-comfort.xml"))
{
    PdfFileSpecification xml = pdf.CreateFileAttachment(file, "order-x.xml");
    xml.Relationship = "Data";
    pdf.SharedAttachments.Add(xml);
}

var fx = new XmpSchema("fx", "urn:factur-x:pdfa:CrossIndustryDocument:1p0#");
var props = fx.Properties;
props.Add(new XmpProperty("DocumentType", new XmpString("ORDER")));
props.Add(new XmpProperty("DocumentFileName", new XmpString("order-x.xml")));
props.Add(new XmpProperty("Version", new XmpString("1.0")));
props.Add(new XmpProperty("ConformanceLevel", new XmpString("COMFORT")));

pdf.Metadata.Schemas.Add(fx);

pdf.SaveAsPdfa("order-x.pdf", PdfaConformanceLevel.Pdfa3B);

Geschützte PDF-Dateien in PDF/A konvertieren

Die Konvertierung verschlüsselter PDF-Dateien ist nicht anders. Öffnen Sie das Dokument mit dem richtigen Kennwort und rufen Sie SaveAsPdfa auf:

using var pdf = new PdfDocument(fileName, new PdfStandardDecryptionHandler("password"));
pdf.SaveAsPdfa("result.pdf", PdfaConformanceLevel.Pdfa4E);

Stapelverarbeitung

Sie können die Konvertierung mehrerer PDF-Dateien in PDF/A automatisieren. Listen Sie alle PDF-Dateien in einem Verzeichnis auf und konvertieren Sie jedes Dokument in PDF/A. Dieses Codebeispiel zeigt, wie Sie Dateien parallel konvertieren:

public static async Task ConvertAsync(string directoryPath)
{
    string[] files = Directory.GetFiles(directoryPath, "*.pdf", SearchOption.AllDirectories);
    if (files.Length == 0)
        return;

    var semaphore = new SemaphoreSlim(Environment.ProcessorCount);
    var tasks = new List<Task>(files.Length);
    foreach (var f in files)
    {
        await semaphore.WaitAsync();

        var task = Task.Run(() =>
        {
            string outputFileName = $"{Path.GetFileName(f)}-{Guid.NewGuid()}.pdf";
            try
            {
                using var pdf = new PdfDocument(f);
                pdf.SaveAsPdfa(outputFileName, PdfaConformanceLevel.Pdfa1B);
            }
            finally
            {
                semaphore.Release();
            }
        });

        tasks.Add(task);
    }

    await Task.WhenAll(tasks);
}

Wenn Sie einen Konvertierungs-Workflow für beliebige PDF-Dateien implementieren, sollten Sie alle resultierenden Dateien auf PDF/A-Konformität validieren. Im Abschnitt Konvertierungsqualität bewerten finden Sie eine sofort einsetzbare Anwendung für Stapelkonvertierung und Validierung.

Fehlerbehandlung

Die Konvertierung kann in einigen Situationen fehlschlagen. Zum Beispiel, wenn:

  • Eine Eingabedatei kein PDF ist
  • Für ein verschlüsseltes PDF ein ungültiges Kennwort angegeben wird
  • Schriftartdaten für PDF/A nicht eingebettet werden können

Docotic.Pdf löst in solchen Fällen Ausnahmen aus. Dieser Beispielcode zeigt, wie Sie Ausnahmen behandeln:

try
{
    using var pdf = new PdfDocument("input.pdf");
    pdf.SaveAsPdfa("output.pdf", PdfaConformanceLevel.Pdfa1B);
}
catch (PdfException ex)
{
    Console.WriteLine($"Problem with an input document: {ex.Message}");
}
catch (ConformanceException ex)
{
    Console.WriteLine($"Unable to convert to PDF/A: {ex.Message}");
}

Von PDF/A zu PDF konvertieren

Die Konvertierung von PDF/A nach PDF wird manchmal verwendet, um die Bearbeitung von Dokumenten zu erleichtern. Der Prozess ist wesentlich einfacher als die Konvertierung von PDF in PDF/A. Sie müssen lediglich einen Teil der XMP-Metadaten entfernen. Beispielcode:

using var pdf = new PdfDocument("pdfa-compliant.pdf");

var schemas = pdf.Metadata.Schemas;
for (int i = 0; i < schemas.Count; ++i)
{
    if (schemas[i].Namespace == "http://www.aiim.org/pdfa/ns/id/")
    {
        schemas.RemoveAt(i);
        --i;
    }
}

pdf.Save("regular.pdf");

Warum Docotic.Pdf für die PDF-zu-PDF/A-Konvertierung wählen?

Docotic.Pdf ist eine hochperformante, reine C#-.NET-Bibliothek ohne externe Abhängigkeiten. Sie können sie verwenden, um PDF/A-Dokumente unter Windows, Linux, macOS, Android, iOS oder in einer Cloud-Umgebung zu erzeugen. Darüber hinaus bietet Docotic.Pdf die folgenden Vorteile:

Eigenständige Offline-Konvertierung

Die Konvertierung erfolgt vollständig auf Ihrem Computer. Es werden niemals Daten an externe Server oder Drittanbieter übertragen. Die Offline-Konvertierung hilft, sensible Dokumente zu schützen, da keine Daten Ihre Umgebung verlassen.

Qualität

Docotic.Pdf ist darauf ausgelegt, während der Konvertierung so viele Originalinformationen wie möglich zu erhalten, ohne die Qualität zu beeinträchtigen.

ISO-Konformität

Docotic.Pdf erzeugt PDF/A-Dateien, die den ISO-Standards entsprechen:

  • ISO 19005-1:2005 (PDF/A-1)
  • ISO 19005-2:2011 (PDF/A-2)
  • ISO 19005-3:2012 (PDF/A-3)
  • ISO 19005-4:2020 (PDF/A-4)

Jeder Docotic.Pdf-Build durchläuft Tausende automatisierter Tests. Die PDF-zu-PDF/A-Tests verwenden eine große Sammlung von PDF-Dateien aus verschiedenen Quellen und konvertieren sie in verschiedene PDF/A-Konformitätsstufen. Die resultierenden Dateien werden anschließend auf PDF/A-Konformität geprüft.

Eine Testgruppe überprüft, dass veraPDF für die konvertierten Dateien keine Probleme meldet. Eine zweite Testgruppe vergleicht jede resultierende Datei mit ihrer erwarteten PDF/A-Version, bei der durch veraPDF und Adobe Acrobat Preflight bestätigt wurde, dass sie keine Konformitätsprobleme enthält.

Konvertierungsqualität bewerten

Wir stellen das Open-Source-Projekt PdfToPdfa bereit. Es ist eine .NET-Konsolenanwendung, die PDF-Dateien in PDF/A konvertiert. Nach der Konvertierung validiert die App jedes resultierende Dokument. Das Projekt verwendet Docotic.Pdf für die Konvertierung und veraPDF für die Validierung.

Sie können diese Anwendung im Kommandozeilenmodus verwenden, um Ihre PDF/A-Workflows zu automatisieren. Oder verwenden Sie sie im UI-Modus, um Konvertierungsqualität und Leistung schnell zu bewerten.

PDF-Dateien in PDF/A konvertieren und PDF/A-Konformität validieren

Die Anwendung verarbeitet eine beliebige PDF-Datei oder ein Verzeichnis. Der Vollständigkeit halber enthält das Projekt-Repository auch Testdateien aus dem veraPDF-Korpus und der Isartor-Test-Suite.

Was passiert während einer Konvertierung in PDF/A?

Die PDF/A-Spezifikationen definieren eine umfangreiche Liste von Anforderungen an ein konformes Dokument. Der Konverter validiert und erzwingt alle davon, um gültige PDF/A-Dateien zu erzeugen. Auf hoher Ebene überprüft er jedes PDF-Objekt und behebt erkannte PDF/A-Konformitätsprobleme.

Nicht jedes PDF kann ohne Änderung seines Inhalts in PDF/A konvertiert werden. Einige PDF-Funktionen sind durch die gewählte PDF/A-Konformitätsstufe verboten, daher muss der Konverter sie entweder entfernen oder transformieren. Dadurch kann die Konvertierung verlustbehaftet sein.

PDF/A-1 erlaubt beispielsweise keine optionale Inhaltebene (Layer), eingebettete Dateien (Anhänge) oder Transparenz. Wenn ein ursprüngliches PDF-Dokument diese Funktionen verwendet, reduziert der Konverter Layer, entfernt Anhänge und Transparenz. Wenn die Erhaltung solcher Inhalte wichtig ist, wählen Sie eine PDF/A-Konformitätsstufe, die sie unterstützt:

  • Alle PDF/A-2-, PDF/A-3- und PDF/A-4-Konformitätsstufen unterstützen Transparenz und optionalen Inhalt.
  • PDF/A-3, PDF/A-4 und PDF/A-4f unterstützen beliebige eingebettete Dateien. PDF/A-2 und PDF/A-4 unterstützen nur eingebettete PDF/A-Dateien.

Sehen wir uns an, wie Docotic.Pdf die häufigsten Probleme behebt.

Schriften und Text

Der Konverter versucht, jede im Dokument verwendete Schriftart einzubetten. Für Schriftarten, die noch nicht eingebettet sind, versucht er zunächst, die passenden Schriftartdaten aus der Systemschriftarten-Sammlung oder aus einer benutzerdefinierten Schriftartenquelle zu laden. Wenn keine passende Schriftart gefunden wird, wird eine Ersatzschriftart verwendet.

Sie können diesen Prozess anpassen, indem Sie benutzerdefinierte Schriftartenlader bereitstellen. Die Schnittstelle IFontLoader wird zum Laden der Schriftartdaten verwendet. Die Implementierung DirectoryFontLoader lädt beispielsweise Schriftartbytes aus einem oder mehreren angegebenen Verzeichnissen.

Sie können auch eine Implementierung der Schnittstelle IFallbackFontProvider bereitstellen, um Ersatzschriftarten anzubieten, wenn IFontLoader die angeforderte Schriftart nicht laden kann.

Das folgende Beispiel zeigt, wie Sie das Laden von Schriftarten anpassen können:

public static void ConfigurePdfToPdfa(
    string fileName,
    PdfaConformanceLevel level,
    Stream output,
    IFontLoader? fontLoader,
    IFallbackFontProvider? fallbackFontProvider)
{
    var config = PdfConfigurationOptions.Create();
    if (fontLoader != null)
        config.FontLoader = fontLoader;

    if (fallbackFontProvider != null)
        config.FallbackFontProvider = fallbackFontProvider;

    using var pdf = new PdfDocument(fileName, config);
    pdf.SaveAsPdfa(output, level);
}

Docotic.Pdf behebt auch inkonsistente Glyphenbreiten sowie CMap- und ToUnicode-Streams. Nicht definierte Zeichen werden während des Konvertierungsprozesses entfernt.

Metadaten

Der Konverter korrigiert oder entfernt ungültige Metadaten-Schemata oder -Eigenschaften, fügt das pdfaid-Schema hinzu und synchronisiert die XMP-Metadaten sowie das Dokumentinformationswörterbuch.

Das Conformance-Add-on stellt außerdem die Erweiterungsmethode ReadPdfaConformance für PdfDocument bereit. Verwenden Sie diese Methode, um die in den XMP-Metadaten deklarierte PDF/A-Konformitätsstufe zu lesen:

using var pdf = new PdfDocument("input.pdf");
PdfaConformanceLevel? level = pdf.ReadPdfaConformance();

Farben

Der Konverter stellt Ausgabeabsicht-ICC-Profile für geräteabhängige Farben bereit, da geräteabhängige Farben in PDF/A-Dokumenten nicht zulässig sind. Er behebt außerdem nicht konforme Ausgabeabsichten und Farbräume.

Transparenz wird bei der Erzeugung von PDF/A-1-Dokumenten entfernt. Dies betrifft Mischmodi, weiche Masken und Transparenzgruppen. Auch ungültige Bildeigenschaften werden korrigiert.

Eingebettete Dateien

Der Umgang mit eingebetteten Dateien hängt von der PDF/A-Konformitätsstufe ab. In PDF/A-1 werden alle eingebetteten Dateien entfernt.

In PDF/A-2 und PDF/A-4 werden eingebettete PDF-Dateien in PDF/A konvertiert. Nicht-PDF-Anhänge werden entfernt. Für eingebettete PDF/A-Dateien werden in PDF/A-4 außerdem MIME-Typen und Dateibeziehungen korrigiert.

In PDF/A-3 werden Anhänge nicht entfernt, aber Dateibeziehungen und MIME-Typen werden korrigiert.

Interaktive Funktionen

Der Konverter erzeugt fehlende oder ungültige Darstellungs-Streams. Er korrigiert außerdem ungültige Anmerkungseigenschaften, ebnet Anmerkungen nicht zulässiger Typen ein und entfernt Aktionen nicht zulässiger Typen.

XFA-Formulare werden für PDF/A-2, PDF/A-3 und PDF/A-4 entfernt. Nur PDF/A-1 erlaubt XFA-Formulare, sie werden für die Langzeitarchivierung jedoch weiterhin nicht empfohlen.

Optionaler Inhalt wird beim Ziel PDF/A-1 reduziert. Für andere Konformitätsstufen korrigiert der Konverter Konfigurationswörterbücher für optionalen Inhalt mit unvollständigen Order-Arrays, fehlenden Namen oder doppelten Namen.

Digitale Signaturen

Digitale Signaturen erlauben grundsätzlich keine Änderungen am signierten Inhalt. Wenn der signierte Teil des PDF PDF/A-Konformitätsprobleme enthält, behebt der Konverter diese und ungültigiert die Signatur.

Weitere Bereiche

Für Barrierefreiheit fügt der Konverter grundlegende Dokumentstrukturinformationen hinzu, wenn sie fehlen. Er korrigiert außerdem ungültige oder nicht standardkonforme Struktur-Tags. Dies gilt für PDF/A-1a-, PDF/A-2a- und PDF/A-3a-Dokumente.

PDF/A-Dateien dürfen nicht verschlüsselt sein, daher erlaubt der Konverter keine Verschlüsselung von Ausgabedateien.

LZW-komprimierte Daten sind in PDF/A nicht zulässig. Der Konverter recomprimiert LZW-Streams mit Flate-Komprimierung. Er korrigiert außerdem nicht konforme Array-, Dictionary-, Number-, Name- und String-Objekte.

Ungültige Dateikopfzeilen oder Cross-Reference-Abschnitte werden ebenfalls automatisch korrigiert.

Abschluss

Docotic.Pdf mit dem Conformance-Add-on bietet einen hochwertigen PDF-zu-PDF/A-Konverter. Sie können vorhandene PDF-Dokumente in jede PDF/A-Konformitätsstufe konvertieren oder PDF/A-Dokumente von Grund auf erstellen. Die Bibliothek arbeitet vollständig On-Premises, sodass Ihre Daten Ihre Server nie verlassen.

Sie können ausführbare C#- und VB.NET-Beispiele zum Erstellen und Verarbeiten von PDF/A-Dokumenten im PDF/A-Bereich des Beispiel-Repositorys erkunden.

Es gibt außerdem die Open-Source-PdfToPdfa-Anwendung für die PDF-zu-PDF/A-Konvertierung. Sie können sie verwenden, um PDF/A-Workflows zu automatisieren oder einfach PDF-Dateien in PDF/A zu konvertieren.

Häufig gestellte Fragen

Wie wählt man den richtigen PDF-zu-PDF/A-Konverter aus?

Ein guter PDF-zu-PDF/A-Konverter sollte:

  1. PDF/A-konforme Dateien erzeugen.
  2. Informationen und visuelle Darstellung aus Quelldokumenten bewahren.
  3. Lokal laufen, ohne Dateien an Server Dritter zu senden.
  4. Schnell arbeiten.
  5. Falls Automatisierung erforderlich ist, Ausführung ohne UI unterstützen.

Die Docotic.Pdf-Bibliothek erfüllt alle Kriterien und ist eine gute Wahl für die Konvertierung von PDF in PDF/A.

Wie validiert man, dass das PDF/A-Dokument konform ist?

Verwenden Sie Validierungssoftware. Ein guter PDF/A-Validator sollte:

  1. ISO-Standards für PDF/A gründlich befolgen.
  2. Lokal laufen, ohne Dateien an Server Dritter zu senden.
  3. Schnell arbeiten.
  4. Falls Automatisierung erforderlich ist, Ausführung ohne UI unterstützen.

veraPDF ist ein branchenübliches Validierungswerkzeug, das alle diese Anforderungen unterstützt.

Wie automatisiert man einen PDF-zu-PDF/A-Konvertierungs-Workflow?

Konvertieren Sie PDF-Dateien mit dem Docotic.Pdf Conformance-Add-on. Validieren Sie die Ergebnisse mit dem veraPDF-Validator. Verfolgen Sie den Fortschritt von Konvertierung und Validierung.

Die Open-Source-PdfToPdfa-Anwendung implementiert diesen Workflow. Verwenden Sie sie als Ausgangspunkt für Ihre eigene Implementierung.

Welche PDF/A-Version sollte ich verwenden?

Lesen Sie den Abschnitt Wie man eine PDF/A-Version auswählt.

Kann ich eine XML-Datei in ein PDF für ZUGFeRD einbetten?

Ja, unbedingt. Sehen Sie sich die Beispiele im Abschnitt ZUGFeRD / Factur-X-Dateien erzeugen an.

Wie schützt man ein PDF/A-Dokument?

Technisch ist das unmöglich. PDF/A-Dateien dürfen nicht verschlüsselt werden.