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
21 end;
22
23
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 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.

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