Delphi.cz

Český portál Delphi

Synopse PDF engine

Ten člověk je bůh. Už jsem to psal minule, když jsem popisoval některé jeho komponenty - viz. Synopse a Arnaud Bouchez.

Nyní ale má velký zářez na pažbě a můj nehynoucí obdiv. Publikoval PDF engine, které nemá problém s češtinou, nepoužívá externí knihovnu a hlavně funguje. A je to open source.

update: Používejte aktuální verzi knihovny, zde vygenerované ukázky v nejnovějším AdobeReaderu se při zavírání ptají na změny. To je v novějších verzí odstraněno.

Takže jeho PDF engine podporuje text, grafiku nebo bitmapy.

  • umí i emulovat kreslení na TCanvas, takže stávající kód pro kreslení se bude lehčeji převádět
  • umožňuje "přímé" vytváření PDF
  • podporuje Delphi 7-2010, včetně unicode
  • vkládá do výsledného souboru TrueType fonty (i jen použitou část)!
  • automatická komprese (a jako bonus je součástí zdrojáků čtení a zápis ZIP - ale bez hesla)
  • MPL/GPL/LGPL
  • celé je to v podstatě v jednom souboru

PDF přes TCanvas

procedure TForm1.btn1Click(Sender: TObject);
var
  i:Integer;
  oImg: TPdfImage;
  ImgName: PDFString;
begin
  with TPdfDocumentGDI.Create do
  try
    AddPage;
    with VCLCanvas do
    begin
      for i := 1 to 9 do
      begin
        Font.Name := 'Times new roman';
        Font.Size := 35;
        Font.Style := [fsBold,fsItalic];
        Font.Color := RGB(80, 120, 50+i*20);
        TextOut(100, 100 + i*40,'Příliš žluťoučký kůň');
      end;
// Draw(100, 200, img1.Picture.Graphic, 20); //obrazek takto 
    end;
//nebo obrazek primo - lepsi podpora transparentnosti
//img1 je TImage na formuláři
    oImg := TPdfImage.Create(Canvas.Doc, img1.Picture.Graphic);
    ImgName := 'img1';
    Canvas.Doc.AddXObject(ImgName, oImg);
    Canvas.DrawXObject(100, 200, img1.Width, img1.Height, ImgName);
    SaveToFile('testvcl.pdf');
  finally
    Free;
  end;
end;

Výsledné testvcl.pdf.

PDF Delphi

PDF přímo

var
  oImg: TPdfImage;
  ImgName: PDFString;
begin
  with TPdfDocument.Create do
  try
    AddPage;
    Canvas.SetFont('georgia',12,[fsItalic,fsBold]);
    Canvas.TextOut(100, 700, 'Příliš žluťoučký kůň');
    Canvas.TextOut(100, 680, 'Delphi.cz - via Synopse PDF engine');

    oImg := TPdfImage.Create(Canvas.Doc, img1.Picture.Graphic);
    ImgName := 'img1';
    Canvas.Doc.AddXObject(ImgName, oImg);

    Canvas.DrawXObject(100, 500, img1.Width, img1.Height, ImgName);

    SaveToFile('testdirect.pdf');
  finally
    Free;
  end;

Výsledné testdirect.pdf.

PDF Delphi

Oba příklady jsou vytvořeny z Delphi 2010, tj. unicode Delphi (pro jistotu).

Datum: 2010-05-10 22:08:00 Tagy: grafika, open source, komponenty, VCL, PDF, super

Komponenty