Skip to content

PDF 生成模板编辑器

开源可视化 PDF 生成引擎,支持自定义模板,并提供面向开发者的 API,灵活构建文档生成流程。

查看 GitHub

PDF 标准格式转换

ComPDFKit PDF SDK 支持将 PDF 文档转换为多种 PDF 标准格式,包括 PDF/A(用于长期存档)、PDF/X(用于印刷)、PDF/E(用于工程文档)、PDF/UA(用于无障碍访问)和 PDF/VT(用于可变数据印刷)。

转换为标准 PDF 格式

使用 WriteStandardPDFToFilePath 方法可以将现有的 PDF 文件转换为指定的 PDF 标准格式。该方法会分析现有 PDF 文件的内容,并进行一系列修改,以生成符合目标标准的文档。

在转换过程中,不适合目标标准的功能(如加密、过时的压缩方案、缺少字体或与设备相关的颜色)将被替换为符合标准的等效项。由于转换过程仅对源文件应用必要的更改,因此信息丢失极少。

方法签名:

java
public bool WriteStandardPDFToFilePath(
    PDFDocumentType standardType,  // PDF 标准类型
    String iccFilePath,              // ICC 颜色配置文件路径
    String saveFilePath,             // 输出文件保存路径
    CPDFUAConfig uaConfig  // PDF/UA 配置(仅 PDF/UA 格式需要)
)

参数说明:

参数类型说明
standardTypePDFDocumentType目标 PDF 标准类型,包含格式、版本号和子类型
iccFilePathstringICC 颜色配置文件路径。如文件不存在,将根据标准类型自动选择默认配置文件
saveFilePathstring转换后文档的保存路径
uaConfigCPDFUAConfigPDF/UA 配置(可选),用于设置文档标题和语言

示例代码 - 转换为 PDF/A-1a:

java
CPDFDocument doc1 = new CPDFDocument();
doc1.open("test.pdf");
boolean ok1 = doc1.WriteStandardPDFToFilePath(
        CPDFDocument.PDFDocumentType.PDFTypeA1a,
        "sRGB2014.icc",
        "convpdfa1a.pdf");
doc1.close();

示例代码 - 转换为 PDF/UA:

java
String filePath = "test.pdf";
CPDFDocument document = new CPDFDocument();
document.open(filePath);

CPDFUAConfig ua = new CPDFUAConfig();
ua.title = "无障碍文档";
ua.language = CPDFUAConfig.UALanguage.cs_CZ;

String iccPath = "sRGB2014.icc";
String outPath = "convpdfUA_config.pdf";

boolean ok = document.WriteStandardPDFToFilePath(
        CPDFDocument.PDFDocumentType.PDFTypeUA1, iccPath, outPath, ua);
document.close();
System.out.println("convertPDFUA with config: " + ok);

检测 PDF 标准类型

使用 GetPDFStandardType 方法可以检测文档当前是否已符合某种 PDF 标准格式。

方法签名:

java
public PDFStandardType GetPDFStandardType()

返回值说明:

返回 PDFStandardType ,包含以下字段:

字段类型说明
FormatCPDFStandardFormatPDF 标准格式(StandardPDF、StandardPDFA、StandardPDFX 等)
TypeNumint版本号(如 PDF/A-1 的 TypeNum 为 1)
TypeCPDFPartType子类型(PDF_a、PDF_b、PDF_u 或 None)

示例代码:

java
CPDFDocument doc1 = new CPDFDocument();
doc1.open("test.pdf");
CPDFStandardType standardType = document.GetPDFStandardType();
switch (standardType.Format)
{
    case CPDFStandardFormat.StandardPDF:
        System.out.println("普通 PDF 文档");
        break;
    case CPDFStandardFormat.StandardPDFA:
        System.out.println("PDF/A-"+standardType.TypeNum + GetPartTypeSuffix(standardType.Type) + "文档");
        break;
    case CPDFStandardFormat.StandardPDFX:
    System.out.println("PDF/X-"+standardType.TypeNum + "文档");
        break;
    case CPDFStandardFormat.StandardPDFUA:
        System.out.println("PDF/UA-" + standardType.TypeNum + "文档");
        break;
    default:
        System.out.println("其他标准格式: " + standardType.Format);
        break;
}

// 辅助方法:获取子类型后缀
String GetPartTypeSuffix(CPDFPartType partType)
{
   if (partType == PDFPartType.PDF_a) {
     return "a";
   } else if (partType == PDFPartType.PDF_b) {
     return "b";
   } else if (partType == PDFPartType.PDF_u) {
     return "u";
   } else return "";
}

PDFDocumentType 枚举

枚举值说明
PDFType普通 PDF 文档
PDFTypeA1aPDF/A-1a文档
PDFTypeA1bPDF/A-1b文档
PDFTypeA2aPDF/A-2a文档
PDFTypeA2uPDF/A-2u文档
PDFTypeA2bPDF/A-2b文档
PDFTypeA3aPDF/A-3a文档
PDFTypeA3uPDF/A-3u文档
PDFTypeA3bPDF/A-3b文档