sgcPDF 기능 표
sgcPDF가 수행하는 모든 기능을 작업별로 모았습니다. 모든 기능은 sgcPDF_*.pas 유닛에 Object Pascal로 구현되어 있으며 전체 소스 코드와 함께 제공됩니다. 이 페이지의 코드 샘플은 sgcPDF 소스로 컴파일하여 실행한 것입니다.
sgcPDF가 수행하는 모든 기능을 작업별로 모았습니다. 모든 기능은 sgcPDF_*.pas 유닛에 Object Pascal로 구현되어 있으며 전체 소스 코드와 함께 제공됩니다. 이 페이지의 코드 샘플은 sgcPDF 소스로 컴파일하여 실행한 것입니다.
| 기능 | 세부 정보 |
|---|---|
| 페이지 | A4, Letter 또는 사용자 지정 크기와 방향을 자유롭게 설정하고 페이지를 회전할 수 있습니다. |
| 텍스트 | 14개 표준 PDF 폰트와 색상 텍스트, 캔버스와 HTML 렌더러를 통한 단락 줄바꿈 지원. |
| 임베디드 폰트 | TrueType, OpenType(TrueType/CFF 아용라인), TrueType 컴렉션을 자동으로 임베딩하고 서브셋화하며, 유니코드 ToUnicode 맵으로 텍스트 복사와 검색이 가능합니다. |
| 복잡한 문자 체계 | 커닝과 리가처, GSUB을 통한 아랍어 연결형, 우에서좌 텍스트를 위한 유니코드 양방향 알고리즘. |
| 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을 벡터로 그립니다. TsgcPDFBarcodeControl(VCL)과 TsgcPDFBarcodeFMX(FireMonkey) 컨트롤, 그리고 .NET의 TsgcPDFBarcodeControl(WinForms), TsgcWpfPDFBarcodeControl, TsgcAvaloniaPDFBarcodeControl은 폼에 바코드를 표시하고, PNG 또는 SVG로 저장하며, Symbol.DrawToPDF로 PDF 페이지에 그립니다. WPF와 Avalonia 컨트롤은 모듈을 장치의 정수 픽셀 위에 벡터 지오메트리로 그리며, 모든 속성이 종속성 속성 또는 스타일 속성이므로 텍스트를 XAML에서 바인딩할 수 있습니다. 모두 sgcPDF의 모든 에디션에 포함되어 있습니다. |
| 주석 및 링크 | 스티커 노트, 자유 텍스트, 하이라이트, 밑줄, 취소선, 선과 화살표, 사각형과 원, 자유 곡선 잉크와 스탬프, 그리고 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는 Windows, macOS, iOS, Android에서 FMX 캔버스를 통해 그립니다. 영역 확대(SelectionMode psmZoom, OnMarqueeZoom)는 마우스로 끌거나 길게 누른 뒤 끌어서 지정한 사각형으로 확대합니다. 텍스트 검색: FindText는 일치하는 항목을 모두 강조 표시하고 첫 번째 항목으로 스크롤하며, FindNext와 FindPrevious는 일치 항목 사이를 이동하고, OnSearchProgress는 페이지마다 진행 상황을 알리며 긴 검색을 중지할 수 있습니다. SearchColor와 SearchCurrentColor는 강조 표시 색을 설정합니다. 보기 모드: ViewMode 로 단일 페이지(fvmSinglePage, 마우스 휠과 Page Up, Page Down으로 페이지 전환), 연속(fvmContinuous, 기본값) 또는 두 페이지(fvmTwoPage, 나란히 표시, 오른쪽에서 왼쪽 지원)를 선택합니다. |
| .NET 뷰어 | WinForms용 TsgcPDFViewerControl, WPF용 TsgcWpfPDFViewer, Avalonia용 TsgcAvaloniaPDFViewer이며, 각각 축소판 보기와 개요 보기를 갖추고 있습니다. WPF와 Avalonia 뷰어는 확대 모드, Ctrl+휠과 영역 확대(Avalonia는 핀치 포함), 텍스트 선택과 복사, 강조 표시 검색, 링크와 개요 탐색, 페이지 박스, 측정 도구를 지원합니다. WinForms 뷰어처럼 주석을 편집하고 양식을 채울 수 있습니다. |
| 대화형 주석 | Delphi VCL과 FMX, C++Builder, .NET WinForms, WPF, Avalonia에서 최종 사용자가 마우스로 주석을 만듭니다. 스티커 노트, 자유 텍스트, 텍스트 위의 하이라이트, 밑줄, 취소선, 선과 화살표, 사각형과 타원, 자유 곡선 잉크와 스탬프입니다. 주석을 선택, 이동, 크기 조정, 편집, 삭제할 수 있습니다. 노트를 클릭하면 작성자, 날짜, 내용, 답글이 표시되는 팝업이 열리며 여기서 편집하고 답글을 달 수 있습니다. 뷰어는 OnAnnotationClick, OnAnnotationAdd, OnAnnotationChange, OnAnnotationDelete, OnAnnotationSelect 이벤트를 발생시킵니다. WPF와 Avalonia 뷰어에서는 AnnotationEditing이 편집을 켜고 AnnotationTool이 도구를 고릅니다. |
| 뷰어 테마(sgcUI 사용 시) | UseUITheme를 쓰면 VCL, FireMonkey, WinForms, WPF, Avalonia 뷰어와 썸네일, 개요, 댓글 보기가 sgcUI 애플리케이션 테마에서 색상을 가져옵니다. 페이지 주변 영역, 팝업, 선택 영역, 다크 테마의 어두운 스크롤 막대가 해당되며, 테마, 프리셋, 강조 색이 바뀌면 다시 그려집니다. 페이지와 주석 색상은 바뀌지 않습니다. Delphi와 C++Builder에서는 sgcUIPDF_Theme 유닛이, .NET에서는 esegece.sgcUICore.sgcPDF 패키지가 필요합니다. |
| 댓글 패널 | TsgcPDFCommentsView(VCL)와 TsgcPDFCommentsViewFMX는 모든 주석을 페이지별로 작성자, 날짜, 내용, 스레드형 답글과 함께 나열하며 뷰어와 동기화됩니다. |
| 이미지 뷰어 및 편집기 | TsgcPDFImageEditor(VCL), TsgcPDFImageEditorFMX, .NET의 TsgcPDFImageEditor(WinForms), TsgcWpfPDFImageEditor, TsgcAvaloniaPDFImageEditor는 사진이나 스캔한 페이지를 확대, 이동, 맞춤 모드로 보여 주고, 회전, 뒤집기, 자르기를 하며, 펜, 선, 화살표, 사각형, 타원, 텍스트, 강조 표시 주석을 그릴 수 있고 실행 취소와 다시 실행을 지원합니다. 결과는 PNG, JPEG 또는 BMP로 저장하거나, ExportToPDF로 원본 이미지와 벡터 그래픽 주석이 있는 PDF 페이지를 작성합니다. 불러온 이미지는 절대 변경되지 않으며, 편집 내용은 JSON으로 저장해 나중에 다시 불러올 수 있고, ReadOnly를 설정하면 컨트롤이 뷰어가 됩니다. 도움말 |
| 서버용 래스터 렌더러 | 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. |
procedure AnnotatePhoto(aEditor: TsgcPDFImageEditor; const aFileName: string);
var
oModel: TsgcPDFImageEditorModel;
oArrow, oNote: TsgcPDFImageAnnotation;
begin
aEditor.LoadFromFile(aFileName);
oModel := aEditor.Model;
oModel.SaveUndoState;
// crop: source pixels, the annotations below use output pixels
oModel.CropRect := sgcPDFImageRect(40, 30, 840, 630);
// an arrow from the start point to the tip
oArrow := oModel.Annotations.Add(iakArrow);
oArrow.Color := $FFFF0000;
oArrow.Width := 5;
oArrow.AddPoint(120, 420);
oArrow.AddPoint(360, 240);
// a text note: Rect is the text box, FontSize in points
oNote := oModel.Annotations.Add(iakText);
oNote.Color := $FF0000FF;
oNote.FontName := 'Arial';
oNote.FontSize := 18;
oNote.Text := 'Scratch on the door';
oNote.Rect := sgcPDFImageRect(60, 440, 360, 480);
oModel.Changed;
// PNG from the extension, the image and the annotations flattened
aEditor.SaveToFile(ChangeFileExt(aFileName, '.edited.png'));
// the image placed unchanged, the annotations as vector paths and text
aEditor.ExportToPDF(ChangeFileExt(aFileName, '.pdf'));
// the edits as JSON, to edit them again later
aEditor.SaveEditsToFile(ChangeFileExt(aFileName, '.json'));
end;
사진을 자르고, 코드에서 실행 취소를 지원하며 화살표와 텍스트 메모를 추가한 다음, 평면화된 PNG, 벡터 주석이 있는 PDF 페이지, JSON 형식의 편집 내용을 작성합니다. 유닛: sgcPDF_ImageEditor, sgcPDF_ImageEditor_VCL. TsgcPDFImageEditor를 참고하세요.
| 기능 | 세부 정보 |
|---|---|
| 텍스트 | 페이지 또는 문서 전체 텍스트, 임베디드 및 CID 폰트의 유니코드 매핑 포함. |
| 텍스트 위치 | TsgcPDFTextExtractor는 각 텍스트 조각의 X, Y, 폰트 이름, 크기를 반환합니다. |
| 검색 | 페이지 또는 문서 내에서 텍스트를 찾습니다. |
| 이미지 | TsgcPDFImageExtractor는 인라인 이미지와 양식 XObject 내 이미지를 포함하여 페이지의 이미지를 열거하고 PNG, JPEG, BMP로 디코딩합니다. |
| 메타데이터 및 첨부 파일 | 문서 정보, XMP 메타데이터, 북마크, 레이어, 첨부 파일. |
| 기능 | 세부 정보 |
|---|---|
| 양식 생성 | 외관 스트림을 갖춘 텍스트 필드, 찴박자, 라디오 버튼, 콤보 박스, 목록 상자, 푸쉬 버튼. |
| 입력 및 평면화 | 코드나 뷰어에서 필드 값을 설정한 다음 양식을 정적 페이지 콘텐츠로 평면화합니다. |
| WPF와 Avalonia 뷰어의 양식 입력 | FormFilling(기본으로 켜짐)으로 사용자는 TsgcWpfPDFViewer와 TsgcAvaloniaPDFViewer에서 텍스트 필드, 체크 박스, 라디오 버튼, 콤보 박스, 목록 상자를 채우며, Tab 키는 탭 순서대로 필드를 이동합니다. OnFieldChange는 확정된 값마다 한 번 발생하고, Esc는 이전 값을 유지하며, Core.Document.SaveToFile은 채운 양식을 저장합니다. |
| FDF/XFDF | 양식 데이터를 FDF 및 XFDF로 가져오거나 내보냅니다. |
| 기능 | 세부 정보 |
|---|---|
| 암호 암호화 | RC4 40비트/128비트, AES-128, AES-256(리비전 5, 6), 사용자/소유자 암호와 권한 플래그 지원. 암호화된 파일은 로드 시 복호화됩니다. |
| 인증서 암호화 | 하나 이상의 수신자 인증서(adbe.pkcs7.s4, adbe.pkcs7.s5)를 위한 공개키 암호화. |
| 디지털 서명 | PFX 인증서로 서명, 표시/비표시 서명 필드, SHA-256/384/512, RFC 3161 타임스탬프 및 문서 타임스탬프. |
| 손글씨 서명 | TsgcPDFSignaturePad(VCL), TsgcPDFSignaturePadFMX, .NET의 TsgcPDFSignaturePad(WinForms), TsgcWpfPDFSignaturePad, TsgcAvaloniaPDFSignaturePad는 마우스, 터치 스크린 또는 펜으로 서명을 입력받습니다. 선 굵기는 펜 압력(VCL과 WinForms는 포인터 메시지, WPF와 Avalonia는 스타일러스, FireMonkey는 압력을 보고하지 않음)과 속도를 따르고, 획은 곡선으로 부드럽게 다듬어지며, 실행 취소와 다시 실행이 동작합니다. 서명은 PNG, SVG 또는 JSON으로 저장되고, ApplyToSignature는 이를 벡터 잉크와 PNG 이미지로 디지털 서명의 표시 필드에 넣습니다. 스캔한 서명 같은 Appearance.ImageData의 PNG 또는 JPEG도 필드에 그려집니다. 도움말 |
| 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 SignWithStoredSignature(const aJSONFile, aInput, aOutput: string);
var
oModel: TsgcPDFSignaturePadModel;
oStream: TFileStream;
oSigner: TsgcPDFSignatureHandler;
vAppearance: TsgcPDFSignatureAppearance;
begin
oModel := TsgcPDFSignaturePadModel.Create;
try
// the strokes saved before with SaveToJSON
oStream := TFileStream.Create(aJSONFile, fmOpenRead or fmShareDenyWrite);
try
oModel.LoadFromJSON(oStream);
finally
oStream.Free;
end;
oSigner := TsgcPDFSignatureHandler.Create;
try
oSigner.LoadCertificateFromPFX('signer.pfx', 'test123');
oSigner.SetField('Signature1', 0, 50, 50, 300, 120);
vAppearance := oSigner.Appearance;
// ImageData: a PNG of the ink, InkContent: the vector ink
oModel.ApplyToAppearance(vAppearance);
vAppearance.ShowName := True;
vAppearance.ShowDate := True;
vAppearance.Text := 'Approved';
oSigner.Appearance := vAppearance;
oSigner.SignDocument(aInput, aOutput);
finally
oSigner.Free;
end;
finally
oModel.Free;
end;
end;
서명 패드가 JSON으로 저장한 서명을 불러와 폼 없이, 예를 들어 서버에서 서명합니다. 필드에는 이름, 날짜, 텍스트와 함께 잉크가 표시됩니다. 폼에서는 TsgcPDFSignaturePad.ApplyToSignature가 한 번의 호출로 같은 일을 합니다. 디지털 서명 가이드를 참고하세요.
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 접미사가 붙은 무료 Community 버전으로도 제공됩니다.
| 패키지 | 세부 정보 |
|---|---|
esegece.sgcPDF | 라이브러리: 문서 모델, 파서, writer, 편집기, 렌더링 코어, 폰트, 이미지, 폼, 서명, 암호화, 텍스트 및 이미지 추출, 프리프레스, 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, TsgcPDFSignaturePad, TsgcPDFImageEditor 컨트롤, 페이지 박스와 측정 도구 포함. Windows에서 .NET Framework 4.7.2와 .NET 8을 지원합니다. |
esegece.sgcPDF.Wpf | WPF 뷰어: TsgcWpfPDFViewer, TsgcWpfPDFThumbnailView, TsgcWpfPDFOutlineView와 함께 TsgcWpfPDFBarcodeControl, TsgcWpfPDFSignaturePad, TsgcWpfPDFImageEditor. Windows에서 .NET Framework 4.7.2, .NET 8, .NET 9, .NET 10을 지원합니다. |
esegece.sgcPDF.Avalonia | Avalonia 뷰어: TsgcAvaloniaPDFViewer, TsgcAvaloniaPDFThumbnailView, TsgcAvaloniaPDFOutlineView와 함께 TsgcAvaloniaPDFBarcodeControl, TsgcAvaloniaPDFSignaturePad, TsgcAvaloniaPDFImageEditor. .NET 8, .NET 9, .NET 10을 지원합니다. |
esegece.sgcPDF.sgcSign | sgcSign .NET에 대한 선택적 브리지: TsgcPDFPAdESSigner는 모든 sgcSign 키 공급자로 PAdES B-B, B-T, B-LT, B-LTA에 서명합니다. |
| Community 버전 | 등록 버전과 동일한 기능을 제공합니다. 연간 총매출이 100만 유로 미만이고 개발자가 5명 이하인 개인 및 조직에게 무료이며, 시작 시 짧은 알림이 표시됩니다. 패키지 ID는 동일하며 .Community 접미사가 붙습니다. 예: esegece.sgcPDF.Community. |
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