将 PDF 转换为 PDF/A 格式

Aspose.PDF for .NET 允许您将 PDF 文件转换为符合 PDF/A 的 PDF 文件。在此之前,必须验证文件。本主题将进行说明。

使用 Document 类的 Convert 方法转换文件。

以下代码片段也适用于 Aspose.PDF.Drawing 库。

将 PDF 文件转换为 PDF/A-1b

以下代码片段展示了如何将 PDF 文件转换为符合 PDF/A-1b 的 PDF。

// 有关完整示例和数据文件,请访问 https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// 文档目录的路径。
string dataDir = RunExamples.GetDataDir_AsposePdf_DocumentConversion();

// 打开文档
Document pdfDocument = new Document(dataDir + "PDFToPDFA.pdf");
           
// 转换为符合 PDF/A 的文档
// 在转换过程中,也执行了验证
pdfDocument.Convert(dataDir + "log.xml", PdfFormat.PDF_A_1B, ConvertErrorAction.Delete);

dataDir = dataDir + "PDFToPDFA_out.pdf";
// 保存输出文档
pdfDocument.Save(dataDir);

要仅执行验证,请使用以下代码行:

// 有关完整示例和数据文件,请访问 https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// 文档目录的路径。
string dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();

// 打开文档
Document pdfDocument = new Document(dataDir + "ValidatePDFAStandard.pdf");

// 验证 PDF 是否符合 PDF/A-1a
pdfDocument.Validate(dataDir + "validation-result-A1A.xml", PdfFormat.PDF_A_1B);

将 PDF 文件转换为 PDF/A-3b

Aspose.PDF for .NET 也支持将 PDF 文件转换为 PDF/A-3b 格式的功能。

// 有关完整示例和数据文件,请访问 https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// 文档目录的路径。
string dataDir = RunExamples.GetDataDir_AsposePdf_DocumentConversion();

// 打开文档
Document pdfDocument = new Document(dataDir + "input.pdf");           

pdfDocument.Convert(new MemoryStream(), PdfFormat.PDF_A_3B, ConvertErrorAction.Delete);

dataDir = dataDir + "PDFToPDFA3b_out.pdf";
// 保存输出文档
pdfDocument.Save(dataDir);

将PDF文件转换为PDF/A-2u格式

Aspose.PDF for .NET也支持将PDF文件转换为PDF/A-2u格式的功能。

string inFile = "input.pdf";
string outFile = "output.pdf";
Aspose.PDF.Document doc = new Aspose.PDF.Document(inFile);
doc.Convert(new MemoryStream(), PdfFormat.PDF_A_2U, ConvertErrorAction.Delete);
doc.Save(outFile);

将PDF文件转换为PDF/A-3u格式

Aspose.PDF for .NET也支持将PDF文件转换为PDF/A-3u格式的功能。

string inFile = "input.pdf";
string outFile = "output.pdf";
Aspose.PDF.Document doc = new Aspose.PDF.Document(inFile);
doc.Convert(new MemoryStream(), PdfFormat.PDF_A_3U, ConvertErrorAction.Delete);
doc.Save(outFile);

向PDF/A文件添加附件

如果您需要向PDF/A合规格式的文件中添加文件,则我们推荐使用Aspose.PDF.PdfFormat枚举中的PDF_A_3A值。 PDF/A_3a是一种格式,它提供了将任何文件格式作为附件添加到PDF/A合规文件的功能。

## 替换缺失字体为其他字体

根据PDFA标准,字体应嵌入PDFA文档中

```csharp
// 对于完整的示例和数据文件,请访问 https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// 文档目录的路径。
string dataDir = RunExamples.GetDataDir_AsposePdf_DocumentConversion();

// 实例化Document实例以加载现有文件
Aspose.Pdf.Document doc = new Document(dataDir + "input.pdf");
// 设置新文件添加为附件
FileSpecification fileSpecification = new FileSpecification(dataDir + "aspose-logo.jpg", "大图片文件");
// 将附件添加到文档的附件集合中
doc.EmbeddedFiles.Add(fileSpecification);
// 执行转换到PDF/A_3a,以便将附件包含在结果文件中
doc.Convert(dataDir + "log.txt", Aspose.Pdf.PdfFormat.PDF_A_3A, ConvertErrorAction.Delete);
// 保存结果文件
doc.Save(dataDir + "AddAttachmentToPDFA_out.pdf");

根据PDFA标准,字体应嵌入PDFA文档中。

// 如需完整示例和数据文件,请访问 https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// 文档目录的路径。
string dataDir = RunExamples.GetDataDir_AsposePdf_DocumentConversion();

Aspose.Pdf.Text.Font originalFont = null;
try
{
    originalFont = FontRepository.FindFont("AgencyFB");
}
catch (Exception)
{
    // 目标机器上缺少字体
    FontRepository.Substitutions.Add(new SimpleFontSubstitution("AgencyFB", "Arial"));
}
var fileNew = new FileInfo(dataDir + "newfile_out.pdf");
var pdf = new Document(dataDir + "input.pdf");
pdf.Convert( dataDir +  "log.xml", PdfFormat.PDF_A_1B, ConvertErrorAction.Delete);
pdf.Save(fileNew.FullName);