Ten przykładowy komponent HotPDF demonstruje, jak tworzyć rysunki PDF w stylu wektorowym przy użyciu tego samego przepływu pracy TCanvas, którego programiści Delphi używają już w aplikacjach VCL. Zamiast traktować dane wyjściowe PDF jako oddzielny model rysunku, w przykładzie zapisano tekst i kształty za pomocą HotPDF.Canvas, a następnie zapisano wynik jako dokument PDF.
Przykład jest przydatny, gdy aplikacja ma już wykresy, diagramy, podglądy lub niestandardowy kod renderowania kontroli oparty na TCanvas. Podstawowy wzorzec jest prosty: utwórz THotPDF, przypisz plik wyjściowy, wywołaj BeginDoc, skonfiguruj stan kanwy, narysuj zawartość i zakończ plik EndDoc.
W poniższym kodzie pętla rysunkowa renderuje trzy grupy kolorowych kształtów. Każda grupa używa tego samego układu współrzędnych i zmienia tylko rysowany element podstawowy: Rectangle, Ellipse lub RoundRect. Dzięki temu jest to kompaktowe odniesienie do testowania kolorów płótna, zachowania wypełnienia, rozmieszczenia tekstu i układu strony w wygenerowanym PDF.
Zakreślacz składni Urvanov v2.9.1|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
program CanvasDraw; {$APPTYPE CONSOLE} uses {$IFDEF VER230} System.SysUtils, System.Classes, Vcl.Graphics, {$ELSE} SysUtils, Classes, Graphics, {$ENDIF} HPDFDoc; var I, Y: Integer; HotPDF: THotPDF; begin HotPDF:= THotPDF.Create(nil); try Randomize; HotPDF.AutoLaunch := true; HotPDF.FileName := 'CanvasDraw.pdf'; HotPDF.BeginDoc; // Create PDF file HotPDF.Canvas.Font.Size := 14; // Set canvas font size I :=20; Y := 60; HotPDF.Canvas.TextOut(10, 30, 'Canvas Rectangles'); // Print text while I <= 700 do begin // Draw colour HotPDF.Canvas.Brush.Color := random($FFFFFF); // rectangles HotPDF.Canvas.Rectangle(I, Y, I+90, Y + 160); Inc(I, 30); Inc( Y, 3 ); end; I :=20; Y := 350; HotPDF.Canvas.TextOut(10, 320, 'Canvas Ellipses'); // Print text while I <= 700 do // Draw colour begin // ellipses HotPDF.Canvas.Brush.Color := random($FFFFFF); HotPDF.Canvas.Ellipse(I, Y, I+90, Y + 160); Inc(I, 30); Inc( Y, 3 ); end; I :=20; Y := 680; HotPDF.Canvas.TextOut(10, 650, 'Canvas RoundRects'); // Print text while I <= 700 do begin HotPDF.Canvas.Brush.Color := random($FFFFFF); // Draw colour HotPDF.Canvas.RoundRect(I, Y, I+90, Y + 160, 20, 20); // roundrects Inc(I, 30); Inc( Y, 3 ); end; HotPDF.EndDoc; // Close PDF file finally HotPDF.Free; end; end. |
Co pokazuje przykład
- Jak zainicjować THotPDF dla zadania generowania Delphi PDF w stylu konsoli.
- Jak używać HotPDF.Canvas do tekstu i podstawowego rysunku geometrycznego.
- Jak kolory pędzla wpływają na wypełnione kształty w wygenerowanym PDF.
- W jaki sposób powtarzające się współrzędne mogą tworzyć warstwowy wynik wizualny bez zrzutów ekranu z bitmapami.
Uwagi dotyczące wdrożenia
Strona PDF jest finalizowana dopiero po wywołaniu EndDoc, więc kod produkcyjny powinien zachować blok try/finally przez cały czas życia komponentu i unikać pozostawiania częściowo zapisanego pliku w przypadku niepowodzenia rysowania. W przypadku deterministycznych wyników testu zastąp Kolory losowe i losowe stałymi wartościami kolorów.
Rysunek PDF oparty na Canvas sprawdza się najlepiej w przypadku raportów, nakładek, diagramów i generowanych formularzy, gdzie wydruk powinien pozostać ostry przy każdym poziomie powiększenia. Jeśli rysunek źródłowy zależy od rozdzielczości ekranu lub czcionek specyficznych dla urządzenia, przed wysyłką sprawdź ostateczny PDF w czystym systemie.
[Czas formatowania: 0,0019 sekundy]