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 双方向アルゴリズムに対応。 |
| CJK テキスト | 埋め込み TrueType フォントと TrueType コレクションによる中国語・日本語・韓国語テキスト。 |
| 画像 | JPEG、アルファ付き PNG、BMP、TIFF(CCITT ファックス画像を含む)、ソフトマスク対応。 |
| ベクターグラフィック | 線、長方形、円、極圓、ベジェ曲線、多角形、破線パターン、線先端・接合部、透明度、グラデーション。 |
| 表 | ページをまたいで継続するヘッダー、枠線、セル余白、色を持つ表。 |
| バーコード | Code 128、Code 39、EAN-13、EAN-8、UPC-A、ITF、Codabar、GS1-128、QR コード、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 ビットであり、オブジェクトはストリームから遵次読み込まれるため、2 GB を超えるファイルも開いて保存できます。 |
| 機能 | 詳細 |
|---|---|
| VCL ビューア | TsgcPDFViewerControl:スクロール、ズームモード、ページナビゲーション、テキスト選択・コピー、ハイライト検索、フォーム入力、リンクナビ、印刷。さらに TsgcPDFThumbnailView と TsgcPDFOutlineView。 |
| FireMonkey ビューア | TsgcPDFViewerFMX は Windows、macOS、iOS、Android 上で FMX キャンバスを介して描画します。 |
| サーバー向けラスタレンダラー | TsgcPDFRendererRaster は Windows と Linux 上で GDI を使わずページをピクセルまたは PNG にレンダリングする純粋 Pascal 製ラスタライザーです。 |
| 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)。ユーザーパスワードとオーナーパスワード、権限フラグに対応。暗号化されたファイルは読み込み時に復号されます。 |
| 証明書暗号化 | 1 つ以上の受信者証明書(adbe.pkcs7.s4 および adbe.pkcs7.s5)に対する公開鍵暗号化。 |
| 電子署名 | PFX 証明書による署名、表示/非表示の署名フィールド、SHA-256/384/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;