Свойство VCLCanvasSize компонента TPdfDocumentGDI меняет свое расширение после добавления второй страницы - PullRequest
0 голосов
/ 19 января 2019

Мне нужно напечатать в PDF-файле длинный список статей. Я использую компонент TPdfDocumentGDI, как показано ниже:

try  
  Pdf := TPdfDocumentGDI.Create(); 
  Artic := 1;                         // order number of article to print
  with Pdf do begin
    Inizio:                           // label
    AddPage;                          // new page
    with VCLCanvas do begin
      DefaultPaperSize := psA4;
      DefaultPageHeight := 72 * 160;
      DefaultPageWidth := 72 * 150;

 //         Rg := VCLCanvasSize.cx div 70;  
 //              // Rg was 11, at the second lap becomes 205
 //         Cl := VCLCanvasSize.cy div 110; 

      if Artic = 1 then begin             // only on the first page            
         Rg := VCLCanvasSize.cx div 70;   // Rg value remains 11
         Cl := VCLCanvasSize.cy div 110;
         Font.Name := 'Times New Roman'; 
         Font.Size := 8;
      end;
      for I := Artic to 100 do begin
        if I = 60 then begin        // the page contains 60 row written
           Artic := I;              // Artic is last number of "I"
           goto Inizio;     // the flow return to begin (*with Pdf do...*)
        end;
        ...
        TextOut( Cl*3, Rg*5, 'Article number '+IntToStr(I) );
        ...
      end;
    end;
    Pdf.SaveToFile(Filename);  
  end;
finally
  Pdf.Free;
end;

Код не "элегантный", но работает. На входе VCLCanvasSize.cx = 793 и .cy = 1123, Rg = 11 (высота строки); когда напечатанная строка 60, тогда мне нужно добавить страницу в PDF, а затем перейти к метке Inizio; здесь процедура добавляет новую страницу; если я перечитываю значение VCLCanvasSize.cx, это ... 14400! (.cy = 15360), тогда значение Rg становится 205, и все становится деформированным (только на следующих страницах к первой). Почему свойство VCLCanvasSize меняет свои значения? Вторая страница должна пересекаться с первой страницей, третья - со второй и так далее, я полагаю, или нет? не DefaultPageHeight и PageWidth планируют достаточность VCLCanvasSize? Спасибо за ответ.

...