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

    1procedure TForm1.btn1Click(Sender: TObject);
    2var
    3  i:Integer;
    4  oImg: TPdfImage;
    5  ImgName: PDFString;
    6begin
    7  with TPdfDocumentGDI.Create do
    8  try
    9    AddPage;
   10    with VCLCanvas do
   11    begin
   12      for i := 1 to 9 do
   13      begin
   14        Font.Name := 'Times new roman';
   15        Font.Size := 35;
   16        Font.Style := [fsBold,fsItalic];
   17        Font.Color := RGB(80, 120, 50+i*20);
   18        TextOut(100, 100 + i*40,'Příliš žluťoučký kůň');
   19      end;
   20// Draw(100, 200, img1.Picture.Graphic, 20); //obrazek takto 
   21    end;
   22//nebo obrazek primo - lepsi podpora transparentnosti
   23//img1 je TImage na formuláři
   24    oImg := TPdfImage.Create(Canvas.Doc, img1.Picture.Graphic);
   25    ImgName := 'img1';
   26    Canvas.Doc.AddXObject(ImgName, oImg);
   27    Canvas.DrawXObject(100, 200, img1.Width, img1.Height, ImgName);
   28    SaveToFile('testvcl.pdf');
   29  finally
   30    Free;
   31  end;
   32end;

Výsledné testvcl.pdf.

PDF Delphi

PDF přímo

    1var
    2  oImg: TPdfImage;
    3  ImgName: PDFString;
    4begin
    5  with TPdfDocument.Create do
    6  try
    7    AddPage;
    8    Canvas.SetFont('georgia',12,[fsItalic,fsBold]);
    9    Canvas.TextOut(100, 700, 'Příliš žluťoučký kůň');
   10    Canvas.TextOut(100, 680, 'Delphi.cz - via Synopse PDF engine');
   11
   12    oImg := TPdfImage.Create(Canvas.Doc, img1.Picture.Graphic);
   13    ImgName := 'img1';
   14    Canvas.Doc.AddXObject(ImgName, oImg);
   15
   16    Canvas.DrawXObject(100, 500, img1.Width, img1.Height, ImgName);
   17
   18    SaveToFile('testdirect.pdf');
   19  finally
   20    Free;
   21  end;

Výsledné testdirect.pdf.

PDF Delphi

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


Nabízíme Delphi školení na různá témata, primárně ve Vaší firmě.

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

Partial English version.

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 nebo burzy práce).

Pokud chcete podpořit tento server libovolnou částkou, můžete použít PayPal. Moc děkuji.

Delphi Certified Developer

O Delphi.cz

Delphi je jediný moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64 , Mac OSX a na iPhone a Android (s výhledem na další platformy díky FireMonkey) na současném trhu (včetně Windows 8.1).

V současnosti je světová komunita přes dva miliónů vývojářů.

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.

Anketa

Poslední komentáře

Comment RSS