我使用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创建的页面上正确显示标记。但其他页面搞砸了。
那么,有没有办法确保每个文档在所有页面上具有相同的方向,旋转和缩放?
答案 0 :(得分:2)
++ 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时,它正在使用已更改的状态。
答案 1 :(得分:1)
@snoopy指出的answer似乎解决了我遇到的问题。 stamp-pdf / overlay-pdf的文本和图像大小在所有页面上都是相同的大小。