2010-06-01 23 views
5

Es posible agregar encabezado (con texto y una imagen) y pie de página (con número de página) con imágenes. Escribí el código siguiente para crear un documento PDF que muestra imágenes png.Cómo agregar encabezado, pie de página con imágenes usando PDF :: API2 :: Lite?

Si esto se puede hacer fácilmente con cualquier otro módulo, sugiéralo. Realmente agradezco la respuesta con el código de muestra.

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

Respuesta

4

Esperando un día en SO AHORRO de 10 minutos leyendo la documentación del módulo. No es difícil, Space.

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

Gracias Daxim: este código es para editar el documento existente. ¿Puede sugerirme cómo puedo usarlo para crear un nuevo documento con las imágenes – Space

+0

? Utilice el ['new' constructor] (http://p3rl.org/PDF::API2#GENERIC_METHODS). Por favor, lea los documentos. – daxim

+0

Gracias daxim: ¿Puede por favor también sugerirme cómo puedo agregar propiedades al pdf doc. – Space

1

Tenga una mirada en PDF::API2::Simple lugar. Estos módulos de CPAN proporcionan algunos prácticos métodos de ayuda alrededor del PDF::API2, incluidos encabezados y pies de página.

Aquí está un ejemplo sencillo encabezado/pie de trabajo:

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 es mi caballo de batalla para este tipo de cosas.

Y casi siempre usaré el método importPageIntoForm, tan pronto como necesite hacer una instalación o reprocesamiento de un documento PDF existente.

Como solución general, creo un nuevo PDF, página por página, importo los elementos que quiero guardar, luego agrego texto o gráficos adicionales.

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

Este es un enfoque realmente genial, en lugar de modificar el pdf en su lugar, usándolo como plantilla para crear un nuevo pdf. ¡Gracias por informarnos sobre importPageIntoForm()! –

1

He buscado en línea detalles sobre el uso de PDF :: AP12, pero los detalles son muy escasos. Miró en el sitio de CPAN, pero eso no da ninguna indicación de dónde leer los documentos, entonces, ¿dónde se encuentran los detalles? (En la actualidad, la línea de comando de CPAN ni siquiera reconoce PDF :: AP12 = o AP13 = como módulos legítimos! Y no acaba de entender la descarga de tarball y la instalación manual en fresas perl)

Tengo curiosidad por este ítem "importPageIntoForm": si diseñé una página maestra de PDF usando un programa DTP, (para producción de etiquetas, por ejemplo, 3 de ancho por 8 de profundidad) y coloqué un gráfico ficticio (?) a la derecha de cada celda, ¿podría intercambiar? estas usando esto? (si lo desea, una "combinación de correspondencia" en línea que reemplaza los gráficos con códigos QR individuales c/o GD :: CÓDIGO DE BARRAS :: QRcode)

¿O sería mejor crear cada página desde cero con el programa principal?

+0

Es PDF :: API2 no PDF :: AP12 –

Cuestiones relacionadas