Perl的PDF::API2
可以在页面上放置文字,如下例所示:
$pdf = PDF::API2->new();
$page = $pdf->page();
$page->mediabox('A4');
$page->gfx->textlabel(50, 50, $pdf->corefont('Helvetica'), 10, "Hello world");
$pdf->saveas('test.pdf');
但我找不到任何多行文字的文档,比如直观但不起作用的字符串"Hello\nworld"
。
PDF中换行符的正确符号是什么?
是否有增加/减少行间距的方法?
答案 0 :(得分:3)
也许模块的POD坏了,看看来源。然后,例如
use strict;
use warnings;
use PDF::API2;
my $pdf = PDF::API2->new();
my $page = $pdf->page();
$page->mediabox('A4');
my $content = $page->text();
$content->translate(50, 750);
$content->font($pdf->corefont('Helvetica'), 24);
$content->lead(30);
$content->section("What is the proper symbol for a newline in the PDF?\nIs there a method to increase/decrease line spacing?\n" x 5, 400, 500);
$pdf->saveas('test.pdf');
此示例显示长线自动换行,换行处理和前导(行间距)设置。
关于评论请求的更新:)。你可以像鲍罗丁建议的那样,打电话给'标准'您的文字textlabel
在换行符上拆分并手动更新文字位置,这并不困难。但是,TMTOWTDI,你可以使用我下面的快速(和脏)解决方案 - section
仅用于处理换行符,使用“无限”来防止自动换行。 '文本框&#39 ;.我的sub
调用语义类似于textlabel
。或者您可以添加对颜色,对齐等的支持,并可能使其成为您班级中的正确方法。
use strict;
use warnings;
use PDF::API2;
my $s = <<'END';
What is the proper symbol for a newline in the PDF?
Is there a method to increase/decrease line spacing?
END
sub super_textlabel {
my ($page, $x, $y, $font, $size, $text, $rotate, $lead) = @_;
my $BIG = 1_000_000;
$page->gfx()->save();
my $txt = $page->text();
$txt->font($font, $size);
$txt->lead($lead);
$txt->transform(-translate => [$x, $y], -rotate => $rotate);
$txt->section($text, $BIG, $BIG);
$page->gfx()->restore();
}
my $pdf = PDF::API2->new();
my $page = $pdf->page();
$page->mediabox('A4');
super_textlabel($page, 50, 750, $pdf->corefont('Helvetica'), 12, $s, 0, 16);
super_textlabel($page, 200, 200, $pdf->corefont('Times'), 16, $s, 45, 24);
super_textlabel($page, 500, 400, $pdf->corefont('Courier'), 10, $s, 90, 50);
$pdf->saveas('test.pdf');
答案 1 :(得分:1)
PDF没有“线条”的概念。它只是将文本放置在指定的字体和大小的给定起始坐标处。由您决定必须拆分字符串的位置以及每个后续行的坐标应该是什么。
PDF::API2::Content
类确实有distance
,cr
和nl
方法,只需将笔移动到上一个起点加上给定的偏移量。