procedure CreateHelloPDF(const AFileName: string);
var
oPDF: TsgcPDFDocument;
oPage: TsgcPDFPage;
begin
oPDF := TsgcPDFDocument.Create;
try
oPDF.Info.Title := 'Hello sgcPDF';
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 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];
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);
oSymbol.Symbology := bcCode128;
oSymbol.Text := 'TKT-2026-001';
oSymbol.DrawToPDF(oPage, 50, 680, 250, 60, $000000, $FFFFFF);
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);
oSymbol->Symbology = bcCode128;
oSymbol->Text = "TKT-2026-001";
oSymbol->DrawToPDF(oPage, 50, 680, 250, 60, 0x000000, 0xFFFFFF);
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);
TsgcPDFBarcodeSymbol oSymbol = new TsgcPDFBarcodeSymbol();
oSymbol.Symbology = TsgcPDFBarcodeType.bcCode128;
oSymbol.Text = "TKT-2026-001";
oSymbol.DrawToPDF(oPage, 50, 680, 250, 60, 0x000000, 0xFFFFFF);
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()
{
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");
}
using (TsgcPDFDocument oDoc = new TsgcPDFDocument())
{
oDoc.LoadFromFile("hello.pdf");
for (int i = 0; i < oDoc.PageCount(); i++)
Console.WriteLine(oDoc.ExtractTextW(i));
}
}
}