我使用的是CAM::PDF
合并多个PDF文件。 这工作得很好。 现在我需要使用在每一页上添加印记PDF::API2
。 这对于一些网页能正常工作,但不是为别人。
与wkhtmltopdf创建的PDF文件似乎都有自己的坐标系翻转和缩放关闭为好。
当通过网页运行我补充这样的邮票:
my $pdf2 = PDF::API2->open_scalar($pdf_data);
my $page_count = $pdf2->pages;
for my $i ( 1 .. $page_count ) {
my $page = $pdf2->openpage($i);
my $content = $page->gfx();
my $text = $page->text();
$content->linewidth(2);
$content->rectxy( 5, 10, 140, 40 );
$content->stroke;
my $font = $pdf2->ttfont('calibri.ttf');
$text->scale( 1.0, 1.0 );
$text->font( $font, 12 );
$text->translate( 10, 14 );
$text->text( sprintf( 'PAGINA %d VAN %d', $i, $page_count ) );
$text->translate( 10, 26 );
$text->text('some ID');
}
my $pdf_data = $pdf2->stringify;
现在,来自wkhtmltopdf页面有一个小框,在左上角(但页边距内)甚至更细小的文字和它的镜像。 非wkhtmltopdf页面将与在左下角(忽略页边距)适当大小的文本适当大小的盒子。
使用$content->scale
和$content->rotate(180)
我可以正确显示由wkhtmltopdf创建的页面的邮票。 但随后的其他页面都搞砸了。
那么,有没有什么办法,以确保每个文件具有相同的方向,旋转和缩放的所有网页上?
++ Htbaa已经回答了如何解决这个问题。
我有机会来看看wkhtmltopdf。 这个答案说明为什么它的输出导致的问题。
我写了一个简单的/tmp/hw.html
<html>
<body>hello world!</body>
</html>
然后创建并解压缩的PDF:
% wkhtmltopdf --version
Name:
wkhtmltopdf 0.9.9
...
% xvfb-run wkhtmltopdf /tmp/hw.html /tmp/hw.pdf
% pdftk /tmp/hw.pdf output /tmp/hw1.pdf uncompress
下面是页面内容(对象8)的模样。
8 0 obj <</Length 751>>stream /GSa gs /CSp cs /CSp CS 0.060000000 0 0
-0.060000000 28.3200000 813.679999 cm q q Q Q q q Q q /CSp cs 0 0 0
scn /GSa gs Q Q q 0 0 m 8963.99983 0 l 8963.99983 345.507488 l 0
345.507488 l 0 0 l h W* n q /CSp cs 0 0 0 scn /GSa gs /CSp cs 1 1 1
scn /GSa gs q 9.59743022 0 0 9.59743022 0 0 cm 0 0 934 36 re f Q Q q
9.59743022 0 0 9.59743022 0 0 cm /CSp cs 0 0 0 scn /GSa gs 0 0 0 SCN 0
w 2 J 2 j [] 0 d q /CSp cs 0 0 0 scn /GSa gs BT /F7 16 Tf 1 0 0 -1 0 0
Tm 8 -24 Td <0001> Tj 9 0 Td <0002> Tj 9 0 Td <0003> Tj 4 0 Td <0003>
Tj 4 0 Td <0004> Tj 9 0 Td <0005> Tj 4 0 Td <0006> Tj 12 0 Td <0004>
Tj 9 0 Td <0007> Tj 5 0 Td <0003> Tj 4 0 Td <0008> Tj 9 0 Td <0009> Tj
ET Q Q Q q q 12 0 0 12 0 0 cm /CSp cs 0 0 0 scn /GSa gs 0 0 0 SCN 0 w
2 J 2 j [] 0 d Q Q
endstream endobj
答案是在页面的第一个指令/GSa gs
是设置图形状态,第一之前发生q
指令(保存图形状态)。
所以页面被遗忘在凌乱的图形状态。 当进一步的内容,然后通过PDF :: API2添加到PDF,它使用的是改变状态。
在回答中指出@snoopy似乎解决我遇到的问题。 印章PDF /叠加PDF格式的文本和图像大小在所有页面大小相同。
文章来源: Manipulating a PDF file with different rotations and scaling with Perl's PDF::API2