Как добавить верхний и нижний колонтитулы с изображениями, используя PDF :: API2 :: Lite? - PullRequest
5 голосов
/ 01 июня 2010

Можно ли добавить заголовок (с текстом и одним изображением) и нижний колонтитул (с номером страницы) с изображениями.Ниже приведен код для создания документа PDF с изображениями в формате png.

Если это можно легко сделать с помощью любого другого модуля, пожалуйста, предложите. Действительно, оцените ответ с примером кода.

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 ]

4 голосов
/ 16 июня 2010

PDF :: API2 - моя рабочая лошадка для такого рода вещей.

И я почти всегда буду использовать метод importPageIntoForm, как только мне понадобится что-нибудь сделать.или повторную обработку существующего документа PDF.

В качестве общего решения я создаю новый 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);
4 голосов
/ 02 июня 2010

Ожидание одного дня на 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 голос
/ 02 февраля 2015

Я посмотрел в Интернете подробности об использовании PDF :: AP12, но детали очень скудны. Посмотрел на сайте CPAN, но это не указывает на то, где читать документы, так где вы найдете подробности? (В настоящее время командная строка CPAN даже не распознает PDF :: AP12 = или AP13 = как легальные модули! И не совсем справилась с загрузкой tar-шара и установкой вручную в клубничный perl)

Мне интересно узнать об этом элементе importPageIntoForm: если я спроектировал мастер-страницу PDF с помощью программы DTP (для производства этикеток, т.е. от 3 до 8 в глубину) и поместил фиктивную графику (?) Справа от каждого сотовый, смогу ли я обменять их, используя это? (если хотите, онлайновое «слияние по почте», заменяющее графику отдельными QR-кодами c / o GD :: BARCODE :: QRcode)

Или было бы лучше создать каждую страницу с нуля с помощью основной программы?

1 голос
/ 07 июня 2010

Взгляните на 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 /

...