sgcPDF Macierz funkcji

Wszystko, co robi sgcPDF, pogrupowane według zadania. Każda funkcja jest zaimplementowana w Object Pascalu w jednostkach sgcPDF_*.pas i dostarczana z pełnym kodem źródłowym. Przykłady kodu na tej stronie zostały skompilowane ze źródłami sgcPDF i uruchomione.

Tworzenie

14 funkcji

Edycja

7 funkcji

Ekstrakcja

5 funkcji

Formularze

4 funkcji

.NET

5 pakietów NuGet

Tworzenie

FunkcjaSzczegóły
StronyDowolny rozmiar i orientacja strony, A4, Letter lub niestandardowy, oraz obrót strony.
Tekst14 standardowych czcionek PDF i kolorowy tekst, z zawijaniem akapitów przez płótno i renderery HTML.
Osadzone czcionkiTrueType, OpenType (kontury TrueType i CFF) oraz kolekcje TrueType, automatycznie osadzane i tworzone jako podzbiór, z mapami Unicode ToUnicode, dzięki czemu tekst można kopiować i wyszukiwać.
Złożone systemy pismaKerning i ligatury, arabskie formy łączenia przez GSUB oraz dwukierunkowy algorytm Unicode dla tekstu pisanego od prawej do lewej.
Tekst CJKTekst chiński, japoński i koreański za pomocą osadzonych czcionek TrueType i kolekcji TrueType.
ObrazyJPEG, PNG z kanałem alfa, BMP i TIFF (w tym obrazy faksowe CCITT), z miękkimi maskami.
Grafika wektorowaLinie, prostokąty, okręgi, elipsy, krzywe Béziera, wielokąty, wzory kresek, zakończenia i połączenia linii, przezroczystość i gradienty.
TabeleTabele z nagłówkami, obramowaniami, marginesami komórek i kolorami kontynuowanymi na kolejnych stronach.
Kody kreskoweCode 128, Code 39, EAN-13, EAN-8, UPC-A, ITF, Codabar, GS1-128, kod QR, DataMatrix (ECC200) i PDF417, rysowane jako wektory. Kontrolki TsgcPDFBarcodeControl (VCL) i TsgcPDFBarcodeFMX (FireMonkey) oraz w .NET TsgcPDFBarcodeControl (WinForms), TsgcWpfPDFBarcodeControl i TsgcAvaloniaPDFBarcodeControl wyświetlają je na formularzach, zapisują do PNG lub SVG i rysują na stronie PDF przez Symbol.DrawToPDF. Kontrolki WPF i Avalonia rysują moduły jako geometrię wektorową na pełnych pikselach urządzenia, a każda właściwość jest właściwością zależności lub stylizowaną, więc tekst można wiązać w XAML. Wszystkie są dostępne w każdej edycji sgcPDF.
Adnotacje i linkiNotatki samoprzylepne, tekst swobodny, podświetlenie, podkreślenie i przekreślenie, linie i strzałki, kwadraty i okręgi, rysunki odręczne i pieczęcie, a także linki do URL i stron. Strumienie wyglądu są generowane, dzięki czemu adnotacje wyświetlają się w Adobe Acrobat, w przeglądarkach internetowych i w innych przeglądarkach PDF.
Odpowiedzi na komentarzeOdpowiedzi dołączone do dowolnej adnotacji tworzą wątek dyskusji, a każda odpowiedź ma własnego autora, datę i treść.
Zakładki i warstwyZagnieżdżone zakładki (konspekt) i opcjonalne grupy treści (warstwy), które czytelnicy mogą pokazywać lub ukrywać.
HTML na PDFTsgcPDFHTMLRenderer: nagłówki, akapity, style CSS inline, listy, tabele, obrazy, linki, podziały stron, nagłówki, stopki i numery stron.
Płótno i EMF na PDFTsgcPDFCanvas zapisuje wywołania rysowania jako treść PDF, a metapliki EMF są odtwarzane jako wektory PDF, dzięki czemu istniejący kod raportów i wykresów generuje wyjście PDF.

HTML na 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;

Edycja

FunkcjaSzczegóły
Znaki wodne i pieczęcieZnaki wodne z czcionką, rozmiarem, obrotem, kolorem i przezroczystością, na jednej lub wszystkich stronach.
Nagłówki, stopki, numery stronTekst nagłówka i stopki oraz numery stron w formacie takim jak Page %d of %d.
Operacje na stronachŁączenie dokumentów, dzielenie, wyodrębnianie zakresów stron, wstawianie, usuwanie, obracanie i zmiana kolejności stron.
Zapis przyrostowyZmiany są dodawane do oryginalnego pliku jako nowa wersja, dzięki czemu wcześniejsze podpisy cyfrowe pozostają ważne.
Istniejące adnotacjeAdnotacje istniejącego pliku PDF są wczytywane jako typowane obiekty z autorem, datą, odpowiedziami i geometrią. Można je edytować w kodzie lub w przeglądarce i zapisać albo wywołać SaveIncremental, aby dołączyć zmiany bez naruszania oryginalnych bajtów, dzięki czemu istniejące podpisy pozostają nienaruszone.
Kompaktowe wyjścieStrumienie obiektów i strumienie odniesień krzyżowych dla mniejszych plików, plus TsgcPDFOptimizer do usuwania duplikatów i nieużywanych obiektów oraz zmniejszania rozdzielczości obrazów.
Duże plikiPrzesunięcia są w pełni 64-bitowe, a obiekty są wczytywane na żądanie ze strumienia, dzięki czemu można otwierać i zapisywać pliki większe niż 2 GB.

Renderowanie i przeglądarki

FunkcjaSzczegóły
Przeglądarka VCLTsgcPDFViewerControl z przewijaniem, trybami powiększenia, nawigacją po stronach, zaznaczaniem i kopiowaniem tekstu, wyszukiwaniem z podświetleniem, wypełnianiem pól formularza, nawigacją po linkach i drukowaniem, plus TsgcPDFThumbnailView i TsgcPDFOutlineView.
Przeglądarka FireMonkeyTsgcPDFViewerFMX rysuje poprzez płótno FMX w systemach Windows, macOS, iOS i Android. Powiększanie ramką (SelectionMode psmZoom, OnMarqueeZoom) powiększa do prostokąta narysowanego myszą albo długim naciśnięciem i przeciągnięciem. Wyszukiwanie tekstu: FindText znajduje i wyróżnia każde trafienie oraz przewija do pierwszego, FindNext i FindPrevious przechodzą między trafieniami, a OnSearchProgress zgłasza każdą stronę i może zatrzymać długie wyszukiwanie. SearchColor i SearchCurrentColor ustawiają kolory wyróżnienia. Tryby widoku: ViewMode wybiera jedną stronę (fvmSinglePage, zmiana strony kółkiem myszy oraz klawiszami Page Up i Page Down), widok ciągły (fvmContinuous, domyślny) lub dwie strony (fvmTwoPage, obok siebie, z obsługą układu od prawej do lewej).
Przeglądarki .NETTsgcPDFViewerControl dla WinForms, TsgcWpfPDFViewer dla WPF i TsgcAvaloniaPDFViewer dla Avalonia, każda z widokiem miniatur i konspektu. Przeglądarki WPF i Avalonia mają tryby powiększenia, Ctrl+kółko i powiększanie ramką (szczypanie w Avalonia), zaznaczanie i kopiowanie tekstu, wyszukiwanie z podświetleniem, nawigację po łączach i konspekcie, ramki strony oraz narzędzie pomiaru. Podobnie jak przeglądarka WinForms, edytują adnotacje i wypełniają formularze.
Interaktywne adnotacjeW Delphi VCL i FMX, C++Builder oraz .NET WinForms, WPF i Avalonia użytkownicy końcowi tworzą adnotacje myszą: notatki samoprzylepne, tekst swobodny, podświetlenie, podkreślenie i przekreślenie tekstu, linie i strzałki, prostokąty i elipsy, rysunki odręczne i pieczęcie. Zaznaczają je, przesuwają, zmieniają ich rozmiar, edytują i usuwają. Kliknięcie notatki otwiera okno podręczne z autorem, datą, treścią i odpowiedziami, w którym można edytować i odpowiadać. Przeglądarki zgłaszają zdarzenia OnAnnotationClick, OnAnnotationAdd, OnAnnotationChange, OnAnnotationDelete i OnAnnotationSelect. W przeglądarkach WPF i Avalonia AnnotationEditing włącza edycję, a AnnotationTool wybiera narzędzie.
Motyw przeglądarki (z sgcUI)Z UseUITheme przeglądarki VCL, FireMonkey, WinForms, WPF i Avalonia oraz widoki miniatur, konspektu i komentarzy biorą kolory z motywu aplikacji sgcUI: obszar wokół stron, okna wyskakujące, zaznaczenie i ciemne paski przewijania w ciemnym motywie, przerysowane, gdy zmieni się motyw, ustawienie wstępne lub akcent. Strony i kolory adnotacji się nie zmieniają. Wymaga jednostki sgcUIPDF_Theme w Delphi i C++Builder albo pakietu esegece.sgcUICore.sgcPDF w .NET.
Panel komentarzyTsgcPDFCommentsView (VCL) i TsgcPDFCommentsViewFMX wyświetlają wszystkie adnotacje według stron wraz z autorem, datą, treścią i odpowiedziami w wątkach, zsynchronizowane z przeglądarką.
Przeglądarka i edytor obrazówTsgcPDFImageEditor (VCL), TsgcPDFImageEditorFMX oraz w .NET TsgcPDFImageEditor (WinForms), TsgcWpfPDFImageEditor i TsgcAvaloniaPDFImageEditor wyświetlają zdjęcie lub zeskanowaną stronę z trybami powiększenia, przesuwania i dopasowania, pozwalają je obracać, odbijać i przycinać oraz rysować adnotacje pióra, linii, strzałki, prostokąta, elipsy, tekstu i zakreślenia, z cofaniem i ponawianiem. Wynik zapisywany jest jako PNG, JPEG lub BMP, a ExportToPDF zapisuje stronę PDF z oryginalnym obrazem i adnotacjami jako grafiką wektorową. Wczytany obraz nigdy się nie zmienia: edycje są zapisywane jako JSON i można je później wczytać ponownie, a ReadOnly zamienia kontrolkę w przeglądarkę. Pomoc
Renderer rastrowy dla serwerówTsgcPDFRendererRaster to rasteryzator w czystym Object Pascalu, który renderuje strony do pikseli lub PNG bez GDI, w systemach Windows i Linux.
Renderer GDI i eksportRenderowanie do bitmapy lub kontekstu urządzenia w Windows oraz eksport stron i miniatur do BMP, PNG lub JPEG za pomocą TsgcPDFExporter.
Model graficznyPrzestrzenie kolorów DeviceGray, DeviceRGB, DeviceCMYK, indeksowane, ICCBased i Lab, cieniowania osiowe i promieniowe, wzory kafelkowe, miękkie maski, przezroczystość mieszania i formularzowe XObject.
CzcionkiOsadzone programy czcionek TrueType, CFF, OpenType i Type 1 są renderowane na podstawie ich konturów, ze standardowymi kodowaniami i czcionkami CID Identity-H.
Dekodery obrazówFlate, LZW, ASCII85, ASCIIHex, RunLength, JPEG (baseline i progresywny, CMYK), JPEG 2000, CCITT grupa 3 i 4 oraz JBIG2.

Opisz zdjęcie i wyeksportuj je do PDF

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;

Przycina zdjęcie, dodaje w kodzie strzałkę i notatkę tekstową z możliwością cofnięcia, a następnie zapisuje spłaszczony PNG, stronę PDF z adnotacjami wektorowymi oraz edycje jako JSON. Jednostki: sgcPDF_ImageEditor, sgcPDF_ImageEditor_VCL. Zobacz TsgcPDFImageEditor.

Ekstrakcja

FunkcjaSzczegóły
TekstTekst strony lub całego dokumentu, z mapowaniem Unicode czcionek osadzonych i CID.
Pozycje tekstuTsgcPDFTextExtractor zwraca każdy fragment tekstu wraz z X, Y, nazwą i rozmiarem czcionki.
WyszukiwanieZnajdowanie tekstu na stronie lub w dokumencie.
ObrazyTsgcPDFImageExtractor wylicza obrazy strony, w tym obrazy inline i te wewnątrz formularzowych XObject, i dekoduje je do PNG, JPEG lub BMP.
Metadane i załącznikiInformacje o dokumencie, metadane XMP, zakładki, warstwy i osadzone pliki.

Formularze

FunkcjaSzczegóły
Twórz formularzePola tekstowe, pola wyboru, przyciski opcji, listy rozwijane, listy i przyciski ze strumieniami wyglądu.
Wypełnij i spłaszczUstaw wartości pól w kodzie lub w przeglądarce, a następnie spłaszcz formularz do statycznej treści strony.
Wypełnianie formularzy w przeglądarkach WPF i AvaloniaZ FormFilling (domyślnie włączone) użytkownicy wypełniają pola tekstowe, pola wyboru, przyciski opcji, listy rozwijane i listy w TsgcWpfPDFViewer i TsgcAvaloniaPDFViewer, a Tab przechodzi między polami w kolejności tabulacji. OnFieldChange jest wywoływane raz dla każdej zatwierdzonej wartości, Esc zachowuje starą wartość, a Core.Document.SaveToFile zapisuje wypełniony formularz.
FDF i XFDFImportuj i eksportuj dane formularza jako FDF i XFDF.

Bezpieczeństwo i podpisy

FunkcjaSzczegóły
Szyfrowanie hasłemRC4 40-bitowy i 128-bitowy, AES-128 i AES-256 (rewizje 5 i 6), z hasłem użytkownika i właściciela oraz flagami uprawnień. Zaszyfrowane pliki są odszyfrowywane przy wczytywaniu.
Szyfrowanie certyfikatemSzyfrowanie kluczem publicznym dla jednego lub wielu certyfikatów odbiorcy (adbe.pkcs7.s4 i adbe.pkcs7.s5).
Podpisy cyfrowePodpisywanie certyfikatem PFX, widocznymi lub niewidocznymi polami podpisu, SHA-256, SHA-384 i SHA-512, znacznikami czasu RFC 3161 i znacznikami czasu dokumentu.
Podpisy odręczneTsgcPDFSignaturePad (VCL), TsgcPDFSignaturePadFMX oraz w .NET TsgcPDFSignaturePad (WinForms), TsgcWpfPDFSignaturePad i TsgcAvaloniaPDFSignaturePad rejestrują podpis myszą, ekranem dotykowym lub piórem. Grubość linii zależy od nacisku pióra (komunikaty wskaźnika w VCL i WinForms, rysik w WPF i Avalonia; FireMonkey nie zgłasza nacisku) i od szybkości, pociągnięcia są wygładzane do krzywych, a cofanie i ponawianie działają. Podpis zapisywany jest jako PNG, SVG lub JSON, a ApplyToSignature umieszcza go w widocznym polu podpisu cyfrowego jako wektorowy tusz i obraz PNG. Plik PNG lub JPEG w Appearance.ImageData, na przykład zeskanowany podpis, również jest rysowany w polu. Pomoc
PAdES przez sgcSignTsgcPDFPAdESSigner tworzy podpisy ETSI.CAdES.detached na poziomach B-B, B-T, B-LT i B-LTA, z danymi walidacyjnymi DSS, korzystając z dowolnego dostawcy kluczy sgcSign (PEM, PFX, PKCS#11, magazyn certyfikatów Windows, chmurowe HSM). sgcSign jest licencjonowany osobno.
WeryfikacjaTsgcPDFSignatureVerifier sprawdza integralność, pokrycie zakresu bajtów, certyfikat podpisującego i łańcuch certyfikatów każdego podpisu.
UtajnianieTsgcPDFRedactor usuwa tekst na poziomie glifu, piksele obrazu, ścieżki wektorowe i adnotacje w obrębie obszaru lub pasujące do tekstu, dodaje nakładkę i może usunąć metadane. Usuniętego tekstu nie można wyodrębnić z wyniku.
Tekst na konturyTsgcPDFTextOutliner zastępuje każdy glif ścieżką wektorową o tej samej pozycji, kolorze i rozmiarze, w treści strony, obiektach form XObject, wzorcach kafelkowych, czcionkach Type3 i wyglądach adnotacji, a następnie usuwa nieużywane czcionki. Plik drukuje się i wygląda tak samo, ale nie wymaga już żadnej czcionki, co odpowiada drukarniom, procesorom RIP i licencjom czcionek zabraniającym osadzania. Tekst w czcionkach, które nie są osadzone, jest zamieniany na kontury przy użyciu zastępczej czcionki systemowej, której użyłaby przeglądarka, a tekst niewidoczny jest usuwany. Tekstu nie można już zaznaczać ani przeszukiwać.

Szyfrowanie hasłem 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;

Podpisywanie certyfikatem 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;

Podpisz podpisem odręcznym

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;

Wczytuje podpis zapisany jako JSON przez panel podpisu i podpisuje bez formularza, na przykład na serwerze. Pole pokazuje tusz obok nazwiska, daty i tekstu. Na formularzu TsgcPDFSignaturePad.ApplyToSignature robi to samo jednym wywołaniem. Zobacz przewodnik po podpisach cyfrowych.

PAdES przez mostek sgcSign

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;

Utajnij nazwisko i obszar

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;

Zamień cały tekst na kontury

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;

Archiwizacja i dostępność

FunkcjaSzczegóły
PDF/AWyjście PDF/A-1, PDF/A-2 i PDF/A-3 w poziomach a i b oraz PDF/A-4 i PDF/A-4f (paA4, paA4f) jako pliki PDF 2.0, z metadanymi XMP, output intent i osadzonymi czcionkami. W Delphi i .NET.
WalidatorTsgcPDFAValidator sprawdza plik pod kątem wybranego poziomu PDF/A, w tym PDF/A-4 i PDF/UA-2, i zgłasza błędy oraz ostrzeżenia. Wyjście PDF/A-4, PDF/A-4f i PDF/UA-2 jest sprawdzane w veraPDF.
Otagowany PDFDrzewo struktury z Document, Part, Sect, H1-H6, P, L, LI, Table, TR, TH, TD i Figure z tekstem alternatywnym, treścią oznaczoną, mapą ról, językiem i MarkInfo.
PDF/UA-1Dostępne wyjście razem z PDF/A-2a lub PDF/A-3a oraz kontrole PDF/UA-1 w walidatorze.
PDF/UA-2Ustaw PDFUAPart na puaPart2, aby uzyskać wyjście PDF/UA-2 (ISO 14289-2), osobno albo razem z PDF/A-4, z przestrzenią nazw struktury PDF 2.0 i celami struktury. W Delphi i .NET, w tym eksport sgcReports i mostek sgcUIPDF.
ZałącznikiOsadzone pliki z typem MIME, datami i powiązaniami plików powiązanych PDF/A-3 i PDF/A-4f.
Factur-X i ZUGFeRDOsadza XML faktury ze schematem rozszerzenia XMP Factur-X dla profili Minimum, Basic WL, Basic, EN 16931, Extended i XRechnung, i zapisuje plik jako PDF/A-3b.

Faktura Factur-X jako 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;

Waliduj 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 i PDF/UA-2 w jednym pliku

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;

Aby sprawdzić plik, utwórz TsgcPDFAValidator z paA4 i ustaw jego właściwości PDFUA i PDFUAPart. Zobacz tematy pomocy PDF/A-4 i PDF/UA-2.

Przygotowanie do druku

To samo API do przygotowania do druku w Delphi i .NET, z tymi samymi nazwami.

FunkcjaSzczegóły
Ramki stronyMediaBox, CropBox, BleedBox, TrimBox i ArtBox w TsgcPDFPage, wraz z Rotate i UserUnit, zachowywane przy wczytywaniu i zapisie pliku.
ImpozycjaAddPageAsForm zamienia stronę innego dokumentu, przyciętą do ramki strony lub prostokąta, w obiekt XObject typu formularz, który DrawForm, DrawFormInRect i DrawFormMatrix umieszczają na arkuszu. Demo PDFImposition buduje z nich układy arkuszy.
Znaczniki drukarskieDrawCropMarks, DrawBleedMarks, DrawRegistrationMark, DrawColorBar i DrawSlugText.
Kolory dodatkowePrzestrzenie barw Separation, Registration i DeviceN oraz stany graficzne nadruku dla wypełnienia i obrysu.
Podgląd nadrukuOverprintPreview w rendererze symuluje nadruk na ekranie i w wyjściu rastrowym.
Output intent PDF/XSetOutputIntent zapisuje output intent GTS_PDFX z opcjonalnym profilem ICC, a PDFXVersion ustawia klucz wersji PDF/X.
Narzędzia przeglądarkiWyświetlanie ramek strony, podpowiedzi ramek strony i narzędzie pomiaru w przeglądarkach VCL i WinForms oraz w przeglądarkach WPF i Avalonia.

Dwie strony na jednym arkuszu ze znacznikami cięcia (.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");
}

sgcPDF dla .NET

W pełni zarządzany port biblioteki w C#, jeden plik C# na każdą jednostkę Delphi, z tymi samymi nazwami klas (TsgcPDFDocument, TsgcPDFPage, TsgcPDFEditor i inne). Jest dostarczany jako pakiety NuGet, z których każdy jest też dostępny jako darmowa edycja Community z sufiksem .Community.

PakietSzczegóły
esegece.sgcPDFBiblioteka: model dokumentu, parser, writer, edytor, rdzeń renderowania, czcionki, obrazy, formularze, podpisy, szyfrowanie, ekstrakcja tekstu i obrazów, przygotowanie do druku, PDF/A (w tym PDF/A-4) i PDF/UA-2. Obsługuje .NET Standard 2.0, .NET Framework 4.7.2, .NET 6, .NET 8, .NET 9 i .NET 10.
esegece.sgcPDF.WinFormsRenderer GDI i kanwa, odtwarzanie EMF, eksport stron do obrazów oraz kontrolki TsgcPDFViewerControl (z interaktywnymi adnotacjami i odpowiedziami na komentarze), TsgcPDFThumbnailView, TsgcPDFBarcodeControl, TsgcPDFOutlineView, TsgcPDFSignaturePad i TsgcPDFImageEditor, z ramkami strony i narzędziem pomiaru. Obsługuje .NET Framework 4.7.2 i .NET 8 w systemie Windows.
esegece.sgcPDF.WpfPrzeglądarka WPF: TsgcWpfPDFViewer, TsgcWpfPDFThumbnailView i TsgcWpfPDFOutlineView oraz TsgcWpfPDFBarcodeControl, TsgcWpfPDFSignaturePad i TsgcWpfPDFImageEditor. Obsługuje .NET Framework 4.7.2, .NET 8, .NET 9 i .NET 10 w systemie Windows.
esegece.sgcPDF.AvaloniaPrzeglądarka Avalonia: TsgcAvaloniaPDFViewer, TsgcAvaloniaPDFThumbnailView i TsgcAvaloniaPDFOutlineView oraz TsgcAvaloniaPDFBarcodeControl, TsgcAvaloniaPDFSignaturePad i TsgcAvaloniaPDFImageEditor. Obsługuje .NET 8, .NET 9 i .NET 10.
esegece.sgcPDF.sgcSignOpcjonalny mostek do sgcSign .NET: TsgcPDFPAdESSigner podpisuje w formatach PAdES B-B, B-T, B-LT i B-LTA z dowolnym dostawcą kluczy sgcSign.
Edycja CommunityTe same funkcje co edycja zarejestrowana. Darmowa dla osób prywatnych i organizacji o rocznym przychodzie brutto poniżej 1 mln EUR i nie więcej niż 5 programistach, z krótkim powiadomieniem przy starcie. Pakiety mają te same identyfikatory z przyrostkiem .Community, na przykład esegece.sgcPDF.Community.

Instalacja

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
Najkorzystniejsza oferta: All-AccessWszystkie produkty eSeGeCe, ze wsparciem Premium w cenie, już od €1,059 rocznie.
Zobacz cennik All-Access

Buduj z sgcPDF

Pobierz wersję próbną i dodaj funkcje PDF do swojej aplikacji Delphi lub C++ Builder.