synopse pdf使用Delphi更改纸张尺寸

时间:2014-06-25 16:09:40

标签: delphi pdf

我正在尝试使用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;

1 个答案:

答案 0 :(得分:1)

在PDF中,所有位置和大小都存储在称为PDF单元的逻辑值中。 1 PDF单位相当于1/72英寸。

DefaultPageHeightDefaultPageWidth是PDF单位的值,因此是1/72英寸。

所以对于50' * 8'页面,你可以写:

 lPdf.DefaultPageHeight := 72 * 50; 
 lPdf.DefaultPageWidth := 72 * 8;     

然后lPdf.VCLCanvas中可用的VCL画布将具有不同的坐标系,具体取决于lPdf.ScreenLogPixels

因此,当您在lPdf.VCLCanvas中绘制内容时,请确保使用正确的坐标大小,即通过lPdf.VCLCanvasSize值。