我有一个数组中的数据,我可以使用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( );
}
答案 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文档中创建表。