技術文章

HotPDF 畫布繪製

· PDF 軟體

此 HotPDF 元件示例演示瞭如何使用與 VCL 應用程式中 Delphi 開發人員已經使用的相同 TCanvas 工作流程,建立向量風格的 PDF 圖形。該示例不將 PDF 輸出視為獨立的繪圖模型,而是通過 HotPDF.Canvas 寫入文本和形狀,然後將結果儲存為 PDF 文件。

當應用程式已經具有基於 TCanvas 的圖表、圖表、預覽或自定義控制元件渲染程式碼時,此示例非常有用。核心模式很簡單:建立 THotPDF,指定輸出檔案,呼叫 BeginDoc,配置畫布狀態,繪製內容,然後使用 EndDoc 完成檔案。

在下面的程式碼中,繪圖迴圈渲染了三組彩色形狀。每組使用相同的座標系統,並且僅更改正在繪製的原始圖形:矩形、橢圓或圓角矩形。這使其成為一個緊湊的參考,用於測試生成的 PDF 中的畫布顏色、填充行為、文本放置和頁面佈局。

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.

此示例展示的內容

  • 如何初始化 THotPDF,以執行基於控制台的 Delphi PDF 生成任務。
  • 如何使用 HotPDF.Canvas 進行文本和基本的幾何圖形繪製。
  • 筆刷顏色如何影響生成的 PDF 中填充形狀的外觀。
  • 如何通過重複座標構建分層視覺輸出,而無需點陣圖螢幕截圖。

實現說明

PDF 頁面的最終化僅在呼叫 EndDoc 後完成,因此生產程式碼應在元件的生命週期周圍保留 try/finally 塊,以避免在繪圖失敗時留下部分寫入的檔案。為了獲得可預測的測試輸出,將 Randomize 和隨機顏色替換為固定顏色值。

基於 Canvas 的 PDF 繪圖最適合於報告、疊加層、圖表和生成的表單,這些輸出應在任何縮放級別下保持清晰。如果源繪圖依賴於螢幕 DPI 或裝置特定的字型,請在釋出之前,在乾淨的系統上驗證最終的 PDF 檔案。