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 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.
Oba příklady jsou vytvořeny z Delphi 2010, tj. unicode Delphi (pro jistotu).