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,以矢量形式绘制。TsgcPDFBarcodeControl(VCL)和 TsgcPDFBarcodeFMX(FireMonkey)控件可在窗体上显示条码,将其保存为 PNG 或 SVG,并通过 Symbol.DrawToPDF 绘制到 PDF 页面上。 |
| 注释与链接 | 便笺、自由文本、高亮、下划线与删除线、直线与箭头、方形与圆形、手绘墨迹与图章,以及指向 URL 和页面的链接。会生成外观流,因此注释可在 Adobe Acrobat、浏览器及其他查看器中显示。 |
| 评论回复 | 附加到任意注释的回复会形成线程式讨论,每条回复都有各自的作者、日期和内容。 |
| 书签与图层 | 嵌套书签(大纲)以及读者可显示或隐藏的可选内容组(图层)。 |
| 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 的页码。 |
| 页面操作 | 合并文档、拆分、提取页面范围、插入、删除、旋转以及重新排序页面。 |
| 增量保存 | 更改内容会作为新修订版本追加到原文件中,使之前的数字签名保持有效。 |
| 现有注释 | 现有 PDF 的注释会加载为带有作者、日期、回复和几何信息的类型化对象。可在代码或查看器中编辑后保存,也可调用 SaveIncremental 追加更改而不触碰原始字节,因此现有签名保持完好。 |
| 紧凑输出 | 使用对象流与交叉引用流缩小文件,并通过 TsgcPDFOptimizer 删除重复与未使用对象并降采样图像。 |
| 大文件 | 偏移量全程使用 64 位,对象按需从流中加载,因此可打开并保存超过 2GB 的文件。 |
| 功能 | 详情 |
|---|---|
| VCL 查看器 | TsgcPDFViewerControl:滚动、缩放模式、翻页、文本选择与复制、高亮搜索、表单字段填写、链接导航与打印,以及 TsgcPDFThumbnailView 与 TsgcPDFOutlineView。 |
| FireMonkey 查看器 | TsgcPDFViewerFMX 通过 FMX 画布在 Windows、macOS、iOS 与 Android 上绘制。框选缩放(SelectionMode psmZoom、OnMarqueeZoom)可缩放到用鼠标拖出或长按拖动的矩形。 |
| .NET 查看器 | WinForms 的 TsgcPDFViewerControl、WPF 的 TsgcWpfPDFViewer 和 Avalonia 的 TsgcAvaloniaPDFViewer,均带缩略图和大纲视图。WPF 和 Avalonia 查看器支持缩放模式、Ctrl+滚轮和框选缩放(Avalonia 支持双指缩放)、文本选择与复制、带高亮的搜索、链接与大纲导航、页面框和测量工具。它们会显示注释和表单字段,但不能编辑。 |
| 交互式注释 | 在 Delphi VCL 与 FMX、C++Builder 和 .NET WinForms 中,最终用户可用鼠标创建注释:便笺、自由文本、文本上的高亮、下划线与删除线、直线与箭头、矩形与椭圆、手绘墨迹和图章。他们可以选择、移动、调整大小、编辑和删除注释。单击便笺会打开弹出窗口,显示作者、日期、内容和回复,可在其中编辑和回复。查看器会触发 OnAnnotationClick、OnAnnotationAdd、OnAnnotationChange、OnAnnotationDelete 和 OnAnnotationSelect 事件。 |
| 评论面板 | TsgcPDFCommentsView(VCL)与 TsgcPDFCommentsViewFMX 按页列出每条注释的作者、日期、内容和线程式回复,并与查看器同步。 |
| 面向服务器的光栅渲染器 | 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 可在字形层面删除文本、图像像素、矢量路径与注释(区域内或匹配文本),添加覆盖层,并可清除元数据。被删除的文本无法从输出中提取。 |
| 文本转轮廓 | TsgcPDFTextOutliner 将每个字形替换为位置、颜色和大小相同的矢量路径,涵盖页面内容、表单 XObject、平铺图案、Type3 字体和注释外观,然后删除不再使用的字体。文件的打印效果和外观保持不变,但不再需要任何字体,适合印刷厂、RIP 以及禁止嵌入字体的字体许可。未嵌入字体中的文本会使用查看器会采用的替代系统字体转为轮廓,不可见文本则被删除。文本不能再被选择或搜索。 |
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;
procedure OutlineText(const AInput, AOutput: string);
var
oOutliner: TsgcPDFTextOutliner;
begin
oOutliner := TsgcPDFTextOutliner.Create;
try
// every glyph becomes a vector path, unused fonts are removed
oOutliner.Apply(AInput, AOutput);
WriteLn('Glyphs outlined: ', oOutliner.ConvertedGlyphs);
WriteLn('Fonts removed: ', oOutliner.RemovedFonts);
finally
oOutliner.Free;
end;
end;
| 功能 | 详情 |
|---|---|
| PDF/A | a 与 b 级别的 PDF/A-1、PDF/A-2 与 PDF/A-3 输出,以及作为 PDF 2.0 文件的 PDF/A-4 和 PDF/A-4f(paA4、paA4f),包含 XMP 元数据、输出意图与嵌入字体。适用于 Delphi 和 .NET。 |
| 验证器 | TsgcPDFAValidator 可根据选定的 PDF/A 级别(包括 PDF/A-4 和 PDF/UA-2)检查文件,并报告错误与警告。PDF/A-4、PDF/A-4f 和 PDF/UA-2 输出已通过 veraPDF 检查。 |
| 标记 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 检查。 |
| PDF/UA-2 | 将 PDFUAPart 设为 puaPart2 即可输出 PDF/UA-2(ISO 14289-2),可单独使用,也可与 PDF/A-4 一起使用,带 PDF 2.0 结构命名空间和结构目标。适用于 Delphi 和 .NET,包括 sgcReports 导出和 sgcUIPDF 桥接。 |
| 附件 | 带 MIME 类型、日期与 PDF/A-3 和 PDF/A-4f 关联文件关系的嵌入文件。 |
| 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;
procedure CreateArchive(const AFileName: string);
var
oPDF: TsgcPDFDocument;
oPage: TsgcPDFPage;
vFont: Integer;
begin
oPDF := TsgcPDFDocument.Create;
try
oPDF.Info.Title := 'Annual report';
oPDF.Tagged := True;
oPDF.StructureTree.Lang := 'en-US';
// PDF/A-4 and PDF/UA-2 in the same PDF 2.0 file
oPDF.SetPDFALevel(paA4);
oPDF.PDFUA := True;
oPDF.PDFUAPart := puaPart2;
vFont := oPDF.AddTrueTypeFont('Arial', False, False);
oPage := oPDF.AddPage(595, 842);
oPage.Tagging.BeginElement(stH1);
oPage.DrawTextTT('Annual report', 50, 770, vFont, 20);
oPage.Tagging.EndElement;
oPage.Tagging.BeginElement(stP);
oPage.DrawTextTT('Archived and accessible.', 50, 740, vFont, 11);
oPage.Tagging.EndElement;
oPDF.SaveToFile(AFileName);
finally
oPDF.Free;
end;
end;
要验证该文件,请使用 paA4 创建 TsgcPDFAValidator,并设置其 PDFUA 和 PDFUAPart 属性。参见 PDF/A-4 和 PDF/UA-2 帮助主题。
Delphi 和 .NET 中使用相同的印前 API,名称也相同。
| 功能 | 详情 |
|---|---|
| 页面框 | TsgcPDFPage 上的 MediaBox、CropBox、BleedBox、TrimBox 和 ArtBox,以及 Rotate 和 UserUnit,在加载和保存文件时予以保留。 |
| 拼版 | AddPageAsForm 将另一文档中按页面框或矩形裁出的页面转换为表单 XObject,由 DrawForm、DrawFormInRect 和 DrawFormMatrix 放置到版面上。PDFImposition 演示使用它们构建版面布局。 |
| 印刷标记 | DrawCropMarks、DrawBleedMarks、DrawRegistrationMark、DrawColorBar 和 DrawSlugText。 |
| 专色 | Separation、Registration 和 DeviceN 颜色空间,以及用于填充和描边的叠印图形状态。 |
| 叠印预览 | 渲染器上的 OverprintPreview 可在屏幕和光栅输出中模拟叠印。 |
| PDF/X 输出意图 | SetOutputIntent 写入带可选 ICC 配置文件的 GTS_PDFX 输出意图,PDFXVersion 设置 PDF/X 版本键。 |
| 查看器工具 | VCL 和 WinForms 查看器以及 WPF 和 Avalonia 查看器中的页面框显示、页面框提示和测量工具。 |
using esegece.sgcPDF;
using static esegece.sgcPDF.sgcPDF_Types;
using (TsgcPDFDocument oSource = new TsgcPDFDocument())
using (TsgcPDFDocument oSheet = new TsgcPDFDocument())
{
oSource.LoadFromFile("flyer.pdf");
// two A4 pages side by side, placed by their trim box, with crop marks
TsgcPDFPage oPage = oSheet.AddPage(1270, 922);
for (int i = 0; i < 2; i++)
{
int vForm = oSheet.AddPageAsForm(oSource, i, TsgcPDFPageBox.ppbTrimBox);
TsgcPDFRect oTrim = sgcPDFRect(40 + i * 595, 40, 635 + i * 595, 882);
oPage.DrawFormInRect(vForm, oTrim, true);
oPage.DrawCropMarks(oTrim);
}
oSheet.SaveToFile("sheet.pdf");
}
该库的完全托管 C# 移植版本,每个 Delphi 单元对应一个 C# 文件,类名完全相同(TsgcPDFDocument、TsgcPDFPage、TsgcPDFEditor 等)。它以 NuGet 包的形式发布,每个包也都提供带 .Community 后缀的免费社区版。
| 包 | 详情 |
|---|---|
esegece.sgcPDF | 核心库:文档模型、解析器、写入器、编辑器、渲染核心、字体、图像、表单、签名、加密、文本与图像提取、印前、PDF/A(含 PDF/A-4)以及 PDF/UA-2。支持 .NET Standard 2.0、.NET Framework 4.7.2、.NET 6、.NET 8、.NET 9 和 .NET 10。 |
esegece.sgcPDF.WinForms | GDI 渲染器与画布、EMF 回放、页面导出为图像,以及 TsgcPDFViewerControl(含交互式注释和评论回复)、TsgcPDFThumbnailView、TsgcPDFBarcodeControl 和 TsgcPDFOutlineView 控件,并含页面框和测量工具。支持 Windows 上的 .NET Framework 4.7.2 和 .NET 8。 |
esegece.sgcPDF.Wpf | WPF 查看器:TsgcWpfPDFViewer、TsgcWpfPDFThumbnailView 和 TsgcWpfPDFOutlineView。支持 Windows 上的 .NET Framework 4.7.2、.NET 8、.NET 9 和 .NET 10。 |
esegece.sgcPDF.Avalonia | Avalonia 查看器:TsgcAvaloniaPDFViewer、TsgcAvaloniaPDFThumbnailView 和 TsgcAvaloniaPDFOutlineView。支持 .NET 8、.NET 9 和 .NET 10。 |
esegece.sgcPDF.sgcSign | 可选桥接到 sgcSign .NET:TsgcPDFPAdESSigner 可使用任意 sgcSign 密钥提供程序签署 PAdES B-B、B-T、B-LT 和 B-LTA。 |
| 社区版 | 功能与注册版相同。对年营业收入低于 100 万欧元且开发者不超过 5 人的个人和组织免费提供,启动时会显示简短提示。 |
dotnet add package esegece.sgcPDF
dotnet add package esegece.sgcPDF.WinForms
dotnet add package esegece.sgcPDF.Wpf
dotnet add package esegece.sgcPDF.Avalonia
dotnet add package esegece.sgcPDF.sgcSign