Мне нужно напечатать в 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?
Спасибо за ответ.