Synopse PDF engine

vložil Radek Červinka 10. května 2010 23:08

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).

Tagy: , , , , ,

Komponenty

Komentáře

1.6.2010 12:04:08 #

k

Perfektní , děkuji za článek...

k

11.6.2011 1:17:33 #

RadekK

Zdravím, moc pěkné, super článek, to by se mi moc hodilo :-)

Začínám už nějaký čas :-) s delphi, ale bohužel se mi to Synopse PDF engine nedaří použít, po vložení synpdf.pas jako unit do programu to při kompilaci stále hlásí chybu ohledně synLz (nejspíš nemám synLz.pas), ale to se mi nedaří najít.

Prosím moc o pomocc s implementací ... já potřebuju generovat pdf s textem + oddělené čárou toť vše. Nemáte prosím nějaký funkční příklad celého projektu?

Předem moc děkuji

RadekK

11.6.2011 1:38:40 #

Radekc

Staci stahnout cely balik, ten soubor tam urcite bude.

Radekc

30.6.2011 20:26:45 #

konecny

Tak ja mam ten samy problem a v tom balicku teda tento soubor neni

konecny

30.6.2011 22:30:24 #

Radekc

Myslel jsem balikem
http://synopse.info/files/SynopseSQLite3.zip , tam to je. Ted jsem to zkousel.

Radekc

30.6.2011 22:40:08 #

konecny

jj  v ydim, ale stejne mi to nejde..... uz se stim trapim hrozne dlouho... porebuju udelat obycejny formular, kde bude par editu a po zmacknuti na button se vygeneruje pdf soubor v urcite velikosti a text z editu bude rozlozen podle souradnic a typem pisma co zadam... ale porad nemuzu rozchodit ani export jednoho editu do pdf, porad mi to nehcce fungovat a ani nemuzu nejak nainstalovat komponenty.... pokud bych te mohl poprosit a mohl by ses mi na to podivat treba pres teamviewer na PC na nastaveni delphi, byl bych ti moooc vdecny, pokud by to slo a mohl bys me kontaktovat tedka na mail konecnyj@seznam.cz bylo by to super. diky moc

konecny

17.8.2011 14:33:21 #

Marty

Dobrý den,
nevíte někdo jak očíslovat stránky, když předem nevím kolik jich bude? tzn. když vygeneruju 3 strany, tak bych se pak chtěl dostat na tu první a dopsat do ní někam dolu do zápatí '1 z 3' pak na tu druhou '2 z 3' a na tu poslední '3 z 3'.
Děkuji za reakce
Marty

Marty

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců