sgcPDF 功能矩阵

sgcPDF 的所有功能按任务分类。每项功能都在 sgcPDF_*.pas 单元中以 Object Pascal 实现,并附带完整源代码。本页面上的代码示例均针对 sgcPDF 源码编译并运行过。

创建

13 项功能

编辑

6 项功能

提取

5 项功能

表单

3 项功能

安全与签名

6 项功能

创建

功能详情
页面任意页面尺寸与方向,A4、Letter 或自定义,支持页面旋转。
文本14 种标准 PDF 字体与彩色文本,可通过画布与 HTML 渲染器实现段落换行。
嵌入字体TrueType、OpenType(TrueType 与 CFF 轮廓)以及 TrueType 集合字体,自动嵌入与子集化,并带有 Unicode ToUnicode 映射,使文本可复制与搜索。
复杂文字字距与连字、通过 GSUB 实现的阿拉伯语连接形式,以及适用于从右到左文字的 Unicode 双向算法。
中日韩文字通过嵌入的 TrueType 与 TrueType 集合字体支持中文、日文与韩文文本。
图像JPEG、带 Alpha 通道的 PNG、BMP 与 TIFF(包括 CCITT 传真图像),支持软蒙版。
矢量图形线条、矩形、圆形、椭圆、贝塞尔曲线、多边形、虚线样式、线条端点与连接、透明度与渐变。
表格具有表头、边框、单元格内边距与颜色、可跨页延续的表格。
条形码Code 128、Code 39、EAN-13、EAN-8、UPC-A、ITF、Codabar、GS1-128、二维码、DataMatrix(ECC200)以及 PDF417,以矢量形式绘制。
注释与链接文本注释、高亮、链接到 URL 或页面、盖章以及自由文本注释。
书签与图层嵌套书签(大纲)以及读者可显示或隐藏的可选内容组(图层)。
HTML 转 PDFTsgcPDFHTMLRenderer:标题、段落、内联 CSS 样式、列表、表格、图像、链接、分页符、页眉页脚以及页码。
画布与 EMF 转 PDFTsgcPDFCanvas 将绘图调用记录为 PDF 内容,EMF 元文件则回放为 PDF 矢量,使现有报表与图表代码直接生成 PDF 输出。

HTML 转 PDF

procedure HTMLToPDF(const APDFFile: string);
var
  oHTML: TsgcPDFHTMLRenderer;
begin
  oHTML := TsgcPDFHTMLRenderer.Create(nil);
  try
    oHTML.PageWidth := 595;
    oHTML.PageHeight := 842;
    oHTML.FooterText := 'Page {page} of {pages}';
    oHTML.HTMLToPDFFile(
      '<html><head><style>h1 { color: #003366 }</style></head><body>' +
      '<h1>Invoice 2026-001</h1>' +
      '<table><tr><th>Item</th><th>Amount</th></tr>' +
      '<tr><td>Consulting</td><td>299.00</td></tr></table>' +
      '</body></html>', APDFFile);
  finally
    oHTML.Free;
  end;
end;

编辑

功能详情
水印与盖章具有字体、大小、旋转、颜色与不透明度的文字水印,可应用于单页或全部页面。
页眉页脚、页码页眉、页脚文本以及格式如 Page %d of %d 的页码。
页面操作合并文档、拆分、提取页面范围、插入、删除、旋转以及重新排序页面。
增量保存更改内容会作为新修订版本追加到原文件中,使之前的数字签名保持有效。
紧凑输出使用对象流与交叉引用流缩小文件,并通过 TsgcPDFOptimizer 删除重复与未使用对象并降采样图像。
大文件偏移量全程使用 64 位,对象按需从流中加载,因此可打开并保存超过 2GB 的文件。

渲染与查看器

功能详情
VCL 查看器TsgcPDFViewerControl:滚动、缩放模式、翻页、文本选择与复制、高亮搜索、表单字段填写、链接导航与打印,以及 TsgcPDFThumbnailView 与 TsgcPDFOutlineView。
FireMonkey 查看器TsgcPDFViewerFMX 通过 FMX 画布在 Windows、macOS、iOS 与 Android 上绘制。
面向服务器的光栅渲染器TsgcPDFRendererRaster 是一个纯 Pascal 光栅化器,无需 GDI 即可在 Windows 和 Linux 上将页面渲染为像素或 PNG。
GDI 渲染器与导出在 Windows 上渲染到位图或设备上下文,并通过 TsgcPDFExporter 将页面与缩略图导出为 BMP、PNG 或 JPEG。
图形模型DeviceGray、DeviceRGB、DeviceCMYK、索引、ICCBased 与 Lab 色彩空间,轴向与径向渐变,平铺图案,软蒙版,混合透明度以及表单 XObject。
字体嵌入的 TrueType、CFF、OpenType 与 Type 1 字体程序会根据其轮廓进行渲染,支持标准编码与 Identity-H CID 字体。
图像解码器Flate、LZW、ASCII85、ASCIIHex、RunLength、JPEG(基本与渐进、CMYK)、JPEG 2000、CCITT 组 3/4 以及 JBIG2。

提取

功能详情
文本页面或整个文档的文本,包括嵌入字体与 CID 字体的 Unicode 映射。
文本位置TsgcPDFTextExtractor 为每个文本片段返回 X、Y、字体名称与字号。
搜索在页面或整个文档中查找文本。
图像TsgcPDFImageExtractor 枚举页面中的图像(包括内联图像与表单 XObject 内的图像),并将其解码为 PNG、JPEG 或 BMP。
元数据与附件文档信息、XMP 元数据、书签、图层以及嵌入文件。

表单

功能详情
创建表单带外观流的文本字段、复选框、单选按钮、下拉框、列表框与按钮。
填写与展平在代码或查看器中设置字段值,然后将表单展平为静态页面内容。
FDF 与 XFDF以 FDF 与 XFDF 格式导入导出表单数据。

安全与签名

功能详情
密码加密RC4 40 位与 128 位、AES-128 与 AES-256(修订版 5 和 6),支持用户密码与所有者密码及权限标记。加密文件在加载时自动解密。
证书加密针对一个或多个收件人证书的公钥加密(adbe.pkcs7.s4 与 adbe.pkcs7.s5)。
数字签名使用 PFX 证书签名,可见或不可见的签名字段,SHA-256、SHA-384 与 SHA-512,RFC 3161 时间戳与文档时间戳。
通过 sgcSign 实现 PAdESTsgcPDFPAdESSigner 使用 sgcSign(PEM、PFX、PKCS#11、Windows 证书存储、云 HSM)的任何密钥提供者,生成带 DSS 验证数据的 B-B、B-T、B-LT 与 B-LTA 级别的 ETSI.CAdES.detached 签名。sgcSign 需单独授权。
验证TsgcPDFSignatureVerifier 可检查每个签名的完整性、字节范围覆盖、签名者证书以及证书链。
润饰TsgcPDFRedactor 可在字形层面删除文本、图像像素、矢量路径与注释(区域内或匹配文本),添加覆盖层,并可清除元数据。被删除的文本无法从输出中提取。

AES-256 密码加密

procedure CreateEncryptedPDF(const AFileName: string);
var
  oPDF: TsgcPDFDocument;
begin
  oPDF := TsgcPDFDocument.Create;
  try
    oPDF.AddPage(595, 842).DrawText('Secret', 50, 780, sfHelveticaBold, 24);
    // user password opens the file, owner password grants full rights
    oPDF.SetEncryption(emAES_256, 'user123', 'owner456');
    oPDF.SaveToFile(AFileName);
  finally
    oPDF.Free;
  end;
end;

使用 PFX 证书签名

procedure SignPDF(const AInput, AOutput: string);
var
  oSigner: TsgcPDFSignatureHandler;
begin
  oSigner := TsgcPDFSignatureHandler.Create;
  try
    oSigner.LoadCertificateFromPFX('signer.pfx', 'test123');
    oSigner.Reason := 'Document approval';
    oSigner.Location := 'Barcelona';
    oSigner.HashAlgorithm := shaSHA256;
    // visible signature field on page 1: Left, Bottom, Right, Top
    oSigner.SetField('Signature1', 0, 50, 50, 250, 100);
    oSigner.SignDocument(AInput, AOutput);
  finally
    oSigner.Free;
  end;
end;

通过 sgcSign 桥接实现 PAdES

procedure SignPAdES(const AInput, AOutput: string);
var
  oKey: TsgcPEMKeyProvider;
  oSigner: TsgcPDFPAdESSigner;
begin
  oKey := TsgcPEMKeyProvider.Create(nil);
  oSigner := TsgcPDFPAdESSigner.Create(nil);
  try
    // any sgcSign key provider: PEM, PFX, PKCS#11, Windows store, cloud HSM
    oKey.LoadFromFile('signer.pem', 'signer.key');
    oSigner.KeyProvider := oKey;
    // paBB, paBT (timestamp), paBLT and paBLTA (long term validation)
    oSigner.Level := paBB;
    // signature field and appearance through the sgcPDF handler
    oSigner.Handler.SetField('Signature1', 0, 350, 50, 550, 110);
    oSigner.Handler.SignerName := 'John Smith';
    oSigner.Handler.Reason := 'Approved';
    oSigner.SignPDFFile(AInput, AOutput);
    oSigner.KeyProvider := nil;
  finally
    oSigner.Free;
    oKey.Free;
  end;
end;

润饰姓名与区域

procedure RedactFile(const AInput, AOutput: string);
var
  oRedactor: TsgcPDFRedactor;
  vOptions: TsgcPDFRedactionOptions;
begin
  oRedactor := TsgcPDFRedactor.Create;
  try
    // every occurrence of a text, on all pages
    oRedactor.AddText('John Smith');
    // an area of page 0: left, bottom, right, top in points
    oRedactor.AddArea(0, 50, 500, 250, 650);
    vOptions := oRedactor.Options;
    vOptions.OverlayText := 'REDACTED';
    vOptions.RemoveMetadata := True;
    oRedactor.Options := vOptions;
    oRedactor.Apply(AInput, AOutput);
  finally
    oRedactor.Free;
  end;
end;

归档与无障碍

功能详情
PDF/Aa 与 b 级别的 PDF/A-1、PDF/A-2 与 PDF/A-3 输出,包含 XMP 元数据、输出意图与嵌入字体。
验证器TsgcPDFAValidator 可根据选定的 PDF/A 级别检查文件,并报告错误与警告。
标记 PDF包含 Document、Part、Sect、H1 至 H6、P、L、LI、Table、TR、TH、TD 与 Figure 的结构树,带有替代文本、标记内容、角色映射、语言与 MarkInfo。
PDF/UA-1与 PDF/A-2a 或 PDF/A-3a 一同提供无障碍输出,并在验证器中提供 PDF/UA-1 检查。
附件带 MIME 类型、日期与 PDF/A-3 关联文件关系的嵌入文件。
Factur-X 与 ZUGFeRD为 Minimum、Basic WL、Basic、EN 16931、Extended 与 XRechnung 方案嵌入带 Factur-X XMP 扩展方案的发票 XML,并将文件保存为 PDF/A-3b。

作为 PDF/A-3b 的 Factur-X 发票

procedure CreateFacturX(const AInvoiceXML, AFileName: string);
var
  oPDF: TsgcPDFDocument;
  oXML: TMemoryStream;
  vXML: TBytes;
  vFont: Integer;
begin
  oPDF := TsgcPDFDocument.Create;
  oXML := TMemoryStream.Create;
  try
    // the invoice XML (CII) is created by your application
    oXML.LoadFromFile(AInvoiceXML);
    SetLength(vXML, oXML.Size);
    Move(oXML.Memory^, vXML[0], oXML.Size);
    oPDF.Info.Title := 'Invoice 2026-001';
    // PDF/A requires embedded fonts
    vFont := oPDF.AddTrueTypeFont('Arial', False, False);
    oPDF.AddPage(595, 842).DrawTextTT('Invoice 2026-001', 50, 780, vFont, 18);
    // embeds factur-x.xml, adds the Factur-X XMP schema, saves as PDF/A-3b
    oPDF.Attachments.AddFacturX(vXML, fxpEN16931);
    oPDF.SaveToFile(AFileName);
  finally
    oXML.Free;
    oPDF.Free;
  end;
end;

验证 PDF/A

procedure ValidatePDFA(const AFileName: string);
var
  oParser: TsgcPDFParser;
  oValidator: TsgcPDFAValidator;
  i: Integer;
begin
  oParser := TsgcPDFParser.Create;
  oValidator := TsgcPDFAValidator.Create(paA3b);
  try
    oParser.LoadFromFile(AFileName);
    oParser.Parse;
    if oValidator.Validate(oParser) then
      WriteLn('PDF/A-3b: no errors')
    else
      for i := 0 to oValidator.Errors.Count - 1 do
        WriteLn('Error: ', oValidator.Errors[i]);
  finally
    oValidator.Free;
    oParser.Free;
  end;
end;
超值之选:All-AccesseSeGeCe 全部产品,含高级支持,每年 €1,059 起。
查看 All-Access 价格

使用 sgcPDF 进行开发

申请试用,为您的 Delphi 或 C++ Builder 应用程序添加 PDF 功能。