PDF/A Archival
Commercial License Required - This feature requires a commercial license. See printwell.dev/pricing.
Create and validate PDF/A compliant documents for long-term archival.
PDF/A Levels
| Level | Standard | Description |
|---|---|---|
PdfA1b | ISO 19005-1 | Basic visual preservation |
PdfA1a | ISO 19005-1 | Full accessibility (tagged) |
PdfA2b | ISO 19005-2 | Modern features (JPEG2000, transparency) |
PdfA2u | ISO 19005-2 | Unicode text mapping |
PdfA2a | ISO 19005-2 | Full accessibility |
PdfA3b | ISO 19005-3 | Embedded files allowed |
PdfA3u | ISO 19005-3 | Unicode + embedded files |
PdfA3a | ISO 19005-3 | Full accessibility + embedded |
Validating PDF/A Compliance
#![allow(unused)]
fn main() {
use printwell::pdfa::{validate_pdfa, PdfALevel};
let result = validate_pdfa(&pdf_data, PdfALevel::PdfA2b)?;
println!("Compliant: {}", result.is_compliant);
println!("Errors: {}", result.error_count);
println!("Warnings: {}", result.warning_count);
for issue in &result.issues {
println!(
"[{:?}] {:?}: {}",
issue.severity,
issue.category,
issue.message
);
}
}
Issue Categories
| Category | Description |
|---|---|
Fonts | Font embedding issues |
Color | Color space problems |
Metadata | XMP metadata issues |
Structure | Document structure |
Actions | JavaScript/actions |
Encryption | Security restrictions |
Annotations | Annotation problems |
Transparency | Transparency issues |
Attachments | Embedded file issues |
Adding PDF/A Metadata
#![allow(unused)]
fn main() {
use printwell::pdfa::add_pdfa_metadata;
let pdfa_doc = add_pdfa_metadata(
&pdf_data,
PdfALevel::PdfA2b,
Some("Document Title"),
Some("Author Name"),
)?;
}
Node.js Example
import { validatePdfa, addPdfaMetadata } from 'printwell';
const result = validatePdfa(pdfData, 'PdfA2b');
console.log(`Compliant: ${result.isCompliant}`);
for (const issue of result.issues) {
console.log(`${issue.severity}: ${issue.message}`);
}
const pdfaDoc = addPdfaMetadata(pdfData, 'PdfA2b', {
title: 'Archived Document',
author: 'Author Name'
});
Python Example
from printwell import validate_pdfa, add_pdfa_metadata, PdfALevel
result = validate_pdfa(pdf_data, PdfALevel.PdfA2b)
print(f"Compliant: {result.is_compliant}")
for issue in result.issues:
print(f"{issue.severity}: {issue.message}")
pdfa_doc = add_pdfa_metadata(pdf_data, PdfALevel.PdfA2b,
title="Archived Document", author="Author")
Best Practices for PDF/A
- Embed all fonts - Use
embed_fonts: truein PdfOptions - Use RGB or CMYK color spaces - Avoid device-dependent colors
- Avoid JavaScript - Not allowed in PDF/A
- Include document metadata - Title, author, etc.
- Use tagged PDFs - For PDF/A-1a, 2a, 3a levels