sgcPDF 功能矩阵

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

创建

14 项功能

编辑

7 项功能

渲染与查看器

10 项功能

提取

5 项功能

表单

3 项功能

安全与签名

7 项功能

印前

7 项功能

.NET

5 个 NuGet 包

创建

功能详情
页面任意页面尺寸与方向,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 转 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 的页码。
页面操作合并文档、拆分、提取页面范围、插入、删除、旋转以及重新排序页面。
增量保存更改内容会作为新修订版本追加到原文件中,使之前的数字签名保持有效。
现有注释现有 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 实现 PAdESTsgcPDFPAdESSigner 使用 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 以及禁止嵌入字体的字体许可。未嵌入字体中的文本会使用查看器会采用的替代系统字体转为轮廓,不可见文本则被删除。文本不能再被选择或搜索。

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;

将全部文本转为轮廓

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/Aa 与 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。

作为 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;

在一个文件中同时使用 PDF/A-4 和 PDF/UA-2

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 查看器中的页面框显示、页面框提示和测量工具。

将两页放在一张带裁切标记的版面上(.NET)

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");
}

适用于 .NET 的 sgcPDF

该库的完全托管 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.WinFormsGDI 渲染器与画布、EMF 回放、页面导出为图像,以及 TsgcPDFViewerControl(含交互式注释和评论回复)、TsgcPDFThumbnailView、TsgcPDFBarcodeControl 和 TsgcPDFOutlineView 控件,并含页面框和测量工具。支持 Windows 上的 .NET Framework 4.7.2 和 .NET 8。
esegece.sgcPDF.WpfWPF 查看器:TsgcWpfPDFViewer、TsgcWpfPDFThumbnailView 和 TsgcWpfPDFOutlineView。支持 Windows 上的 .NET Framework 4.7.2、.NET 8、.NET 9 和 .NET 10。
esegece.sgcPDF.AvaloniaAvalonia 查看器: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
超值之选:All-AccesseSeGeCe 全部产品,含高级支持,每年 €1,059 起。
查看 All-Access 价格

使用 sgcPDF 进行开发

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