2010-06-01 88 views
5

是否可以在图像中添加标题(包含文本和图像)和页脚(包含页码)。我写下面的代码来创建一个显示png图像的PDF文档。如何使用PDF :: API2 :: Lite添加页眉,页脚和图像?

如果这可以很容易地与任何其他模块,请建议。真正明白反应与示例代码。

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); 

回答

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; 
} 
+0

感谢Daxim:这段代码是编辑现有的文档。你能建议我如何使用它来创建带有图像的新文档 – Space 2010-06-04 13:02:26

+0

使用['new'构造函数](http://p3rl.org/PDF::API2#GENERIC_METHODS)。请阅读文档。 – daxim 2010-06-04 15:04:44

+0

感谢daxim:你能否请我也建议我如何添加PDF文档的属性。 – Space 2010-06-09 07:08:14

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/

4

PDF::API2是我对这样的事情主力。

一旦我需要对现有的PDF文档进行任何上传或重新处理,我几乎总是会使用importPageIntoForm方法。

作为一个通用的解决方案,我创建一个新的PDF,逐页,导入我想要铺设的元素,然后添加额外的文本或图形。

#!/usr/bin/perl 
use common::sense; 

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); 
+0

这是一个非常好的方法 - 而不是修改PDF的地方,使用它作为模板来创建一个新的PDF。感谢您告诉我们关于importPageIntoForm()! – 2011-08-31 09:24:03

1

我已经在线查看关于使用PDF :: AP12的详细信息,但细节非常详细。在CPAN网站上看过,但是没有说明在哪里阅读文档,那么您在哪里找到详细信息? (目前,CPAN命令行甚至不会识别PDF :: AP12 =或AP13 =作为合法模块!而且还没有完全掌握下载tar文件并手动安装到草莓Perl中)

我很好奇这个“importPageIntoForm”项目:如果我设计了一个使用DTP程序的主PDF页面(对于标签制作,即3宽8深),并在每个单元的右侧放置了一个虚拟图形(?),我是否可以交换这些出来用这个? (如果你喜欢,一个在线“邮件合并”替换图形与个人QR码C/O GD :: BARCODE :: QRcode)

或者最好从头开始创建每个页面与主程序?

+0

这是PDF :: API2不是PDF :: AP12 – 2016-12-17 22:56:20

相关问题