将 PDF 文件转换为 PDF/A

Aspose.PDF 允许您将 PDF 文件转换为符合 PDF/A 的 PDF 文件。在此之前,必须对文件进行验证。本文将解释如何进行。

请注意,我们遵循 Adobe Preflight 来验证 PDF/A 合规性。市场上的所有工具都有自己对 PDF/A 合规性的“表示”。请参考这篇关于PDF/A 验证工具的文章。我们选择 Adobe 产品来验证 Aspose.PDF 如何生成 PDF 文件,因为 Adobe 是所有与 PDF 相关事物的核心。

在将 PDF 转换为符合 PDF/A 的文件之前,请使用 validate 方法验证 PDF。 验证结果存储在一个XML文件中,然后这个结果也会传递给convert方法。您还可以使用ConvertErrorAction枚举来指定不能转换的元素的操作。

PDF到PDF/A_1b转换

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

public void convertPDFtoPDFa1b() {
        // 打开文档
        try {
            document = new Document(inputStream);
        } catch (Exception e) {
            resultMessage.setText(e.getMessage());
            return;
        }

        // 转换为符合PDF/A标准的文档
        // 在转换过程中,还会进行验证
        File logFileName = new File(fileStorage,"PDF-to-PDFA-log.xml");
        File pdfaFileName = new File(fileStorage,"PDF-to-PDFA.pdf");
        document.convert(logFileName.toString(), PdfFormat.PDF_A_1B, ConvertErrorAction.Delete);

        // 保存输出文档
        document.save(pdfaFileName.toString());
    }

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

public void ValidatePDF_A_1B() {
        // 打开文档
        try {
            document = new Document(inputStream);
        } catch (Exception e) {
            resultMessage.setText(e.getMessage());
            return;
        }

        // 验证为符合PDF/A的文档

        File logFileName = new File(fileStorage,"PDF-to-PDFA-log.xml");
        if (document.validate(logFileName.toString(), PdfFormat.PDF_A_1B)){
            resultMessage.setText("文档有效");
        }
        else {
            resultMessage.setText("文档无效");
        }
    }

PDF到PDF/A_3b转换

    public void convertPDFtoPDFa3b() {
        // 打开文档
        try {
            document = new Document(inputStream);
        } catch (Exception e) {
            resultMessage.setText(e.getMessage());
            return;
        }

        // 转换为符合PDF/A的文档
        // 在转换过程中,也会执行验证
        File logFileName = new File(fileStorage,"PDF-to-PDFA-log.xml");
        File pdfaFileName = new File(fileStorage,"PDF-to-PDFA.pdf");

        document.convert(logFileName.toString(), PdfFormat.PDF_A_3B, ConvertErrorAction.Delete);

        // 保存输出文档
        try {
            document.save(pdfaFileName.toString());
        }
        catch (Exception e) {
            resultMessage.setText(e.getMessage());
            return;
        }
        resultMessage.setText(R.string.success_message);
    }

PDF 到 PDF/A_3a 转换

public void convertPDFtoPDFa3a() {
        // 打开文档
        try {
            document = new Document(inputStream);
        } catch (Exception e) {
            resultMessage.setText(e.getMessage());
            return;
        }

        // 转换为符合 PDF/A 的文档
        // 在转换过程中,也会进行验证
        File logFileName = new File(fileStorage,"PDF-to-PDFA-log.xml");
        File pdfaFileName = new File(fileStorage,"PDF-to-PDFA.pdf");

        document.convert(logFileName.toString(), PdfFormat.PDF_A_3A, ConvertErrorAction.Delete);

        // 保存输出文档
        try {
            document.save(pdfaFileName.toString());
        }
        catch (Exception e) {
            resultMessage.setText(e.getMessage());
            return;
        }
        resultMessage.setText(R.string.success_message);
    }

PDF 到 PDF/A_2a 转换

public void convertPDFtoPDFa2a() {
        // 打开文档
        try {
            document = new Document(inputStream);
        } catch (Exception e) {
            resultMessage.setText(e.getMessage());
            return;
        }

        // 转换为符合 PDF/A 的文档
        // 在转换过程中,也会进行验证
        File logFileName = new File(fileStorage,"PDF-to-PDFA-log.xml");
        File pdfaFileName = new File(fileStorage,"PDF-to-PDFA.pdf");

        document.convert(logFileName.toString(), PdfFormat.PDF_A_2A, ConvertErrorAction.Delete);

        // 保存输出文档
        try {
            document.save(pdfaFileName.toString());
        }
        catch (Exception e) {
            resultMessage.setText(e.getMessage());
            return;
        }
        resultMessage.setText(R.string.success_message);
    }

PDF到PDF/A_3U转换

 public void convertPDFtoPDFa3u() {
        // 打开文档
        try {
            document = new Document(inputStream);
        } catch (Exception e) {
            resultMessage.setText(e.getMessage());
            return;
        }

        // 转换为PDF/A兼容文档
        // 在转换过程中,也会进行验证
        File logFileName = new File(fileStorage,"PDF-to-PDFA-log.xml");
        File pdfaFileName = new File(fileStorage,"PDF-to-PDFA.pdf");

        document.convert(logFileName.toString(), PdfFormat.PDF_A_3U, ConvertErrorAction.Delete);

        // 保存输出文档
        try {
            document.save(pdfaFileName.toString());
        }
        catch (Exception e) {
            resultMessage.setText(e.getMessage());
            return;
        }
        resultMessage.setText(R.string.success_message);
    }

创建PDF/A-3并附加XML文件

Aspose.PDF for Android via Java 提供了将PDF文件转换为PDF/A格式的功能,并且还支持将文件作为附件添加到PDF文档的功能。 在需要将文件附加到 PDF/A 合规格式的情况下,我们建议使用 com.aspose.pdf.PdfFormat 枚举中的 PDF_A_3A 值,PDF/A_3a 是一种支持将任何文件格式作为附件附加到 PDF/A 合规文件的格式。然而,一旦文件被附加,您应该再次将其转换为 Pdf-3a 格式,以修复元数据。请查看以下代码片段。

 public void convertPDFtoPDFa3u_attachXML() {
        // 打开文档
        try {
            document = new Document(inputStream);
        } catch (Exception e) {
            resultMessage.setText(e.getMessage());
            return;
        }

        // 转换为 PDF/A 合规文档
        // 在转换过程中,也会进行验证
        File logFileName = new File(fileStorage,"PDF-to-PDFA-log.xml");
        File pdfaFileName = new File(fileStorage,"PDF-to-PDFA.pdf");
        File attachment = new File(fileStorage,"sample.xml");

        // 保存输出文档
        try {
            // 加载 XML 文件
            FileSpecification fileSpecification = new FileSpecification(attachment.toString(), "示例 xml 文件");
            // 将附件添加到文档的附件集合中
            document.getEmbeddedFiles().add(fileSpecification);
            document.convert(logFileName.toString(), PdfFormat.PDF_A_3B, ConvertErrorAction.Delete);
            document.save(pdfaFileName.toString());
        }
        catch (Exception e) {
            resultMessage.setText(e.getMessage());
            return;
        }
        resultMessage.setText(R.string.success_message);
    }