使用perl模块PDF :: API2创建PDF时缩进错位

时间:2016-04-22 13:30:46

标签: perl pdf

我有一个数组中的数据,我可以使用PDF :: API2将数据写成pdf格式。但问题是在写入过程中,缩进(空格)与数组中的不完全相同

以数组格式:

 ATOM      1  N   MET A   0      24.277   8.374  -9.854  1.00 38.41           N   0.174

 ATOM     38  OE2 GLU A   4      37.711  19.692 -12.684  1.00 28.70           O   0.150

PDF格式:

 ATOM  1 N MET A 0 24.277 8.374-9.8541.0038.41    N 0.174

 ATOM 38 OE2  GLU A 4 37.71119.692-12.684  1.00 28.70    O 0.150 

我的代码:

my $pdf  = PDF::API2->new(-file => "/home/httpd/cgi-bin/new.pdf");
$pdf->mediabox("A4");
my $page = $pdf->page;
my $fnt = $pdf->corefont('Arial',-encoding => 'latin1');
my $txt = $page->text;
$txt->textstart;
$txt->font($fnt, 8); 
$txt->translate(100,800);
$j1=0;
for($i=0;$i<=scalar(@ar_velz);$i++) #Data input to write in PDF
{
$txt->lead(10);
$txt->section("$ar_velz[$i]", 500, 800);    #writing each array index 
if($j1 == 75)                   #To create a page for every 75 lines 
{
$page = $pdf->page;
$fnt = $pdf->corefont('Arial',-encoding => 'latin1');
$txt = $page->text;
$txt->textstart;
$txt->font($fnt, 8); 
$txt->lead(10);
$txt->translate(100,800);
$j1=0;
}
$j1++;
}
$txt->textend;
$pdf->save;
$pdf->end( );

}

1 个答案:

答案 0 :(得分:4)

这是因为 Arial 不是mono-spaced font。所有字符都有不同的宽度。特别是空白区域通常不是很宽。如果您希望间距保持不变,则需要使用单倍间距font,例如Courier

$fnt = $pdf->corefont('Courier',-encoding => 'latin1');

这个事实也是PDF :: API2 :: Content类中PDF :: API2 includes a method advancewidth的原因。您可以使用它来检查文本块是否太宽而无法放入一行,并在需要时手动包装它。当然对于你的桌子来说,这没什么用。

单倍间距字体的替代方法可能是使用PDF::Table,它可以在PDF :: API2文档中创建表。