PDF::Builder(3pm) | User Contributed Perl Documentation | PDF::Builder(3pm) |
PDF::Builder - Facilitates the creation and modification of PDF files
use PDF::Builder; # Create a blank PDF file $pdf = PDF::Builder->new(); # Open an existing PDF file $pdf = PDF::Builder->open('some.pdf'); # Add a blank page $page = $pdf->page(); # Retrieve an existing page $page = $pdf->openpage($page_number); # Set the page size $page->mediabox('Letter'); # Add a built-in font to the PDF $font = $pdf->corefont('Helvetica-Bold'); # Add an external TTF font to the PDF $font = $pdf->ttfont('/path/to/font.ttf'); # Add some text to the page $text = $page->text(); $text->font($font, 20); $text->translate(200, 700); $text->text('Hello World!'); # Save the PDF $pdf->saveas('/path/to/new.pdf');
See the file README (in downloadable package and on CPAN) for a summary of prerequisites and tools needed to install PDF::Builder, both mandatory and optional.
There are four levels of involvement with PDF::Builder. Depending on what you want to do, different kinds of installs are recommended. See "Software Development Kit" in PDF::Builder::Docs for suggestions.
PDF::Builder can make use of some optional libraries, which are not required for a successful installation, but improve speed and capabilities. See "Optional Libraries" in PDF::Builder::Docs for more information.
There are some things you should know about character encoding (for text), before you dive in to coding. Please go to "Strings (Character Text)" in PDF::Builder::Docs and have a read.
Invoking "text" and "graphics" methods can lead to unexpected results (a different ordering of output than intended). See "Rendering Order" in PDF::Builder::Docs for more information.
PDF::Builder is mostly PDF 1.4-compliant, but there are complications you should be aware of. Please read "PDF Versions Supported" in PDF::Builder::Docs for details.
PDF::Builder intends to support all major Perl versions that were released in the past six years, plus one, in order to continue working for the life of most long-term-stable (LTS) server distributions. See the <https://www.cpan.org/src/> table First release in each branch of Perl x.xxxx0 "Major" release dates.
For example, a version of PDF::Builder released on 2018-06-05 would support the last major version of Perl released on or after 2012-06-05 (5.18), and then one before that, which would be 5.16. Alternatively, the last major version of Perl released before 2012-06-05 is 5.16.
The intent is to avoid expending unnecessary effort in supporting very old (obsolete) versions of Perl. If you need to use this module on a server with an extremely out-of-date version of Perl, consider using either plenv or Perlbrew to run a newer version of Perl without needing admin privileges.
This module does not work with perl's -l command-line switch.
There is a file INFO/KNOWN_INCOMP which lists known incompatibilities with PDF::API2, in case you're thinking of porting over something from that world, or have experience there and want to try PDF::Builder. There is also a file INFO/DEPRECATED, which lists things which are planned to be removed at some point.
The history of PDF::Builder is a complex and exciting saga... OK, it may be mildly interesting. Have a look at "History" in PDF::Builder::Docs section.
PDF::API2 was originally written by Alfred Reibenschuh. See the HISTORY section for more information.
It was maintained by Steve Simms.
PDF::Builder is currently being maintained by Phil M. Perry.
The full source is on https://github.com/PhilterPaper/Perl-PDF-Builder.
The release distribution is on CPAN: https://metacpan.org/pod/PDF::Builder.
Bug reports are on https://github.com/PhilterPaper/Perl-PDF-Builder/issues?q=is%3Aissue+sort%3Aupdated-desc (with "bug" label), feature requests have an "enhancement" label, and general discussions (architecture, roadmap, etc.) have a "general discussion" label.
Do not under any circumstances open a PR (Pull Request) to report a bug. It is a waste of both your and our time and effort. Open a regular ticket (issue), and attach a Perl (.pl) program illustrating the problem, if possible. If you believe that you have a program patch, and offer to share it as a PR, we may give the go-ahead. Unsolicited PRs may be closed without further action.
This software is Copyright (c) 2017-2020 by Phil M. Perry.
This is free software, licensed under:
The GNU Lesser General Public License (LGPL) Version 2.1, February 1999
(The master copy of this license lives on the GNU website.) (A copy is provided in the INFO/LICENSE file for your convenience.)
This section of Builder.pm is intended only as a very brief summary of the license; please consider INFO/LICENSE to be the controlling version, if there is any conflict or ambiguity between the two.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License, as published by the Free Software Foundation, either version 2.1 of the License, or (at your option) any later version of this license.
NOTE: there are several files in this distribution which were incorporated from outside sources and carry different licenses. If a file states that it is under a license different than LGPL 2.1, that license and its terms will apply to that file, and not LGPL 2.1.
This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
Options
Example:
$pdf = PDF::Builder->new(); ... print $pdf->stringify(); $pdf = PDF::Builder->new(-compress => 'none'); # equivalent to $pdf->{'forcecompress'} = 'none'; (or older, 0) $pdf = PDF::Builder->new(); ... $pdf->saveas('our/new.pdf'); $pdf = PDF::Builder->new(-file => 'our/new.pdf'); ... $pdf->save();
Example:
$pdf = PDF::Builder->open('our/old.pdf'); ... $pdf->saveas('our/new.pdf'); $pdf = PDF::Builder->open('our/to/be/updated.pdf'); ... $pdf->update();
Example:
# Read a PDF into a string, for the purpose of demonstration open $fh, 'our/old.pdf' or die $@; undef $/; # Read the whole file at once $pdf_string = <$fh>; $pdf = PDF::Builder->open_scalar($pdf_string); ... $pdf->saveas('our/new.pdf');
Supported Parameters:
For compatibility with earlier releases, if no decimal point is given, assume "1." precedes the number given.
A warning message is given if you attempt to decrease the PDF version, as you might have already read in a higher level file, or used a higher level feature.
See "info Example" in PDF::Builder::Docs section for an example of the use of this method.
Example:
@attributes = $pdf->infoMetaAttributes; print "Supported Attributes: @attr\n"; @attributes = $pdf->infoMetaAttributes('CustomField1'); print "Supported Attributes: @attributes\n";
See "XMP XML example" in PDF::Builder::Docs section for an example of the use of this method.
Supported Options:
Example:
# Start with Roman Numerals $pdf->pageLabel(0, { -style => 'roman', }); # Switch to Arabic $pdf->pageLabel(4, { -style => 'decimal', }); # Numbering for Appendix A $pdf->pageLabel(32, { -start => 1, -prefix => 'A-' }); # Numbering for Appendix B $pdf->pageLabel( 36, { -start => 1, -prefix => 'B-' }); # Numbering for the Index $pdf->pageLabel(40, { -style => 'Roman' -start => 1, -prefix => 'Index ' });
Example:
$pdf = PDF::Builder->new(-file => 'our/new.pdf'); ... $pdf->finishobjects($page, $gfx, $txt); ... $pdf->save();
Example:
$pdf = PDF::Builder->open('our/to/be/updated.pdf'); ... $pdf->update();
Caution: Although the object $pdf will still exist, it is no longer usable for any purpose after invoking this method! You will receive error messages about "can't call method new_obj on an undefined value".
Example:
$pdf = PDF::Builder->new(); ... $pdf->saveas('our/new.pdf');
Caution: Although the object $pdf will still exist, it is no longer usable for any purpose after invoking this method! You will receive error messages about "can't call method new_obj on an undefined value".
Example:
$pdf = PDF::Builder->new(-file => 'file_to_output'); ... $pdf->save();
Caution: Although the object $pdf will still exist, it is no longer usable for any purpose after invoking this method! You will receive error messages about "can't call method new_obj on an undefined value".
Example:
$pdf = PDF::Builder->new(); ... print $pdf->stringify();
This will be called automatically when you save or stringify a PDF. You should only need to call it explicitly if you are reading PDF files and not writing them.
If $page_number is -1, the new page is inserted as the second-last page; if $page_number is 0, the new page is inserted as the last page.
Example:
$pdf = PDF::Builder->new(); # Add a page. This becomes page 1. $page = $pdf->page(); # Add a new first page. $page becomes page 2. $another_page = $pdf->page(1);
If $page_number is 0 or -1, it will return the last page in the document.
Example:
$pdf = PDF::Builder->open('our/99page.pdf'); $page = $pdf->openpage(1); # returns the first page $page = $pdf->openpage(99); # returns the last page $page = $pdf->openpage(-1); # returns the last page $page = $pdf->openpage(999); # returns undef
This is useful if you want to transpose the imported page somewhat differently onto a page (e.g. two-up, four-up, etc.).
If $source_page_number is 0 or -1, it will return the last page in the document.
Example:
$pdf = PDF::Builder->new(); $old = PDF::Builder->open('our/old.pdf'); $page = $pdf->page(); $gfx = $page->gfx(); # Import Page 2 from the old PDF $xo = $pdf->importPageIntoForm($old, 2); # Add it to the new PDF's first page at 1/2 scale $gfx->formimage($xo, 0, 0, 0.5); $pdf->saveas('our/new.pdf');
Note: You can only import a page from an existing PDF file.
If the $source_page_number is omitted, 0, or -1; the last page of the source is imported. If the $target_page_number is omitted, 0, or -1; the imported page will be placed as the new last page of the target ($pdf). Otherwise, as with the "page()" method, the page will be inserted before an existing page of that number.
Note: If you pass a page object instead of a page number for $target_page_number, the contents of the page will be merged into the existing page.
Example:
$pdf = PDF::Builder->new(); $old = PDF::Builder->open('our/old.pdf'); # Add page 2 from the old PDF as page 1 of the new PDF $page = $pdf->import_page($old, 2); $pdf->saveas('our/new.pdf');
Note: You can only import a page from an existing PDF file.
See "User Units" in PDF::Builder::Docs for more information.
See "Media Box" in PDF::Builder::Docs for more information. The method always returns the current bounds (after any set operation).
See "Crop Box" in PDF::Builder::Docs for more information. The method always returns the current bounds (after any set operation).
See "Bleed Box" in PDF::Builder::Docs for more information. The method always returns the current bounds (after any set operation).
See "Trim Box" in PDF::Builder::Docs for more information. The method always returns the current bounds (after any set operation).
See "Art Box" in PDF::Builder::Docs for more information. The method always returns the current bounds (after any set operation).
Returns the list of searched directories.
See also PDF::Builder::Resource::Font::CoreFont.
See also PDF::Builder::Resource::Font::Postscript.
See also PDF::Builder::Resource::CIDFont::CJKFont
See also PDF::Builder::Resource::Font::SynFont
See also PDF::Builder::Resource::Font::BdFont
BEWARE: This is not a true PDF-object, but a virtual/abstract font definition!
See also PDF::Builder::Resource::UniFont.
Valid %options are:
See PDF::Builder::Resource::XObject::Image::JPEG for additional information and "examples/Content.pl" for some examples of placing an image on a page.
See PDF::Builder::Resource::XObject::Image::TIFF and PDF::Builder::Resource::XObject::Image::TIFF_GT for additional information and "examples/Content.pl" for some examples of placing an image on a page (JPEG, but the principle is the same). There is an optional TIFF library described, that gives more capability than the default one.
if ($pdf->LA_GT() { # is installed and usable } else { # not available. you will be running the old, pure PERL code }
See "examples/Content.pl" for some examples of placing an image on a page (JPEG, but the principle is the same).
See PDF::Builder::Resource::XObject::Image::PNG and PDF::Builder::Resource::XObject::Image::PNG_IPL for additional information and "examples/Content.pl" for some examples of placing an image on a page (JPEG, but the principle is the same). There is an optional PNG library (PNG_IPL) described, that gives more capability than the default one.
if ($pdf->LA_IPL() { # is installed and usable } else { # not available. don't use 16bps or interlaced PNG image files }
See PDF::Builder::Resource::XObject::Image::GIF for additional information and "examples/Content.pl" for some examples of placing an image on a page (JPEG, but the principle is the same).
Valid %options are:
See PDF::Builder::Resource::XObject::Image::GD for additional information and "examples/Content.pl" for some examples of placing an image on a page (JPEG, but the principle is the same).
See PDF::Builder::Resource::ColorSpace::Indexed::ACTFile for a reference to the file format's specification.
See PDF::Builder::Resource::ColorSpace::Indexed::Hue for an explanation.
$tint can be any valid ink identifier, including but not limited to: 'Cyan', 'Magenta', 'Yellow', 'Black', 'Red', 'Green', 'Blue' or 'Orange'.
$color must be a valid color specification limited to: '#rrggbb', '!hhssvv', '%ccmmyykk' or a "named color" (rgb).
The colorspace model will automatically be chosen based on the specified color.
Example:
$cy = $pdf->colorspace_separation('Cyan', '%f000'); $ma = $pdf->colorspace_separation('Magenta', '%0f00'); $ye = $pdf->colorspace_separation('Yellow', '%00f0'); $bk = $pdf->colorspace_separation('Black', '%000f'); $pms023 = $pdf->colorspace_separation('PANTONE 032CV', '%0ff0'); $dncs = $pdf->colorspace_devicen( [ $cy,$ma,$ye,$bk, $pms023 ] );
The colorspace model will automatically be chosen based on the first colorspace specified.
These are glue routines to the actual barcode rendering routines found elsewhere.
2021-03-28 | perl v5.32.1 |