我正在尝试使用Delphi使用Synopse SynPDF库创建PDF文档。我需要能够动态更改纸张大小以适应我正在创建的文档。纸张尺寸的高度需要在11英寸到100英寸以上的任何位置进行更改。我还想将图像的分辨率设置为从每英寸300像素到每英寸600像素。这就是我的测试。
lPdf := TPdfDocumentGDI.Create;
try
lPdf.ScreenLogPixels:=600;
lPdf.DefaultPageHeight := lPdf.ScreenLogPixels * 50; // Since ScreenLogPixels holds the number of pixels per inch this should give me a 50 inch long page.
lPdf.DefaultPageWidth := lPdf.ScreenLogPixels * 8; // Same here with Page being 8 inches wide.
// When viewing the document in Adobe Reader the page height and width 66.67 x 200.00 with nothing displayed
// If I comment out the ScreenLogPixels line the page size becomes 10.67 x 66.67 with a pixel count of 768 x 4800 with the proper text on the document.
lPage := lPDF.AddPage;
lPdf.VCLCanvas.Brush.Style:=bsClear;
MyY:=300;
lPDF.VCLCanvas.TextOut(100, 100, 'Width = ' + IntToStr(lPage.PageWidth) +
' Height = ' + IntToStr(lPage.PageHeight));
for MyX := 1 to 400 do begin
MyXLoc:=(MyX*120) mod (lPage.PageWidth);
MyString:=IntToStr(MyX);
lPDF.VCLCanvas.TextOut(MyXLoc, MyY, Mystring);
lPDF.VCLCanvas.Font.Size:= lPDF.VCLCanvas.Font.Size+4;
lPDF.VCLCanvas.Rectangle(MyXLoc, MyY, MyXLoc+lPDF.VCLCanvas.TextWidth(MyString), MyY+lPDF.VCLCanvas.TextHeight(MyString));
MyY := MyY + lPDF.VCLCanvas.TextHeight(MyString);
end;
lPdf.SaveToFile('c:\Syntest.pdf');
finally
lPdf.Free;
end;
答案 0 :(得分:1)
在PDF中,所有位置和大小都存储在称为PDF单元的逻辑值中。 1 PDF单位相当于1/72英寸。
DefaultPageHeight
和DefaultPageWidth
是PDF单位的值,因此是1/72英寸。
所以对于50' * 8'页面,你可以写:
lPdf.DefaultPageHeight := 72 * 50;
lPdf.DefaultPageWidth := 72 * 8;
然后lPdf.VCLCanvas
中可用的VCL画布将具有不同的坐标系,具体取决于lPdf.ScreenLogPixels
。
因此,当您在lPdf.VCLCanvas
中绘制内容时,请确保使用正确的坐标大小,即通过lPdf.VCLCanvasSize
值。