sgcPDF 功能矩阵
sgcPDF 的所有功能按任务分类。每项功能都在 sgcPDF_*.pas 单元中以 Object Pascal 实现,并附带完整源代码。本页面上的代码示例均针对 sgcPDF 源码编译并运行过。
sgcPDF 的所有功能按任务分类。每项功能都在 sgcPDF_*.pas 单元中以 Object Pascal 实现,并附带完整源代码。本页面上的代码示例均针对 sgcPDF 源码编译并运行过。
| 功能 | 详情 |
|---|---|
| 页面 | 任意页面尺寸与方向,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 转 PDF | TsgcPDFHTMLRenderer:标题、段落、内联 CSS 样式、列表、表格、图像、链接、分页符、页眉页脚以及页码。 |
| 画布与 EMF 转 PDF | TsgcPDFCanvas 将绘图调用记录为 PDF 内容,EMF 元文件则回放为 PDF 矢量,使现有报表与图表代码直接生成 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 实现 PAdES | TsgcPDFPAdESSigner 使用 sgcSign(PEM、PFX、PKCS#11、Windows 证书存储、云 HSM)的任何密钥提供者,生成带 DSS 验证数据的 B-B、B-T、B-LT 与 B-LTA 级别的 ETSI.CAdES.detached 签名。sgcSign 需单独授权。 |
| 验证 | TsgcPDFSignatureVerifier 可检查每个签名的完整性、字节范围覆盖、签名者证书以及证书链。 |
| 润饰 | TsgcPDFRedactor 可在字形层面删除文本、图像像素、矢量路径与注释(区域内或匹配文本),添加覆盖层,并可清除元数据。被删除的文本无法从输出中提取。 |
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;
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;
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/A | a 与 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。 |
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;
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;