Questa pagina può contenere testo tradotto automaticamente.
Convert PDF to PDF/A
Questo articolo spiega come convertire documenti PDF in PDF/A con Docotic.Pdf. Questa libreria .NET include un convertitore PDF-to-PDF/A ad alte prestazioni che funziona interamente offline. Puoi anche usare Docotic.Pdf per creare documenti PDF/A da zero.

Perché convertire PDF in PDF/A?
PDF/A è una versione speciale di PDF progettata per l'archiviazione. La conversione di documenti PDF standard in PDF/A offre diversi vantaggi:
-
Conservazione a lungo termine
I documenti PDF/A rimangono accessibili e utilizzabili per molti anni, rendendoli ideali per scopi legali, governativi e di archivio. -
Conformità normativa
I settori con rigorosi requisiti di conformità e legali spesso archiviano i documenti in PDF/A. -
Aspetto coerente in tutti i visualizzatori PDF
I documenti PDF/A vengono visualizzati in modo coerente su sistemi diversi e in diversi visualizzatori PDF.
Leggi l'articolo Che cos'è PDF/A? per ulteriori informazioni sullo standard PDF/A.
PDF a PDF/A in C#
Per convertire da PDF a PDF/A, ti servono:
- Docotic.Pdf con il componente aggiuntivo Conformance.
- Una chiave di licenza. Puoi ottenere una licenza gratuita a tempo limitato dalla pagina di download.
Il seguente codice C# converte un file PDF in PDF/A-4:
using var pdf = new PdfDocument("input.pdf");
pdf.SaveAsPdfa("output.pdf", PdfaConformanceLevel.Pdfa4);
Il metodo SaveAsPdfa è fornito dal componente aggiuntivo nel namespace BitMiracle.Docotic.Pdf.Conformance. Supporta tutti i livelli di conformità PDF/A: 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. L'output può essere scritto in un file o in uno stream.
Se il documento di origine non può essere convertito al livello di conformità PDF/A richiesto, SaveAsPdfa genera un ConformanceException. Vedi la sezione Gestione degli errori per i dettagli.
Scenari avanzati di conversione
Docotic.Pdf supporta un'ampia gamma di flussi di lavoro PDF/A, inclusa la creazione di documenti PDF/A da zero, la conversione di HTML in PDF/A e l'unione di documenti in un unico file PDF/A.
Crea documenti PDF/A
Docotic.Pdf offre diversi modi per creare documenti PDF in .NET. Puoi usare lo stesso metodo SaveAsPdfa per generare documenti PDF/A con il Core API o il Layout API.
Questo codice C# crea un documento PDF/A-3u usando il Core API:
using var pdf = new PdfDocument();
pdf.Pages[0].Canvas.DrawString("Hello PDF/A");
pdf.SaveAsPdfa("output.pdf", PdfaConformanceLevel.Pdfa3U);
Con il Layout API, crei un normale documento PDF e poi lo converti in PDF/A. Questo esempio di codice mostra come generare un documento PDF/A-1b:
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
Il componente aggiuntivo HtmlToPdf converte HTML in PDF. Per preparare il risultato per l'archiviazione, salva il PDF generato come 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);
L'opzione PreserveStructureInformation = true aiuta a produrre documenti accessibili. Questo è importante per i livelli di conformità PDF/A-1a, PDF/A-2a o PDF/A-3a.
Combina documenti PDF in PDF/A
Docotic.Pdf supporta l'unione di documenti PDF. Sostituisci la chiamata PdfDocument.Save con SaveAsPdfa per salvare il documento unito come PDF/A:
using var pdf = new PdfDocument("first.pdf");
pdf.Append("second.pdf");
pdf.SaveAsPdfa("merged.pdf", PdfaConformanceLevel.Pdfa1B);
Puoi applicare lo stesso principio in altri scenari di modifica PDF. Ad esempio, rimuovere pagine PDF, modificare testo, appiattire campi modulo e infine salvare come PDF/A.
Crea file ZUGFeRD / Factur-X in C#
Factur-X / ZUGFeRD è uno standard europeo per fatture elettroniche basato su PDF/A-3. Puoi usare Docotic.Pdf per incorporare un file XML della fattura e produrre un documento Factur-X / ZUGFeRD valido:
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);
Crea documenti Order-X
Order-X è un altro standard UE che consente l'elaborazione elettronica degli ordini d'acquisto. Questo frammento C# mostra come creare un documento Order-X usando il profilo COMFORT:
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);
Converti file PDF protetti in PDF/A
La conversione di file PDF crittografati non è diversa. Apri il documento con la password corretta e chiama SaveAsPdfa:
using var pdf = new PdfDocument(fileName, new PdfStandardDecryptionHandler("password"));
pdf.SaveAsPdfa("result.pdf", PdfaConformanceLevel.Pdfa4E);
Elaborazione batch
Puoi automatizzare la conversione di più file PDF in PDF/A. Enumera tutti i file PDF in una directory e converti ciascun documento in PDF/A. Questo esempio di codice mostra come convertire i file in parallelo:
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);
}
Quando implementi un flusso di conversione per file PDF arbitrari, vale la pena convalidare tutti i file risultanti per la conformità PDF/A. Puoi trovare un'applicazione pronta all'uso per la conversione e la validazione batch nella sezione Valuta la qualità della conversione.
Gestione degli errori
La conversione può fallire in alcune situazioni. Ad esempio, quando:
- Un file di input non è un PDF
- Viene fornita una password non valida per un PDF crittografato
- Non è possibile incorporare i byte del font per PDF/A
Docotic.Pdf genera eccezioni in questi casi. Questo esempio di codice mostra come gestire le eccezioni:
try
{
using var pdf = new PdfDocument("input.pdf");
pdf.SaveAsPdfa("output.pdf", PdfaConformanceLevel.Pdfa1B);
}
catch (PdfException ex)
{
Console.WriteLine($"Problema con un documento di input: {ex.Message}");
}
catch (ConformanceException ex)
{
Console.WriteLine($"Impossibile convertire in PDF/A: {ex.Message}");
}
Converti da PDF/A a PDF
La conversione da PDF/A a PDF viene talvolta usata per facilitare la modifica dei documenti. Il processo è molto più semplice della conversione da PDF a PDF/A. Devi solo rimuovere una parte dei metadati XMP. Codice di esempio:
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");
Perché scegliere Docotic.Pdf per la conversione da PDF a PDF/A?
Docotic.Pdf è una libreria .NET C# pura ad alte prestazioni, senza dipendenze esterne. Puoi usarla per produrre documenti PDF/A su Windows, Linux, macOS, Android, iOS o in un ambiente cloud. Inoltre, Docotic.Pdf offre i seguenti vantaggi:
Conversione offline autonoma
La conversione avviene interamente sul tuo computer. Nessun dato viene mai trasmesso a server esterni o provider di terze parti. La conversione offline aiuta a proteggere i documenti sensibili perché nessun dato lascia il tuo ambiente.
Qualità
Docotic.Pdf è progettato per preservare il più possibile le informazioni originali durante la conversione, senza sacrificare la qualità.
Conformità ISO
Docotic.Pdf produce file PDF/A conformi agli standard ISO:
- 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)
Ogni build di Docotic.Pdf passa attraverso migliaia di test automatizzati. I test PDF-to-PDF/A usano una vasta raccolta di file PDF provenienti da diverse fonti e li convertono in vari livelli di conformità PDF/A. I file risultanti vengono poi verificati per la conformità PDF/A.
Un gruppo di test controlla che veraPDF non segnali problemi per i file convertiti. Un secondo gruppo di test confronta ogni file risultante con la sua versione PDF/A attesa, che è stata verificata come priva di problemi di conformità sia da veraPDF sia da Adobe Acrobat Preflight.
Valuta la qualità della conversione
Forniamo il progetto open source PdfToPdfa. È un'applicazione console .NET che converte file PDF in PDF/A. Dopo la conversione, l'app convalida ogni documento risultante. Il progetto usa Docotic.Pdf per la conversione e veraPDF per la validazione.
Puoi usare questa applicazione in modalità riga di comando per automatizzare i tuoi flussi di lavoro PDF/A. Oppure usarla in modalità UI per valutare rapidamente qualità e prestazioni della conversione.

L'applicazione elabora un file PDF o una directory arbitraria. Per comodità, il repository del progetto include anche file di test dal corpus veraPDF e da Isartor Test Suite.
Cosa succede durante una conversione in PDF/A?
Le specifiche PDF/A definiscono un lungo elenco di requisiti per un documento conforme. Il convertitore li convalida e li applica tutti per produrre file PDF/A validi. A livello generale, controlla ogni oggetto PDF e corregge i problemi di conformità PDF/A rilevati.
Non tutti i PDF possono essere convertiti in PDF/A senza alterarne il contenuto. Alcune funzionalità PDF sono vietate dal livello di conformità PDF/A selezionato, quindi il convertitore deve rimuoverle o trasformarle. Di conseguenza, la conversione può essere un processo con perdita di dati.
Per esempio, PDF/A-1 non consente contenuto opzionale (livelli), file incorporati (allegati) o trasparenza. Se un documento PDF originale usa queste funzionalità, il convertitore appiattisce i livelli, rimuove gli allegati e la trasparenza. Se preservare tale contenuto è importante, scegli un livello di conformità PDF/A che lo supporti:
- Tutti i livelli di conformità PDF/A-2, PDF/A-3 e PDF/A-4 supportano trasparenza e contenuto opzionale.
- PDF/A-3, PDF/A-4 e PDF/A-4f supportano file incorporati arbitrari. PDF/A-2 e PDF/A-4 supportano solo file PDF/A incorporati.
Vediamo come Docotic.Pdf risolve i problemi più comuni.
Font e testo
Il convertitore tenta di incorporare ogni font usato nel documento. Per i font che non sono già incorporati, prima cerca di caricare i dati del font appropriati dalla raccolta di font di sistema o da una sorgente di font personalizzata. Se non viene trovato alcun font corrispondente, viene usato un font sostitutivo.
Puoi personalizzare questo processo fornendo caricatori di font personalizzati. L'interfaccia IFontLoader viene usata per caricare i dati del font. L'implementazione DirectoryFontLoader, ad esempio, carica i byte del font da una o più directory specificate.
Puoi anche fornire un'implementazione dell'interfaccia IFallbackFontProvider per offrire font sostitutivi quando IFontLoader non riesce a caricare il font richiesto.
Il seguente esempio mostra come personalizzare il caricamento dei font:
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 corregge anche larghezze dei glifi incoerenti, stream CMap e ToUnicode. I caratteri non definiti vengono rimossi durante il processo di conversione.
Metadati
Il convertitore corregge o rimuove schemi o proprietà di metadati non validi, aggiunge lo schema pdfaid, sincronizza i metadati XMP e il dizionario delle informazioni del documento.
Il componente aggiuntivo Conformance fornisce anche il metodo di estensione ReadPdfaConformance per PdfDocument. Usa questo metodo per leggere il livello di conformità PDF/A dichiarato nei metadati XMP:
using var pdf = new PdfDocument("input.pdf");
PdfaConformanceLevel? level = pdf.ReadPdfaConformance();
Colori
Il convertitore fornisce profili ICC di output intent per i colori device perché i colori dipendenti dal dispositivo non sono consentiti nei documenti PDF/A. Corregge anche output intent e spazi colore non conformi.
La trasparenza viene rimossa quando si producono documenti PDF/A-1. Questo influisce su modalità di fusione, maschere morbide e gruppi di trasparenza. Vengono corretti anche gli attributi immagine non validi.
File incorporati
La gestione dei file incorporati dipende dal livello di conformità PDF/A. In PDF/A-1, tutti i file incorporati vengono rimossi.
In PDF/A-2 e PDF/A-4, i file PDF incorporati vengono convertiti in PDF/A. Gli allegati non PDF vengono rimossi. Per i file PDF/A incorporati, in PDF/A-4 vengono corretti anche i tipi MIME e le relazioni dei file.
In PDF/A-3, gli allegati non vengono rimossi, ma vengono corretti le relazioni dei file e i tipi MIME.
Funzionalità interattive
Il convertitore genera stream di aspetto mancanti o non validi. Corregge anche proprietà di annotazione non valide, appiattisce le annotazioni di tipi non consentiti e rimuove azioni di tipi non consentiti.
I moduli XFA vengono rimossi per PDF/A-2, PDF/A-3 e PDF/A-4. Solo PDF/A-1 consente moduli XFA, ma non sono comunque consigliati per l'archiviazione a lungo termine.
Il contenuto opzionale viene appiattito quando si mira a PDF/A-1. Per gli altri livelli di conformità, il convertitore corregge i dizionari di configurazione del contenuto opzionale con array di ordinamento incompleti, nomi mancanti o nomi duplicati.
Firme digitali
Le firme digitali non consentono per progettazione modifiche al contenuto firmato. Se la parte firmata del PDF contiene problemi di conformità PDF/A, il convertitore li corregge e invalida la firma.
Altre aree
Per l'accessibilità, il convertitore aggiunge informazioni di struttura di base del documento se mancano. Corregge anche tag di struttura non validi o non standard. Ciò si applica ai documenti PDF/A-1a, PDF/A-2a e PDF/A-3a.
I file PDF/A non devono essere crittografati, quindi il convertitore non consente la crittografia dei file di output.
I dati compressi con LZW non sono consentiti in PDF/A. Il convertitore ricomprime gli stream LZW usando la compressione Flate. Corregge anche oggetti array, dizionario, numero, nome e stringa non conformi.
Vengono corretti automaticamente anche intestazioni di file o sezioni di cross-reference non valide.
Conclusione
Docotic.Pdf con il componente aggiuntivo Conformance fornisce un convertitore PDF-to-PDF/A di alta qualità. Puoi convertire documenti PDF esistenti in qualsiasi livello di conformità PDF/A oppure creare documenti PDF/A da zero. La libreria funziona completamente in locale, quindi i tuoi dati non lasciano mai i tuoi server.
Puoi esplorare esempi eseguibili in C# e VB.NET per creare ed elaborare documenti PDF/A nella sezione PDF/A del repository di esempio.
Esiste anche l'applicazione open source PdfToPdfa per la conversione da PDF a PDF/A. Puoi usarla per automatizzare i flussi di lavoro PDF/A oppure semplicemente convertire file PDF in PDF/A.
Domande frequenti
Come scegliere il convertitore PDF-to-PDF/A giusto?
Un buon convertitore PDF-to-PDF/A dovrebbe:
- Produrre file conformi a PDF/A.
- Preservare le informazioni e l'aspetto visivo dei documenti di origine.
- Eseguire localmente senza inviare file a server di terze parti.
- Funzionare velocemente.
- (se è richiesta l'automazione) Supportare l'esecuzione senza UI.
La libreria Docotic.Pdf soddisfa tutti i criteri ed è una buona scelta per la conversione da PDF a PDF/A.
Come verificare che il documento PDF/A sia conforme?
Usa un software di validazione. Un buon validatore PDF/A dovrebbe:
- Seguire in profondità gli standard ISO per PDF/A.
- Eseguire localmente senza inviare file a server di terze parti.
- Funzionare velocemente.
- (se è richiesta l'automazione) Supportare l'esecuzione senza UI.
veraPDF è uno strumento di validazione standard del settore che supporta tutti questi requisiti.
Come automatizzare il flusso di lavoro di conversione da PDF a PDF/A?
Converti i file PDF usando il componente aggiuntivo Docotic.Pdf Conformance. Convalida i risultati con il validatore veraPDF. Tieni traccia dell'avanzamento della conversione e della validazione.
L'applicazione open source PdfToPdfa implementa questo flusso di lavoro. Usala come punto di partenza per la tua implementazione.
Quale versione PDF/A dovrei usare?
Leggi la sezione Come scegliere una versione PDF/A.
Posso incorporare un file XML in un PDF per ZUGFeRD?
Sì, certamente. Guarda gli esempi nella sezione Produci file ZUGFeRD / Factur-X.
Come proteggere un documento PDF/A?
Tecnicamente è impossibile. I file PDF/A non devono essere crittografati.