PDF :: API2中的换行符和行间距

时间:2014-11-19 23:39:12

标签: perl pdf cpan

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中换行符的正确符号是什么?

是否有增加/减少行间距的方法?

2 个答案:

答案 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类确实有distancecrnl方法,只需将笔移动到上一个起点加上给定的偏移量。