是否可以添加标题(带有文本和一个图像)和页脚(带页码)和图像。我在下面写了代码来创建一个显示png图像的PDF文档。
如果可以使用任何其他模块轻松完成,请建议。非常感谢您回复示例代码。
use strict;
use PDF::API2::Lite;
use Getopt::Long;
my $outfile;
my $path;
my $options = GetOptions( "outfile=s" => \$outfile,
"images=s" => \$path,);
my @images = sort glob("$path") or die "No Files\n";
my $pdf = PDF::API2::Lite->new();
for my $png ( sort @images ) {
my $image = $pdf->image_png( "$png" );
$pdf->page(1150,450);
$pdf->image($image, 10, 10);
}
$pdf->saveas( $outfile );
答案 0 :(得分:4)
等待一天的SO节省了10分钟阅读模块文档。太空了,这并不困难。
use PDF::API2 qw();
{
my $pdf = PDF::API2->open('input.pdf');
for my $index (1 .. $pdf->pages) {
my $page = $pdf->openpage($index);
my $txt = $page->text;
$txt->textlabel(300, 700, $pdf->corefont('Helvetica Bold'), 12, 'some Header text');
my $gfx = $page->gfx;
$gfx->image($pdf->image_png('Header_image.png'), 150, 700);
$txt->textlabel(300, 100, $pdf->corefont('Helvetica Bold'), 12, "Page: $index");
}
$pdf->saveas('output.pdf');
$pdf->end;
}
答案 1 :(得分:4)
PDF::API2是我做这类事情的主力。
一旦我需要对现有PDF文档进行任何上层或重新处理,我几乎总是会使用importPageIntoForm
方法。
作为一般解决方案,我逐页创建一个新PDF,导入我想要放置的元素,然后添加其他文本或图形。
#!/usr/bin/perl
use warnings; use strict;
use PDF::API2;
my $infile = shift (@ARGV);
my $outfile = shift (@ARGV);
die "usage $0: infile outfile"
unless $infile && $outfile;
my $pdf_in = PDF::API2->open($infile);
my $pdf_out = PDF::API2->new;
foreach my $pagenum (1 .. $pdf_in->pages) {
my $page_in = $pdf_in->openpage($pagenum);
#
# create a new page
#
my $page_out = $pdf_out->page(0);
my @mbox = $page_in->get_mediabox;
$page_out->mediabox(@mbox);
my $xo = $pdf_out->importPageIntoForm($pdf_in, $pagenum);
#
# lay up the input page in the output page
# note that you can adjust the position and scale, if required
#
my $gfx = $page_out->gfx;
$gfx->formimage($xo,
0, 0, # x y
1); # scale
#
# add page number text
#
my $txt = $page_out->text;
$txt->strokecolor('#000000');
$txt->translate(
my $_x = 200,
my $_y = 50
);
my $font = $pdf_out->corefont('Courier');
$txt->font($font, 12);
$txt->text( 'Page: '.$pagenum );
#
# add header image
#
my $header_img = $pdf_out->image_png('SomeHeader.png');
$gfx->image($header_img, 0, 400);
}
$pdf_out->saveas($outfile);
答案 2 :(得分:1)
请改为PDF::API2::Simple
。这个CPAN模块提供了一些方便的帮助方法PDF::API2
,包括页眉和页脚。
这是一个简单的页眉/页脚示例:
use 5.012;
use warnings;
use PDF::API2::Simple;
our $PageNo;
my $pdf = PDF::API2::Simple->new(
file => 'file.pdf',
header => \&header,
footer => \&footer,
);
$pdf->add_font('Verdana');
for my $page (1..3) {
$pdf->add_page;
$pdf->image( 'image.png', x => 300, y => 300 );
}
$pdf->save;
sub header { shift->text( 'Header text here' ) }
sub footer { shift->text( 'page: ' . ++$PageNo, x => 10, y => 10 ) }
/ I3az /
答案 3 :(得分:1)
我已经在网上查看了有关使用PDF :: AP12的详细信息,但细节非常明显。在CPAN网站上查看,但没有说明在哪里阅读文档,那么您在哪里可以找到详细信息? (目前,CPAN命令行甚至无法识别PDF :: AP12 =或AP13 =作为合法模块!并且不能完全掌握下载tar球并手动安装到草莓perl中)
我对此感到好奇" importPageIntoForm" item:如果我使用DTP程序设计了一个主PDF页面(用于标签生成,即3宽8深)并在每个单元格的右侧放置一个虚拟图形(?),我是否能够使用这个来交换它们? (如果你愿意,可以在线"邮件合并"用个人QR码替换图片c / o GD :: BARCODE :: QRcode)
或者最好是从头开始用主程序创建每个页面吗?