html HotPDF Canvas Rysuj | losLab Software Development Blog

Artykuł techniczny

HotPDF Canvas Rysuj

· Oprogramowanie PDF

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]