Delphi 7 到 13 与 C++ Builder 无 DLL

sgcPDF,面向 Delphi 与 C++ Builder 的纯 Pascal PDF 库

使用完全用 Object Pascal 编写的组件来创建、编辑、查看、渲染、提取、加密、签名、涂黑以及验证 PDF 文件。无需部署任何 DLL,也无需外部 PDF 引擎:解析器、写入器、字体、图像解码器、渲染器和加密都编译进您的应用程序。核心代码可在 Windows、Linux、macOS、iOS 和 Android 上运行,并提供 VCL 查看器控件、FireMonkey 查看器以及面向服务器的光栅渲染器。附带完整源代码。

完整源代码
Windows, Linux, macOS, iOS & Android
Delphi 7 → 13, C++ Builder
NuGet 上的 .NET 版
零外部依赖
20 个组件 sgcPDF_*.pas PDF 1.0 到 2.0,支持读写,纯 Object Pascal 实现。
创建 TsgcPDFDocument
编辑 TsgcPDFEditor
查看 TsgcPDFViewerControl
提取 TsgcPDFTextExtractor
签名 PAdES B-B to B-LTA
PDF/A & PDF/UA TsgcPDFAValidator
涂黑 TsgcPDFRedactor
20 面板组件 文档、编辑器、查看器、提取器、签名
0 需部署的 DLL 解析器、渲染器、字体和加密均用 Pascal 实现
5 操作系统 Windows, Linux, macOS, iOS, Android
8 PDF/A 合规级别 PDF/A-1、2 和 3(a 与 b 级别)、PDF/A-4 和 4f,以及 PDF/UA-1 和 PDF/UA-2

先了解三件事

目标机器上无需安装任何内容

sgcPDF 不封装 PDFium、Ghostscript、COM 服务器或其他任何本机库。解析、写入、字体嵌入与子集化、图像解码、渲染、加密以及签名均在 sgcPDF_*.pas 单元中实现,因此您的可执行文件就是完整的部署。

核心单元不依赖 VCL 或 FMX,因此同一份代码可在控制台工具、Windows 服务、Linux 守护进程或 Web 服务器中运行。

平台范围

哪些部分在哪里运行

创建、编辑、文本与图像提取、表单、加密、签名、涂黑、PDF/A 以及光栅渲染器均可为 Windows 与 Linux64,以及 macOS、iOS 和 Android 编译。GDI 渲染器、导出器和 VCL 查看器控件仅限 Windows,而 TsgcPDFViewerFMX 面向 Windows、macOS、iOS 和 Android。在 .NET 中,查看器控件可用于 WinForms、WPF 和 Avalonia。

高级签名

通过 sgcSign 实现 PAdES,内置基础签名

sgcPDF 可仅凭证书自行对 PDF 文件进行签名与验证(PFX 证书)。对于 PAdES 基线级别 B-B、B-T、B-LT 和 B-LTA,以及保存在智能卡、Windows 证书存储或云 HSM 中的密钥,可选的 TsgcPDFPAdESSigner 桥接会使用 sgcSign(单独授权)的密钥提供者。

一个库覆盖整个 PDF 生命周期

从您编写的第一页开始,到交付经过签名、归档和涂黑的最终文件,每一步都在同一个 Object Pascal 代码库中运行。

创建:从代码、HTML 或画布生成文档

页面、14 种标准字体或嵌入式/子集化的 TrueType 和 OpenType 字体文本、图像(JPEG、PNG、BMP、TIFF)、线条、曲线、渐变、跨页流布的表格、条形码与二维码、带线程式回复的注释与评论、书签以及可选内容层。最终用户还可以直接在查看器中用鼠标添加、编辑注释并回复。TsgcPDFHTMLRenderer 可将带 CSS 的 HTML 转换为分页 PDF,TsgcPDFCanvas 与 EMF 回放可转换现有绘图代码。

查看功能 →

编辑:修改不是您创建的文件

水印、页眉/页脚、页码与盖章、合并与拆分、提取、插入、删除、旋转以及重新排序页面。增量保存会在原文件上追加新修订版本,使之前的签名保持有效。

查看功能 →

查看与渲染:VCL、FMX、WinForms、WPF 和 Avalonia 查看器,加上服务器渲染器

带缩略图、大纲、评论面板、文本选择、搜索、表单填写与打印功能的 VCL 查看器控件,适用于 Windows、macOS、iOS 和 Android 且支持框选缩放的 FireMonkey 查看器,适用于 WinForms、WPF 和 Avalonia 的 .NET 查看器,以及无需 GDI、可在 Windows 和 Linux 服务器上将页面转为 PNG 的纯 Pascal 光栅渲染器。

查看功能 →

提取:文本、位置与图像

按页或整个文档的纯文本、带坐标、字体和字号的文本片段,以及页面图像解码为 PNG、JPEG 或 BMP。解码器支持 Flate、LZW、ASCII85、RunLength、JPEG(基本与渐进)、JPEG 2000、CCITT G3/G4 以及 JBIG2。

查看功能 →

安全与签名:加密、签名、涂黑

RC4 40/128、AES-128 与 AES-256 密码加密,证书(公钥)加密,带可见字段与时间戳的数字签名,通过 sgcSign 桥接实现的 PAdES B-B、B-T、B-LT 和 B-LTA,签名验证,以及真正删除内容而非仅仅遮盖的涂黑功能。

查看功能 →

合规:PDF/A、PDF/UA、标记 PDF、Factur-X

具有内置验证器的 a/b 级别 PDF/A-1、PDF/A-2 与 PDF/A-3 输出,PDF/A-4 和 PDF/A-4f,带结构树与替代文本的标记 PDF,PDF/UA-1 和 PDF/UA-2 输出与检查,带 PDF/A-3 和 PDF/A-4f 关系的嵌入文件,以及 Factur-X、ZUGFeRD 和 XRechnung 电子发票嵌入。

查看功能 →

印刷:页面框、拼版、标记

Media、Crop、Bleed、Trim 和 Art 框,作为表单放置用于拼版的其他文档页面,裁切标记、出血标记和套准标记,Separation 和 DeviceN 颜色,叠印预览以及 PDF/X 输出意图,适用于 Delphi 和 .NET。

查看功能 →

几行 Delphi 代码

本页面上的每个示例都取自一个针对 sgcPDF 源码编译并运行过的程序。坐标以 PDF 点(1/72 英寸)为单位,原点位于页面左下角。

procedure CreateHelloPDF(const AFileName: string);
var
  oPDF: TsgcPDFDocument;
  oPage: TsgcPDFPage;
begin
  oPDF := TsgcPDFDocument.Create;
  try
    oPDF.Info.Title := 'Hello sgcPDF';
    // A4 portrait: 595 x 842 points, origin at the bottom left corner
    oPage := oPDF.AddPage(595, 842);
    oPage.DrawTextColor('Hello sgcPDF', 50, 780, sfHelveticaBold, 24, 0, 0.2, 0.6);
    oPage.DrawLine(50, 770, 545, 770, 1.5);
    oPage.DrawText('A PDF written in pure Pascal.', 50, 740, sfHelvetica, 12);
    oPDF.SaveToFile(AFileName);
  finally
    oPDF.Free;
  end;
end;
procedure StampExistingPDF(const AInput, AOutput: string);
var
  oEditor: TsgcPDFEditor;
  oWatermark: TsgcPDFWatermarkOptions;
begin
  oEditor := TsgcPDFEditor.Create;
  try
    oEditor.LoadFromFile(AInput);
    oWatermark.Text := 'CONFIDENTIAL';
    oWatermark.Font := sfHelveticaBold;
    oWatermark.FontSize := 48;
    oWatermark.Rotation := 45;
    oWatermark.Opacity := 0.3;
    oWatermark.R := 0.5;
    oWatermark.G := 0.5;
    oWatermark.B := 0.5;
    oEditor.AddWatermarkAllPages(oWatermark);
    oEditor.AddPageNumbers(sfHelvetica, 10, 'Page %d of %d');
    oEditor.SaveToFile(AOutput);
  finally
    oEditor.Free;
  end;
end;
procedure PrintAllText(const AFileName: string);
var
  oPDF: TsgcPDFDocument;
  i: Integer;
begin
  oPDF := TsgcPDFDocument.Create;
  try
    oPDF.LoadFromFile(AFileName);
    for i := 0 to oPDF.PageCount - 1 do
      WriteLn(string(oPDF.ExtractTextW(i)));
  finally
    oPDF.Free;
  end;
end;
procedure RenderPageToPNG(const APDFFile, APNGFile: string; ADPI: Integer);
var
  oPDF: TsgcPDFDocument;
  oRenderer: TsgcPDFRendererRaster;
  oPage: TsgcPDFPage;
begin
  oPDF := TsgcPDFDocument.Create;
  try
    oPDF.LoadFromFile(APDFFile);
    oPage := oPDF.Pages[0];
    // pure Pascal rasterizer: no GDI, runs on Windows and Linux servers
    oRenderer := TsgcPDFRendererRaster.Create;
    try
      oRenderer.RenderPageToPNG(oPDF.Parser, oPage.PageDict,
        Round(oPage.Width * ADPI / 72), Round(oPage.Height * ADPI / 72),
        APNGFile);
    finally
      oRenderer.Free;
    end;
  finally
    oPDF.Free;
  end;
end;
procedure CreateTicketPDF(const aFileName: string);
var
  oPDF: TsgcPDFDocument;
  oPage: TsgcPDFPage;
  oSymbol: TsgcPDFBarcodeSymbol;
begin
  oPDF := TsgcPDFDocument.Create(nil);
  oSymbol := TsgcPDFBarcodeSymbol.Create;
  try
    oPDF.Info.Title := 'Ticket';
    oPage := oPDF.AddPage(595, 842);
    oPage.DrawText('Ticket 2026-001', 50, 780, sfHelveticaBold, 24);
    oPage.DrawLine(50, 770, 545, 770, 1.5);
    // Code 128 barcode in a 250 x 60 point box, black on white
    oSymbol.Symbology := bcCode128;
    oSymbol.Text := 'TKT-2026-001';
    oSymbol.DrawToPDF(oPage, 50, 680, 250, 60, $000000, $FFFFFF);
    // QR Code in a 120 x 120 point box
    oSymbol.Symbology := bcQRCode;
    oSymbol.QRErrorLevel := qrecQ;
    oSymbol.Text := 'https://www.esegece.com';
    oSymbol.DrawToPDF(oPage, 50, 540, 120, 120, $000000, $FFFFFF);
    oPDF.SaveToFile(aFileName);
  finally
    oSymbol.Free;
    oPDF.Free;
  end;
end;

条形码以矢量图形形式直接绘制在页面上。单元:sgcPDF_Document、sgcPDF_Barcodes、sgcPDF_Barcode_Symbol。请参阅 TsgcPDFBarcodeSymbol 和条形码指南。

#include <System.hpp>
#include "sgcPDF_Document.hpp"
#include "sgcPDF_Barcodes.hpp"
#include "sgcPDF_Barcode_Symbol.hpp"

void __fastcall CreateTicketPDF(const String aFileName)
{
  TsgcPDFDocument *oPDF = new TsgcPDFDocument(NULL);
  TsgcPDFBarcodeSymbol *oSymbol = new TsgcPDFBarcodeSymbol();
  try
  {
    oPDF->Info->Title = "Ticket";
    TsgcPDFPage *oPage = oPDF->AddPage(595, 842);
    oPage->DrawText("Ticket 2026-001", 50, 780, sfHelveticaBold, 24);
    oPage->DrawLine(50, 770, 545, 770, 1.5);
    // Code 128 barcode in a 250 x 60 point box, black on white
    oSymbol->Symbology = bcCode128;
    oSymbol->Text = "TKT-2026-001";
    oSymbol->DrawToPDF(oPage, 50, 680, 250, 60, 0x000000, 0xFFFFFF);
    // QR Code in a 120 x 120 point box
    oSymbol->Symbology = bcQRCode;
    oSymbol->QRErrorLevel = qrecQ;
    oSymbol->Text = "https://www.esegece.com";
    oSymbol->DrawToPDF(oPage, 50, 540, 120, 120, 0x000000, 0xFFFFFF);
    oPDF->SaveToFile(aFileName);
  }
  __finally
  {
    delete oSymbol;
    delete oPDF;
  }
}

使用由 sgcPDF 源码生成的 C++ Builder 头文件编译通过。请参阅 TsgcPDFBarcodeSymbol 主题和 C++ Builder 说明。

using System;
using esegece.sgcPDF;

class Program
{
    static void Main()
    {
        using (TsgcPDFDocument oDoc = new TsgcPDFDocument())
        {
            oDoc.Info.Title = "Ticket";
            TsgcPDFPage oPage = oDoc.AddPage(595, 842);
            oPage.DrawText("Ticket 2026-001", 50, 780, TsgcPDFStandardFont.sfHelveticaBold, 24);
            oPage.DrawLine(50, 770, 545, 770, 1.5);

            // Code 128 barcode in a 250 x 60 point box, black on white
            TsgcPDFBarcodeSymbol oSymbol = new TsgcPDFBarcodeSymbol();
            oSymbol.Symbology = TsgcPDFBarcodeType.bcCode128;
            oSymbol.Text = "TKT-2026-001";
            oSymbol.DrawToPDF(oPage, 50, 680, 250, 60, 0x000000, 0xFFFFFF);

            // QR Code in a 120 x 120 point box
            oSymbol.Symbology = TsgcPDFBarcodeType.bcQRCode;
            oSymbol.QRErrorLevel = TsgcPDFQRErrorLevel.qrecQ;
            oSymbol.Text = "https://www.esegece.com";
            oSymbol.DrawToPDF(oPage, 50, 540, 120, 120, 0x000000, 0xFFFFFF);

            oDoc.SaveToFile("ticket.pdf");
        }
    }
}

该 .NET 类不依赖 WinForms 或 GDI,因此也可在服务器和控制台工具中运行。请参阅 .NET API 差异。

using System;
using esegece.sgcPDF;

class Program
{
    static void Main()
    {
        // Create a one page A4 document and save it
        using (TsgcPDFDocument oDoc = new TsgcPDFDocument())
        {
            TsgcPDFPage oPage = oDoc.AddPage(595, 842);
            oPage.DrawText("Hello from sgcPDF", 50, 780, TsgcPDFStandardFont.sfHelveticaBold, 24);
            oPage.DrawLine(50, 770, 545, 770, 1.0);
            oPage.DrawText("Created with sgcPDF .NET.", 50, 740, TsgcPDFStandardFont.sfHelvetica, 12);
            oDoc.SaveToFile("hello.pdf");
        }

        // Load it again and extract the text of every page
        using (TsgcPDFDocument oDoc = new TsgcPDFDocument())
        {
            oDoc.LoadFromFile("hello.pdf");
            for (int i = 0; i < oDoc.PageCount(); i++)
                Console.WriteLine(oDoc.ExtractTextW(i));
        }
    }
}
TsgcPDFBarcodeControl 展示 Code 128、Code 39、EAN-13、EAN-8、UPC-A、ITF、Codabar、QR Code、DataMatrix、PDF417 和 GS1-128 符号
一个条形码控件,十一种码制,包括 QR Code、DataMatrix 和 PDF417

sgcPDF 面板上的 20 个组件

将它们拖放到窗体或数据模块上,或在代码中创建。每个组件也可在无窗体情况下从控制台应用和服务中使用。

所有组件

试用与授权

sgcPDF 单独授权,单人开发者版本起价 €249。每个许可证均包含完整源代码、1 年更新和 50% 到 70% 续费折扣。如需先试用,请下载免费试用版。sgcPDF 也包含在 sgcUI Enterprise 和 All-Access 套餐中。

sgcPDF

€249

提供单用、团队和全场授权。

  • 全部 20 个组件以及 sgcPDF_*.pas 单元
  • Delphi 7 到 13 与 C++ Builder
  • Windows、Linux、macOS、iOS 和 Android
  • 完整源代码
  • 1 年更新

sgcPDF .NET

€249

提供单用、团队和全场授权。

  • NuGet: esegece.sgcPDF
  • .NET Standard 2.0, .NET Framework 4.7.2, .NET 6, .NET 8, .NET 9、.NET 10
  • 完整源代码
  • 1 年更新

适用于 .NET 的 sgcPDF

sgcPDF 还提供完全托管的 C# .NET 移植版本,类名与 Delphi 版本完全相同。它以 NuGet 包的形式发布,支持 .NET Standard 2.0、.NET Framework 4.7.2、.NET 6、.NET 8、.NET 9 和 .NET 10,无需原生 DLL。

esegece.sgcPDF

核心库:文档模型、解析器、写入器、编辑器、渲染核心、字体、图像、表单、签名、加密、文本与图像提取、印前、PDF/A(含 PDF/A-4)以及 PDF/UA-2。

esegece.sgcPDF.WinForms

Windows Forms 附加组件:GDI 渲染器与画布、EMF 回放、页面导出为图像,以及 TsgcPDFViewerControl(含交互式注释和评论回复)、TsgcPDFThumbnailView 和 TsgcPDFOutlineView 控件,并含页面框和测量工具。

esegece.sgcPDF.Wpf

WPF 查看器:TsgcWpfPDFViewer、TsgcWpfPDFThumbnailView 和 TsgcWpfPDFOutlineView,支持缩放模式、框选缩放、文本选择、搜索、链接、页面框和测量工具。注释和表单字段仅显示。

esegece.sgcPDF.Avalonia

Avalonia 查看器:TsgcAvaloniaPDFViewer、TsgcAvaloniaPDFThumbnailView 和 TsgcAvaloniaPDFOutlineView,查看功能与 WPF 查看器相同,另支持双指缩放。

esegece.sgcPDF.sgcSign

可选桥接到 sgcSign .NET:TsgcPDFPAdESSigner 可使用任意 sgcSign 密钥提供程序签署 PAdES B-B、B-T、B-LT 和 B-LTA。

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

每个包也提供带 .Community 后缀的免费社区版,例如 dotnet add package esegece.sgcPDF.Community。两个版本功能相同。社区版对年营业收入低于 100 万欧元且开发者不超过 5 人的个人和组织免费提供,启动时会显示简短提示。注册版取消该提示并附带商业许可。

在 NuGet 上查看 .NET 下载

sgcPDF 是 sgcUI Enterprise 的一部分

sgcPDF 属于 sgcUI 套件,这是一套面向 Delphi 和 C++ Builder 的组件,sgcPDF 与其他所有 sgcUI 产品一起包含在 sgcUI Enterprise 版中,也可作为独立套件购买。价格请参阅 sgcUI 价格页面和 sgcPDF 价格页面。

sgcReports

报表设计器和报表引擎,通过 sgcPDF 将成品报表导出为 PDF。

了解 sgcReports →

sgcGrid

面向 Delphi 和 C++ Builder 的高性能数据网格。

了解 sgcGrid →

sgcCharts

适用于仪表板和报表的图表。

了解 sgcCharts →

sgcDashboard

适用于仪表板的磁贴、KPI 和布局。

了解 sgcDashboard →

在线帮助:简介、快速入门、安装和 .NET 安装。

eSeGeCe 的其他产品

将 sgcPDF 与我们其他的 Delphi 与 C++ Builder 组件库搭配使用。

sgcSign

企业级数字签名。支持 XAdES、PAdES、CAdES 和 ASiC,提供 10 个密钥提供者和 21 个欧盟国家配置文件。

了解更多 →

sgcWebSockets

面向 Delphi、C++ Builder 与 .NET 的企业级 WebSocket、HTTP/2、MQTT、AMQP 与 WebRTC 组件。

了解更多 →

sgcHTML

面向 Delphi 与 C++ Builder、基于 Bootstrap 与 htmx 构建的服务器端 HTML 与 UI 组件。

了解更多 →

sgcCrypto

纯 Object Pascal 实现的现代密码学:AES-GCM、SHA-3、Ed25519、X.509 以及后量子 ML-KEM 与 ML-DSA。

了解更多 →
3,000+开发者
20+年
761+组件
30+API 集成
5平台
30 天退款保证不满意?可在购买后 30 天内申请全额退款。 查看退款政策

无需 DLL 的 PDF

使用您已有的 Delphi 或 C++ Builder 代码创建、查看、签名并归档 PDF 文件。