2010-06-01 27 views
5

Görüntülerle birlikte başlık (metin ve bir resim) ve altbilgi (sayfa numarasıyla) eklenebilir. Png görüntülerini gösteren bir PDF belgesi oluşturmak için aşağıdaki kodu yazdım.PDF :: API2 :: Lite kullanarak üstbilgi, resim içeren altbilgi nasıl eklenir?

Bu, başka bir modülle kolayca yapılabilirse, lütfen öneri verin. Örnek kodla yanıtı gerçekten takdir edin.

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

cevap

4

SO'da bir gün beklemek, modül belgelerini okurken 10 dakika sizi kurtardı. Bu zor değil, Uzay.

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

Teşekkürler Daxim: Bu kod varolan belgeyi düzenlemektir. Resimlerle yeni dokümanlar oluşturmak için nasıl kullanabileceğimi önerir misiniz? – Space

+0

['new' constructor] 'ı kullanın (http://p3rl.org/PDF::API2#GENERIC_METHODS). Lütfen dokümanlar okuyun. – daxim

+0

Teşekkürler daxim: Ayrıca pdf doc'a nasıl özellik ekleyebileceğimi de önerebilir misiniz? – Space

1

Bunun yerine PDF::API2::Simple'a bakın. Bu CPAN modülleri, üstbilgiler ve altbilgiler dahil olmak üzere PDF::API2 civarında bazı kullanışlı yardımcı yöntemler sağlar.

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 şey bu tür için benim beygir:

Burada basit çalışma üst bilgi/alt örneğidir.

Ve mevcut bir PDF belgesinin düzenlenmesi veya yeniden işlenmesi gerektiğinde hemen her zaman importPageIntoForm yöntemini kullanacağım.

Genel bir çözüm olarak, yeni bir PDF oluşturuyorum, sayfaya sayfa, yerleştirmek istediğim öğeleri içe aktardıktan sonra ek metin veya grafikler ekliyorum.

#!/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

Bu gerçekten harika bir yaklaşım - pdf'yi yerinde değiştirmek yerine, yeni bir pdf oluşturmak için şablon olarak kullanmak yerine. Bize importPageIntoForm() hakkında bilgi için teşekkürler! –

1

Ben PDF kullanarak :: AP12 ile ilgili ayrıntılar için çevrimiçi baktım, ancak ayrıntılar çok sparce bulunmaktadır. CPAN sitesine baktım, ancak bu, dokümanları nerede okuyacağınıza dair bir işaret vermiyor, bu yüzden ayrıntıları nerede bulabilirsiniz? (Halihazırda, CPAN komut satırı PDF :: AP12 = veya AP13 = yasal modüller olarak tanımlanmayacaktır ve tar topunu indirerek ve elle elle çilek ile yükleme yapamamaktadır)

Merak ediyorum Bu "importPageIntoForm" öğesi: Bir DTP programı kullanarak bir ana PDF sayfası tasarladım (etiket üretimi için 3 genişlik 8 derinlik) ve her bir hücrenin sağ tarafında bir kukla grafik (?) koyarsam, takas edebilir miyim? bunları kullanarak bunları? (İsterseniz, kişisel bir QR kodları ile bir çevrimiçi "adres-mektup birleştirmesi" c/o GD :: BARCODE :: QRcode)

Ya da her sayfayı ana program ile sıfırdan oluşturmak en iyi olur mu?

+0

Bu PDF :: API2 değil PDF :: AP12 –

İlgili konular