PDF-API2-2.048/0000755000175000017500000000000015054353432012577 5ustar smsimmssmsimmsPDF-API2-2.048/.perlcriticrc0000644000175000017500000000013715054353432015266 0ustar smsimmssmsimmsseverity = 5 [Perl::Critic::Policy::BuiltinFunctions::ProhibitStringyEval] allow_includes = 1 PDF-API2-2.048/dist.ini0000644000175000017500000000166115054353432014247 0ustar smsimmssmsimmsname = PDF-API2 author = Steve Simms license = LGPL_2_1 copyright_holder = Steve Simms [MetaResources] bugtracker.web = https://github.com/ssimms/pdfapi2/issues repository.url = git://github.com/ssimms/pdfapi2.git repository.web = https://github.com/ssimms/pdfapi2 repository.type = git [NextRelease] format = %-9v %{yyyy-MM-dd}d [Prereqs] perl = v5.20.0 Compress::Zlib = 1.0 Font::TTF = 0 [Prereqs / TestRequires] Test::Exception = 0 Test::Memory::Cycle = 0 [OSPrereqs / MSWin32] Win32::TieRegistry = 0 [Git::Check] [Git::Commit] [Git::NextVersion] version_regexp = ^([0-9]+\.[0-9]{3})$ [Git::Tag] tag_format = %v [Git::GatherDir] include_dotfiles = 1 exclude_match = ^\.(?!perlcriticrc$) [PruneCruft] except = \.perlcriticrc [MetaYAML] [MetaJSON] [License] [Readme] [ExtraTests] [MakeMaker] [Manifest] [OurPkgVersion] [PodSyntaxTests] [Test::Perl::Critic] [TestRelease] [ConfirmRelease] [UploadToCPAN] [Git::Push] PDF-API2-2.048/Makefile.PL0000644000175000017500000000241615054353432014554 0ustar smsimmssmsimms# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v6.030. use strict; use warnings; use 5.020000; use ExtUtils::MakeMaker; my %WriteMakefileArgs = ( "ABSTRACT" => "Create, modify, and examine PDF files", "AUTHOR" => "Steve Simms ", "CONFIGURE_REQUIRES" => { "ExtUtils::MakeMaker" => 0 }, "DISTNAME" => "PDF-API2", "LICENSE" => "lgpl", "MIN_PERL_VERSION" => "5.020000", "NAME" => "PDF::API2", "PREREQ_PM" => { "Compress::Zlib" => "1.0", "Font::TTF" => 0 }, "TEST_REQUIRES" => { "Test::Exception" => 0, "Test::Memory::Cycle" => 0 }, "VERSION" => "2.048", "test" => { "TESTS" => "t/*.t" } ); my %FallbackPrereqs = ( "Compress::Zlib" => "1.0", "Font::TTF" => 0, "Test::Exception" => 0, "Test::Memory::Cycle" => 0 ); unless ( eval { ExtUtils::MakeMaker->VERSION(6.63_03) } ) { delete $WriteMakefileArgs{TEST_REQUIRES}; delete $WriteMakefileArgs{BUILD_REQUIRES}; $WriteMakefileArgs{PREREQ_PM} = \%FallbackPrereqs; } delete $WriteMakefileArgs{CONFIGURE_REQUIRES} unless eval { ExtUtils::MakeMaker->VERSION(6.52) }; if ( $^O eq 'MSWin32' ) { $WriteMakefileArgs{PREREQ_PM}{'Win32::TieRegistry'} = $FallbackPrereqs{'Win32::TieRegistry'} = '0'; } WriteMakefile(%WriteMakefileArgs); PDF-API2-2.048/Changes0000644000175000017500000041400715054353432014100 0ustar smsimmssmsimms2.048 2025-08-29 - [GH-85] Fix default_page_size when called without arguments (patch by Johan Vromans). - [GH-90] Fix deprecated option -noembed (reported by Bernhard Schmalhofer). - [GH-91] Support annotation links to a named external destination (patch by Johan Vromans). - [GH-92] Allow Font::TTF::Font objects to be used as fonts (patch by Johan Vromans). 2.047 2024-05-18 - Fixed implementation of GH-77. - Added $pdf->standard_fonts() and $pdf->is_standard_font($name) (initial patch by Johan Vromans). 2.046 2024-05-14 - [GH-74] Fixed documentation error saying that stroke_color and fill_color can be chained. - Crash instead of freezing if a PDF trailer's Prev keys result in a loop or if multiple trailers use the same object ID and generation number. - [GH-70] Fix off-by-one error when adding a page at the beginning of a PDF. - [GH-77] Significantly improve performance when adding many pages to a PDF. 2.045 2023-09-25 - Fixed documentation error in synopsis for QR codes. - Fixed date validation when timezone offset minute contains a trailing apostrophe, which is required by the Adobe PDF specifications and prohibited by the ISO PDF specifications. PDF::API2 now accepts either version as valid (report by Johan Vromans). - Fixed passing a GD object to $pdf->image() (reported by Hakon Hagland). - Fixed a crash when object numbers contain leading zeroes. 2.044 2022-11-16 - Added support for QR codes. - [GH-44] The X coordinate returned by $text->position() or (deprecated) $text->textpos() was incorrect when read after being set twice (report by Johan Vromans). - [GH-45] Renamed transform's "relative" option to "repeat" and fixed the documentation describing what it does (report by Johan Vromans). - [GH-49] Fix page_layout storing its value as page_mode (report by Johan Vromans). - [GH-50] Fix $pdf->viewer_preferences to return the same values it accepts for non_full_screen_page_mode (report by Johan Vromans). - Minor doc clarifications and improved error messages. 2.043 2021-12-07 - Restores backward compatibility (with a warning) when the deprecated $pdf->pageLabel is given an invalid -style option starting with "a" or "r" (report by Johan Vromans). - Fix incorrect default in documentation for annotation borders (report and patch by Johan Vromans). 2.042 2021-09-16 - This release includes many changes to method names, options, and documentation aimed at improving approachability, but existing code should continue to work. See the new Backward Compatibility section in the main PDF::API2 documentation for details about deprecation timelines and a suggested workflow for handling upgrades. See the new Migration section for a consolidated list of deprecated methods/options and their replacements. - Renamed several methods in the PDF::API2 base class: - end -> close - open_scalar -> from_string - stringify -> to_string - pages -> page_count - importPageIntoForm -> embed_page - isEncrypted -> is_encrypted - xmpMetadata -> xml_metadata - outlines -> outline - Merged saveas into save. - Added individual accessors for PDF metadata (title, author, producer, etc.). Replaced info and infoMetaAttributes with info_metadata for custom metadata. - Renamed the following methods in the PDF::API2::Page class: - gfx -> graphics - rotate -> rotation - Added $page->boundaries() and $pdf->default_page_boundaries() to replace the separate methods for the various page boundaries. The supported arguments are slightly different; some edge cases have been removed and new options have been added. See below and the PDF::API2::Page documentation for details. - Added $page->size() and $pdf->default_page_size() as a shortcut for setting the media box. - Both $page->size() and $page->boundaries() (and their $pdf default equivalents) now accept "WxH" page sizes in inches (e.g. 11x17 or 8.5x11). This does not apply to the deprecated versions of these methods. - Both $page->size() and $page->boundaries() (and their $pdf default equivalents) now accept a single number for page boundaries other than the media box, representing an amount in points to shrink the next larger box. This does not apply to the deprecated versions of these methods. - Replaced pageLabel with page_labels. The option syntax is slightly different (pass options as a hash instead of a hashref; remove hyphens from option names). - Replaced image_jpeg, image_tiff, image_pnm, image_png, image_gif, and image_gd with $pdf->image. - Replaced the individual barcode methods with $pdf->barcode, which is fully documented and includes reasonable defaults based on the chosen barcode format. - Improved spacing between barcodes and labels when both bar_extend (formerly -lmzn) and font_size (formerly -fnsz) are set and the font size is larger than the bar extension. - Replaced corefont, ttfont, psfont, and bdfont with $pdf->font. Unlike corefont, font requires the exact name of one of the standard fonts. Kerning is on by default (vs. off by default in the type-specific methods). - Renamed synfont to synthetic_font. Renamed and documented the options. The new hscale option (formerly -slant) now takes a percentage (100 = no change, vs. 1 = no change for -slant) to match the hscale method in Content. The new "bold" option is in thousandths of a text unit, vs. hundredths for "-bold", so multiply the old value by 10 when migrating. - Replaced the individual colorspace methods with $pdf->colorspace. Added documentation and examples for the various colorspace types except for the former colorspace_hue, because I couldn't find the standard that it implements (if one exists). - Renamed several methods in PDF::API2::Content: - linewidth -> line_width - linecap -> line_cap - linejoin -> line_join - miterlimit -> miter_limit - flatness -> flatness_tolerance - endpath -> end - rectxy -> rectangle - fillstroke -> paint - charspace -> character_spacing - wordspace -> word_spacing - nl -> crlf - advancewidth -> text_width - In PDF::API2::Content, replaced image and formimage with object. Added a $page->object() convenience method that is equivalent to $page->graphics->object(). - In PDF::API2::Content, merged text_center and text_right into text. Use the "align" option to set alignment to "center" or "right". - In PDF::API2::Content, merged paragraphs into paragraph. - In PDF::API2::Content, deprecated poly and added polyline. poly was the only path-drawing method that took a starting position as its first two arguments. These should be passed to a move call instead, with the remaining arguments passed to the new polyline method. - In PDF::API2::Content, added position, which combines the functionality of distance and textpos2 (which was undocumented). Deprecated textpos, which attempted to return the position of the "cursor" after taking into account coordinate transformations. textpos2 and the new position method return the text position before any coordinate transformations are applied, which is consistent with how the other methods in this class behave. - In PDF::API2::Content, deprecated bogen. Recreate using arc, if feasible. If not, I'm likely to leave the code in place indefinitely as an undocumented method. - In PDF::API2::Content, deprecated cr. Replace with either position (if called with arguments) or crlf (if called without arguments). - Tentatively deprecated $pdf->cjkfont. If you're successfully using this method for CJK font support, read PDF::API2::Resource::CIDFont::CJKFont and contact me to discuss your use case. - Tentatively deprecated $pdf->unifont. If you're successfully using this method for Unicode support, please contact me to discuss your use case. - Replaced $pdf->preferences() with separate page_mode, page_layout, viewer_preferences, and open_action methods, all of which are now fully documented. - Added font_path and set_font_path accessors for the font search path (the list of directories searched when a font name is included without its full path). Renamed addFontDirs to add_to_font_path. - Removed C:/WinNT/Fonts from the default font search path. - Named Destinations are now fully documented, with updated method names and arguments. - Outlines are now fully documented, with additional methods for examining and modifying the outline tree. Existing method names and arguments have been updated to match those used in Named Destinations. Various bugs have been fixed when reading or modifying outlines in existing PDFs. - Updated annotation documentation. Revised methods and arguments to match those used in Named Destinations and Outlines. - A PDF version number specified in the document catalog is now respected by $pdf->version(). - Fixed space calculation between words in justified text (report and fix by Vladislav Glinsky). 2.041 2021-07-27 - Bug reports should now be made at GitHub Issues rather than RT. - Rename openpage to open_page in PDF::API2. The old name is deprecated. - [RT #136648] Fix when writing PDFs containing cross-reference streams (reported by Chris Papademetrious, fix by Vadim Repin from RT #117184). - [RT #44877] GIFs containing comments or plain-text representations will no longer result in an error (reported by Chris Czub). - [RT #132844] Fix corruption when a PGM image is included (reported by Jeff Ratcliffe, fix by Vadim Repin). - Expand PNM support to include all image types. - [RT #131657] Disable recursion warnings while releasing (destroying) PDF indirect objects, which can be highly-interconnected (reported by Leon Winter). - [RT #41971] Fix when attempting to read an existing PDF's outlines (reported by Damyan Ivanov, fix based on a patch by Vadim Repin). 2.040 2021-04-13 - Fix open() followed by stringify() resulting in a corrupt (mostly-empty) PDF, which was broken by changes in 2.039 (reported by Gareth Tunley). - [RT #134993] Calling open($filename) followed by saveas($same_filename) instead of update() resulted in a corrupt PDF in 2.039, which no longer reads the entire file into memory on open (reported by Marco Pessotto). - [RT #134957] Fix encoding of \n in a PDF string containing non-printable characters (reported by Stuart Henderson). - [RT #133131] Fix endianness of 64-bit numbers in cross-reference stream widths array (reported by Christopher Papademetrious, fix by Vadim Repin). 2.039 2021-03-04 - PDF::API2->open($filename) no longer reads the entire file into memory before working on it, instead reading from the file as needed. This results in a substantial reduction in memory usage and start-up time for large PDF files, particularly in cases where the calling script doesn't need to access all of the contents of the PDF. - PDF files containing cross-reference streams can now be modified and saved normally. Previously, they were read-only. - $text->paragraph(...) and $text->paragraphs(...) (formerly "section") are no longer undocumented and experimental. If you were previously using them at your own risk, note that "-spillover" is no longer an option (text will always wrap inside the specified width if possible). In addition, paragraphs(...) no longer collapses consecutive newlines. - [RT #98546] There is now an -align-last option for justified text to specify how the final line should be justified. Left is still the default. - Code in the PDF::API2::Basic::PDF namespace was originally licensed under the Perl Artistic License, which has been determined to not be (L)GPL-compatible. Martin Hosken has graciously granted an MIT license for use of his code contained in PDF::API2, so the distribution may now be used solely under the terms of the LGPL rather than requiring both licenses simultaneously. Many thanks to Petr Pisar for his help in working through the licensing issues. - Renamed $text->lead(...) to $text->leading(...). The old name is deprecated but will continue to work. If you're modifying PDF::API2 objects by editing their hash values instead of using these accessors, you'll need to update your code. - Added a -compress option (on by default) to PDF::API2->new(), open(), and open_scalar(). If disabled, most streams won't be compressed, which can simplify debugging. 2.038 2020-08-31 - Use PDF::API2::XS or Image::PNG::Libpng, if either is installed, to speed up inclusion of PNG files with an alpha channel by an order of magnitude (written by Rob Scovell, sponsored by prayerletters.com). 2.037 2020-02-05 - Allow PDF 2.0 files to be opened. - [RT #131147] Ignore dictionary entries with null values (reported by Klaus Ethgen, fix by Vadim Repin). 2.036 2019-09-17 - Eliminate another uninitialized value warning in BaseFont.pm. 2.035 2019-08-09 - The bounding box methods (mediabox, cropbox, bleedbox, trimbox, and artbox) now return their values when called without arguments. - The get_[media|crop|bleed|trim|art]box page methods have been deprecated since they're now redundant, but they continue to work. - [RT #130074] Remove unneeded (and newly-broken) calls to is_utf8 in Annotation.pm and NamedDestination.pm (reported by Mathieu Arnold). - Eliminate some uninitialized value warnings in BaseFont.pm. 2.034 2019-06-29 - SUPPORTED PERL VERSIONS: Starting with this release, PDF::API2 will support major Perl versions released in the past six years, plus the major release before that one. This should provide backward compatibility for the life of most LTS server distributions, while eliminating the need to troubleshoot warnings and bugs that only show up in increasingly-ancient versions of Perl. For this release, it means that the minimum supported Perl is 5.18, which was first released on 2013-05-18. - Add support for cross-reference streams using 64-bit field widths. - When the utf8 flag is set for a PDF string, automatically encode it as UCS-16BE instead of requiring a separate flag to be set in the PDF object. This resolves [RT #33497] and [RT #117031] in addition to making the code easier to maintain. - [RT #126274] Fix alignment when using UniFont with text_center or text_right when all characters are in the same block. - [RT #121911] Fix adding pages to a document structure with nested Pages elements. This included a fairly substantial rewrite of the relevant code, so please report any new bugs related to adding pages (report and troubleshooting by Vadim Repin). - Renamed pdfile() to pdf_file() in PDF::API2::Annotation and PDF::API2::Outline. The old name continues to work, but is deprecated. 2.033 2017-07-06 - [RT #122371] Remove a couple of improperly-placed weaken statements (reported by Phil Perry). - [RT #122372] Fix weakening when a page is added to the end of a multiple page document (reported by Phil Perry). - Fix Bank Gothic core font (reported by Phil Perry). 2.032 2017-07-02 - PDF::API2 has many circular references, and the end() method doesn't clear them all, so memory is leaked. This release uses Scalar::Util's weaken() function to improve garbage collection. A significant number of circular references have been weakened, though many likely still remain. - [RT #120756] Eliminate a warning for an ambiguous call to CORE::open (first reported by Abdelbaki Brahmia). - $text->text_justified() and $text->text_fill_justified() now adjust the space between words rather than stretching individual characters in order to get the text to fit. - [RT #120397] Indirect references and indirect objects can have comments embedded in their whitespace, and their object number and generation may be split across multiple lines, which may not all be buffered (reported by SPROUT). - [RT #120450] Fix PDF::API2->open($filename)->stringify() (reported by SPROUT). - Fix an off-by-one error when calculating text width while charspace is non-zero. - [RT #120048] Fix PDF::API2->synfont() (broken in 2.029, fixed by Vadim Repin) and add basic testing. 2.031 2017-01-26 - Fix use of cache files when reading streams: temp files will now be used any time a stream is larger than 16MB (by default). Formerly, due to a bug, they would only be created when a 4kB chunk of a stream increased to 16kB or more after being decompressed. - Numbers, booleans, and null values can now be read from object streams. - Update to [RT #113290]: Objects inside a large object stream are now read without loading the entire object stream into memory. - DEPRECATION: The low-level new_api methods have been deprecated in favor of calling new directly. If your code uses new_api($api2, ...), replace it with new($api2->{'pdf'}, ...). - [RT #118352] Don't crash when adding an annotation to a page that has an existing annotations array stored as an indirect object (reported by Johan Vromans). - [RT #118717] Die with an informative error if a file can't be opened during open() or saveas() (reported by Johan Vromans). 2.030 2016-10-13 - Fix a font naming issue introduced while satisfying Perl::Critic. 2.029 2016-10-10 - [RT #113293] Files with cross-reference streams weren't correctly setting the max object number (report and troubleshooting by Marco Pessotto). - Handle TIFF images with strips that are wider than the image (report and patch by Jeffrey Ratcliffe). - [RT #98574] Increase test coverage of PDF::API2::Content (tests by Phil Perry). - A bunch of code cleanup and documentation updates by Paul Cochrane. - Add a missing prereq on Win32 systems (patch by Michiel Beijen). - [RT #113514, #98552] Fix the dash() and renderingintent() methods in ExtGState (reported by Vadim Repin and Phil Perry). - Satisfy all Perl::Critic severity 5 policies. - [RT #117940] Allow PNG, GIF, and PNM files to be opened from filehandles in addition to filenames (patch by Johan Vromans). - [RT #33970] Fail fast when a referenced file can't be opened (requested by Barrie Slaymaker a mere 8.5 years ago). - Add -simplex, -duplexfliplongedge and -duplexflipshortedge as options to $pdf->preferences() (requested by Doug Poulin). 2.028 2016-06-08 - [RT #113290] Fix for reading objects inside an object stream in a large PDF (patch by Marco Pessotto). - Eliminate an infinite loop when reading a corrupt dictionary. 2.027 2016-03-11 - This release contains seven fixes for parsing PDFs. They mostly affect files using cross-reference streams, which were first supported in the previous release. Thanks to Marco Pessotto and Stuart Henderson for their help identifying and troubleshooting bugs. - Added contrib/pdf-debug.pl to help track down issues related to opening and parsing PDFs. 2.026 2016-02-24 - [RT #48683] Add support for PDFs with cross-reference streams and object streams (patch by Don Huettl of Grant Street Group). - [RT #107333] Accept an empty string as a valid Name, per PDF spec 1.7 section 7.3.5 (patch by Mark Balitsky). - [RT #98551] Rename aliases 2A, 4A, 2B, and 4B to 2A0, 4A0, 2B0, and 4B0. The old names will continue to work, but are now undocumented (patch by Phil Perry). - Add -mils and -color as options for barcodes. Reset linedash so that barcodes are always solid lines (patch by Erelen). - [RT #98549] Rename meterlimit to miterlimit (patch by Phil Perry). - [RT #98534] Rename hspace to hscale (patch by Phil Perry). - Fixed an infinite loop when RunLengthDecode is used for output. - [RT #65582] Fix embedding of OpenType fonts (fix by Simon Cozens). - [RT #67767] Allow an empty page to be imported into a PDF using importPageIntoForm (reported by Antti Lankila). - [RT #66341] Various fixes for ASCII85Decode and LZWDecode. 2.025 2015-09-23 - The previous release included a patch that broke compatibility with Perl 5.8.x. The minimum supported version is now Perl 5.8.5, and there is a .perl-version file to facilitate testing using plenv. 2.024 2015-09-18 - [RT #104133] Include all bounding boxes when importing a page (patch by Don Huettl of Grant Street Group). - [RT #104133] When retrieving bounding boxes for a page, fall back according to the defaults listed in the PDF spec (patch by Don Huettl of Grant Street Group). - Barcodes now take an optional -caption argument that will be printed beneath the barcode. This can replace or be used in conjunction with the text representation of the barcode (requested by Gareth Tunley). - [RT #105581] Calls to width() in BaseFont are now significantly faster (patch by Dmitri Tikhonov). 2.023 2014-09-12 - The fix for [RT #69503] broke a previously-working case where a page object could be passed (and was expected). The -firstpage option now accepts a page object or a page number. Thanks to Marco Pessotto for the bug report and test. 2.022 2014-07-04 - Added $pdf->version() get/set method. When opening an existing PDF, the existing version number will now be retained. - Renamed the following in PDF::API2: - importpage to import_page - openScalar to open_scalar The old names are deprecated. - [RT #69503] Fix the -firstpage option to $pdf->preferences() so that it doesn't always lead to a crash (reported by Dietrich Streifert). - [RT #47974] Accept malformed xref subsections (with a warning) that have extraneous spaces on the first line (reported by Abhinav Kaushik). - [RT #94505] For Code128 barcodes, the initial character set is now optional (defaults to B or C depending on the content to be encoded). The initial character set can be passed as a capital letter, and the program will die if an invalid character set is requested (requested by Andrea Nall). - Interleaved 2 of 5 barcodes now prepend a zero when an odd number of digits is specified, which is standard behavior. Previously, a zero was appended instead. - $page->rotate(0) now sets rotation to 0 degrees rather than deleting an existing page rotation command. Page rotation is inherited, so this is necessary to undo any inherited page rotation. - Fix: Attempts to use EAN-128 barcodes resulted in an error. - Add a more informative error when text() is called without first setting a font(), and when font() is called without including a font size. 2.021 2014-02-20 - Fixed numerous bugs in the string parsing code, including the one reported in [RT #63918] by Frank Doepper. - [RT #41049] Rewrote literal string parsing to prevent a stack overflow due to an inefficient regex (reported by Sergei Fetisov). - [RT #91822] Fix compression of GIF images to ensure that output codes don't exceed 12 bits (reported by Vadim Repin). - The RunLengthDecode filter didn't actually work. Its code has been rewritten and now passes basic encoding and decoding tests. - Fix Code128 barcode switching from Code C to Code B in certain cases (reported by Doru Petrescu). 2.020 2013-01-20 - Give a more informative error message when a PDF file using a cross-reference stream is encountered. The Known Issues section of the documentation includes pointers on how to add support in case someone else can get to this before I do. - Text using TrueType fonts is now searchable again. In version 0.61, an undocumented -unicodemap option was added to nearly all of the font resource methods, which only included a ToUnicode CMap if it was set (and it's required in order for PDF readers to be able to identify individual characters if BaseEncoding isn't present, which it isn't for TrueType fonts). I've left the -unicodemap option in place, and it's still undocumented (except here), but it's now on by default. Call $pdf->ttfont($fontfile, -unicodemap => 0) if you want to disable it for performance or file size reasons. - Add a note to the stringify method's documentation saying that it's a destructive operation. - The various filter types have their own classes in the PDF::API2::Basic::PDF::Filter namespace now, rather than having all of the packages in Filter.pm. - To facilitate testing and ensure that identically-generated PDFs have identical output in Perl 5.17.5 or later, PDF dictionary keys are now sorted during output. 2.019 2011-03-10 - [RT #66167] Fix a typo in the require statement for code128 barcodes (TC Kuan). - Numerous modules are now only loaded when they're needed, which should help speed up the load time and reduce the memory footprint. - Test coverage is up to about 45% of the codebase. 2.018 2011-02-23 - The tests in 2.017 exposed a floating point issue where some computers give more trailing zeros than others. It doesn't affect the output, but it does break the tests on those computers, since the PDFs are slightly different. This version modifies the float() method to remove trailing zeros, which should fix the test breakage and give consistent PDFs. 2.017 2011-02-22 - The DejaVu fonts have been removed from the distribution, since they were only used by one example script. If you need them for your project, you can download them from http://dejavu-fonts.org - Fix: Content->bogen() didn't behave as documented if $move was set (it started drawing from the center of the circle rather than [x1, y1]). - The undocumented nettfont method has been removed, along with the supporting PDF::API2::Resource::Font::neTrueType module. - The undocumented save_xml method has been removed, along with the supporting functions in PDF::API2::Basic::*. - The undocumented textstate2 method has been removed from PDF::API2::Content. - [RT #58386] Fix create_egs call in Lite.pm (J Greely) - [RT #62922] Fix string interpolation in pdf-merge.pl (Guillaume Rousse and Jerome Quelin) - [RT #65458] Fix an error in the synopsis (Frank Ammeter) - [RT #66054] Fix rename of .cmap files so that they actually work now. (cnhacktnt) - The test suite has grown to nearly 200 tests, covering about 40% of the codebase. There's still plenty of room for improvement. 2.016 2011-01-24 - New Maintainer: Steve Simms (http://deefs.net) - This release jumps from version 0.73 to 2.016 in order to provide a consistent version number across all modules in the distribution without breaking any existing code or going backwards. - Lots of updates to the documentation, particularly in PDF::API2::Content, which was almost completely rewritten and reorganized. - Font::TTF has been added as a dependency instead of being embedded in the distribution. - Everything that worked in 0.73 should work unmodified in 2.016, at least if it used the published documentation, and most everything should still work even if it didn't. - PDF::API2 used to read and parse three text files, one of which was over 500kB, on every load. These files have been turned into modules, and while I haven't done any performance testing, I'd have a hard time believing that it isn't faster now. - There are now a few tests forming the beginning of a test suite. Contributions of tests would be most welcome! ====================================================================== Changes below this point are from PDF::API2 0.73 and earlier, generated from the CVS logs. ====================================================================== 2009-03-20 09:54 fredo * lib/PDF/API2/Resource/CIDFont/TrueType.pm: rt.cpan.org #42524: strange space size after update on 0.72.003 from 0.71 2008-11-20 19:51 fredo * lib/PDF/API2/Resource/CIDFont/TrueType.pm: perf henning.just@datagraf.dk 2008-11-05 00:05 fredo * lib/PDF/API2/Version.pm: *** empty log message *** 2008-11-04 23:54 fredo * lib/PDF/API2/Basic/PDF/Dict.pm lib/PDF/API2/Resource/Font.pm: fixed [rt.cpan.org #40648] Unicode text prints text on top of text before it 2008-08-10 15:06 fredo * examples/021_synfonts: added relative use lib 2008-08-10 14:57 fredo * lib/PDF/API2/Version.pm: *** empty log message *** 2008-08-10 14:43 fredo * examples/021_syntruefonts lib/PDF/API2/Resource/Font/SynFont.pm lib/PDF/API2/fonts/AUTHORS.txt lib/PDF/API2/fonts/DejaVuSans-Bold.ttf lib/PDF/API2/fonts/DejaVuSans-BoldOblique.ttf lib/PDF/API2/fonts/DejaVuSans-ExtraLight.ttf lib/PDF/API2/fonts/DejaVuSans-Oblique.ttf lib/PDF/API2/fonts/DejaVuSans.ttf lib/PDF/API2/fonts/DejaVuSansCondensed-Bold.ttf lib/PDF/API2/fonts/DejaVuSansCondensed-BoldOblique.ttf lib/PDF/API2/fonts/DejaVuSansCondensed-Oblique.ttf lib/PDF/API2/fonts/DejaVuSansCondensed.ttf lib/PDF/API2/fonts/DejaVuSansMono-Bold.ttf lib/PDF/API2/fonts/DejaVuSansMono-BoldOblique.ttf lib/PDF/API2/fonts/DejaVuSansMono-Oblique.ttf lib/PDF/API2/fonts/DejaVuSansMono.ttf lib/PDF/API2/fonts/DejaVuSerif-Bold.ttf lib/PDF/API2/fonts/DejaVuSerif-BoldItalic.ttf lib/PDF/API2/fonts/DejaVuSerif-Italic.ttf lib/PDF/API2/fonts/DejaVuSerif.ttf lib/PDF/API2/fonts/DejaVuSerifCondensed-Bold.ttf lib/PDF/API2/fonts/DejaVuSerifCondensed-BoldItalic.ttf lib/PDF/API2/fonts/DejaVuSerifCondensed-Italic.ttf lib/PDF/API2/fonts/DejaVuSerifCondensed.ttf lib/PDF/API2/fonts/LICENSE.txt lib/PDF/API2/fonts/NEWS.txt lib/PDF/API2/fonts/README.txt lib/PDF/API2/fonts/langcover.txt lib/PDF/API2/fonts/status.txt lib/PDF/API2/fonts/unicover.txt: to 2.25 2008-03-10 21:38 fredo * examples/060_transparency: genesis 2008-03-10 21:23 fredo * examples/012_pages: genesis 2008-02-15 15:22 fredo * lib/PDF/API2/Content.pm: added -spillover param to paragraph and sub-methods 2008-01-18 00:11 fredo * lib/PDF/API2.pm: fixed catalog update and infohash utf16 from http://bugs.debian.org/461167 2008-01-04 08:10 fredo * lib/PDF/API2/Resource/Font/neTrueType.pm: flag fixes 2008-01-04 08:08 fredo * lib/PDF/API2/Resource/CIDFont/TrueType/FontFile.pm: apiname fix 2007-11-16 19:30 fredo * lib/PDF/API2.pm: added -noembed option 2007-11-16 19:27 fredo * lib/PDF/API2/Resource/CIDFont/TrueType.pm lib/PDF/API2/Resource/CIDFont/TrueType/FontFile.pm: fixed -noembed option 2007-11-16 19:03 fredo * MANIFEST: added non-embedded truetype 2007-11-14 23:01 fredo * lib/PDF/API2.pm: fixed relative page insert 2007-11-14 22:49 fredo * lib/PDF/API2.pm: added non-embedded truetype font (8-bit only) support 2007-11-14 22:47 fredo * lib/PDF/API2/Resource/Font/neTrueType.pm: genesis 2007-11-14 20:46 fredo * lib/PDF/API2/Resource/CIDFont/TrueType/FontFile.pm: added noembed option 2007-11-03 20:31 fredo * lib/PDF/API2/Basic/PDF/File.pm: make startxref detection more tolerant 2007-10-23 07:49 fredo * MANIFEST: added 022_truefonts_diacrits_utf8 2007-10-23 07:48 fredo * examples/022_truefonts_diacrits_utf8: genesis 2007-10-23 07:46 fredo * examples/020_textunderline: new 2007-10-23 07:45 fredo * lib/PDF/API2/Resource/CIDFont/TrueType.pm: fixed width encoding for wrong advance codes 2007-10-16 20:08 fredo * lib/PDF/API2/Resource/BaseFont.pm: changed undef safeguards for wx* methods 2007-10-10 06:18 fredo * lib/PDF/API2/Content.pm lib/PDF/API2/Resource/BaseFont.pm lib/PDF/API2/Version.pm: fixed noisy undef handling of isvirtual 2007-10-02 19:59 fredo * lib/PDF/API2/Annotation.pm: added movie annotation 2007-09-26 19:50 fredo * lib/PDF/API2/Basic/PDF/File.pm: make trailer detection more tolerant for reported ghostscript and swets formats 2007-09-18 22:29 fredo * lib/PDF/API2.pm: added -printscalingnone option 2007-09-17 16:03 fredo * lib/PDF/API2/Resource/XObject/Image/TIFF.pm: update docs for tiffTag 2007-09-14 15:36 fredo * lib/PDF/API2/Resource/XObject/Image/TIFF.pm: also read Tiff Tag 296 and make it available as resUnit 2007-08-27 20:06 fredo * lib/PDF/API2/Basic/TTF/Cmap.pm: updated ms_table election algo to support newer apple and m$ unicode 3.1+ glyph cmaps 2007-08-07 20:40 fredo * examples/020_corefonts: added use lib 2007-08-07 20:23 fredo * lib/PDF/API2/Content.pm: added wantarray choice for paragraph, 2007-08-01 23:12 fredo * lib/PDF/API2.pm: fix BOM in info strings 2007-07-01 20:32 fredo * lib/PDF/API2/fonts/DejaVuSerif-BoldOblique.ttf lib/PDF/API2/fonts/DejaVuSerif-Oblique.ttf lib/PDF/API2/fonts/DejaVuSerifCondensed-BoldOblique.ttf lib/PDF/API2/fonts/DejaVuSerifCondensed-Oblique.ttf: sync with dejavu 2.18 2007-07-01 20:30 fredo * lib/PDF/API2/fonts/AUTHORS.txt lib/PDF/API2/fonts/DejaVuSans-Bold.ttf lib/PDF/API2/fonts/DejaVuSans-BoldOblique.ttf lib/PDF/API2/fonts/DejaVuSans-ExtraLight.ttf lib/PDF/API2/fonts/DejaVuSans-Oblique.ttf lib/PDF/API2/fonts/DejaVuSans.ttf lib/PDF/API2/fonts/DejaVuSansCondensed-Bold.ttf lib/PDF/API2/fonts/DejaVuSansCondensed-BoldOblique.ttf lib/PDF/API2/fonts/DejaVuSansCondensed-Oblique.ttf lib/PDF/API2/fonts/DejaVuSansCondensed.ttf lib/PDF/API2/fonts/DejaVuSansMono-Bold.ttf lib/PDF/API2/fonts/DejaVuSansMono-BoldOblique.ttf lib/PDF/API2/fonts/DejaVuSansMono-Oblique.ttf lib/PDF/API2/fonts/DejaVuSansMono.ttf lib/PDF/API2/fonts/DejaVuSerif-Bold.ttf lib/PDF/API2/fonts/DejaVuSerif-BoldItalic.ttf lib/PDF/API2/fonts/DejaVuSerif-BoldOblique.ttf lib/PDF/API2/fonts/DejaVuSerif-Italic.ttf lib/PDF/API2/fonts/DejaVuSerif-Oblique.ttf lib/PDF/API2/fonts/DejaVuSerif.ttf lib/PDF/API2/fonts/DejaVuSerifCondensed-Bold.ttf lib/PDF/API2/fonts/DejaVuSerifCondensed-BoldItalic.ttf lib/PDF/API2/fonts/DejaVuSerifCondensed-BoldOblique.ttf lib/PDF/API2/fonts/DejaVuSerifCondensed-Italic.ttf lib/PDF/API2/fonts/DejaVuSerifCondensed-Oblique.ttf lib/PDF/API2/fonts/DejaVuSerifCondensed.ttf lib/PDF/API2/fonts/NEWS.txt lib/PDF/API2/fonts/README.txt lib/PDF/API2/fonts/langcover.txt lib/PDF/API2/fonts/status.txt lib/PDF/API2/fonts/unicover.txt: avu 2.18 2007-06-27 20:54 fredo * lib/PDF/API2/Resource/Font/Postscript.pm: fix exporter warnings of IO::File 2007-06-23 09:48 fredo * contrib/text2pdf.pl: added contributor email 2007-06-23 09:43 fredo * MANIFEST: added text2pdf.pl 2007-06-23 09:42 fredo * contrib/text2pdf.pl: genesis from contribution 2007-06-07 10:43 fredo * lib/PDF/API2/Basic/PDF/File.pm: fixed %%EOF/startxref detection to be done in chunks 2007-05-27 09:46 fredo * lib/PDF/API2/Basic/PDF/File.pm: preparations for abbyy finereader fix 2007-05-24 19:29 fredo * lib/PDF/API2/Resource/XObject/Image/PNM.pm: fixed pnm bitmap decoding 2007-05-16 21:45 fredo * lib/PDF/API2.pm: fixed importpage doku bug http://rt.cpan.org/Ticket/Display.html?id=27152 2007-05-10 23:38 fredo * lib/PDF/API2.pm: added note on importintoform and importpage for existing pdf-file 2007-05-10 06:44 fredo * lib/PDF/API2/Basic/PDF/Pages.pm: fixed page insert with upstream text-pdf 0.29a version 2007-05-08 18:32 fredo * lib/PDF/API2.pm lib/PDF/API2/Content.pm lib/PDF/API2/Lite.pm lib/PDF/API2/Page.pm lib/PDF/API2/Resource/XObject/Form/Hybrid.pm: renamed compress to compressFlate 2007-05-08 18:11 fredo * lib/PDF/API2/Content.pm: fixed bogen 2007-05-08 17:58 fredo * MANIFEST: removed changelog 2007-05-07 20:33 fredo * lib/PDF/API2.pm: fix tounicode option 2007-05-07 20:31 fredo * lib/PDF/API2/Resource/CIDFont/TrueType/FontFile.pm: fix subsetting 2007-04-25 18:04 fredo * lib/PDF/API2/Version.pm: tag release 0.60 2007-04-25 17:58 fredo * lib/PDF/API2/Basic/TTF/Name.pm: added upstream fix for 5.8.7 bugs 2007-04-18 05:26 fredo * lib/PDF/API2/Resource/Font/SynFont.pm: fixed unicode caos handling for some broken fonts having no unicode for a glyph 2007-04-07 10:28 fredo * examples/023_cjkfonts: added lorem ipsum page 2007-04-07 10:26 fredo * examples/022_truefonts: added lorem ipsum page 2007-04-07 10:25 fredo * lib/PDF/API2/Resource/BaseFont.pm: fixed fix for wxByGlyph not honoring cidfont width arrays 2007-04-07 09:51 fredo * lib/PDF/API2/Resource/BaseFont.pm: fix for wxByGlyph not honoring cidfont width arrays 2007-03-17 22:41 fredo * Makefile.PL: fixed version print 2007-03-17 20:38 fredo * lib/PDF/API2/IOString.pm lib/PDF/API2/Resource/CIDFont.pm lib/PDF/API2/Resource/CIDFont/CJKFont.pm lib/PDF/API2/Resource/CIDFont/TrueType.pm lib/PDF/API2/Resource/CIDFont/TrueType/FontFile.pm lib/PDF/API2/Resource/XObject/Image/JPEG.pm lib/PDF/API2/Resource/XObject/Image/TIFF.pm: replaced IOString dep. with scalar IO. 2007-03-17 20:15 fredo * lib/PDF/API2/Version.pm: release sync 2007-03-17 20:07 fredo * lib/PDF/API2.pm: fixed open to CORE::open 2007-03-16 15:48 fredo * lib/PDF/API2/Version.pm: release sync 2007-03-16 15:39 fredo * make_release.pl: fixed build/release versioning 2007-03-16 15:35 fredo * lib/PDF/API2/fonts/AUTHORS.txt lib/PDF/API2/fonts/BUGS.txt lib/PDF/API2/fonts/DejaVuSans-Bold.ttf lib/PDF/API2/fonts/DejaVuSans-BoldOblique.ttf lib/PDF/API2/fonts/DejaVuSans-ExtraLight.ttf lib/PDF/API2/fonts/DejaVuSans-Oblique.ttf lib/PDF/API2/fonts/DejaVuSans.ttf lib/PDF/API2/fonts/DejaVuSansCondensed-Bold.ttf lib/PDF/API2/fonts/DejaVuSansCondensed-BoldOblique.ttf lib/PDF/API2/fonts/DejaVuSansCondensed-Oblique.ttf lib/PDF/API2/fonts/DejaVuSansCondensed.ttf lib/PDF/API2/fonts/DejaVuSansMono-Bold.ttf lib/PDF/API2/fonts/DejaVuSansMono-BoldOblique.ttf lib/PDF/API2/fonts/DejaVuSansMono-Oblique.ttf lib/PDF/API2/fonts/DejaVuSansMono.ttf lib/PDF/API2/fonts/DejaVuSerif-Bold.ttf lib/PDF/API2/fonts/DejaVuSerif-BoldOblique.ttf lib/PDF/API2/fonts/DejaVuSerif-Oblique.ttf lib/PDF/API2/fonts/DejaVuSerif.ttf lib/PDF/API2/fonts/DejaVuSerifCondensed-Bold.ttf lib/PDF/API2/fonts/DejaVuSerifCondensed-BoldOblique.ttf lib/PDF/API2/fonts/DejaVuSerifCondensed-Oblique.ttf lib/PDF/API2/fonts/DejaVuSerifCondensed.ttf lib/PDF/API2/fonts/LICENSE.txt lib/PDF/API2/fonts/NEWS.txt lib/PDF/API2/fonts/README.txt lib/PDF/API2/fonts/langcover.txt lib/PDF/API2/fonts/status.txt lib/PDF/API2/fonts/unicover.txt: 2007-03-16 15:28 fredo * lib/PDF/API2.pm: replaced IOString dep. with scalar IO. 2007-03-16 15:27 fredo * lib/PDF/API2/Version.pm: release update 2007-03-16 15:26 fredo * lib/PDF/API2/Content.pm: removed silly grey-level handling 2007-03-16 15:25 fredo * lib/PDF/API2/Basic/PDF/File.pm: removed open_swallowed since it is not nedded anymore 2007-03-16 15:20 fredo * examples/011_open_update: genesis 2007-03-15 16:41 fredo * make_release.pl: genesis 2007-03-15 16:02 fredo * examples/040_annotation examples/050_pagelabels: update copyright 2007-03-15 15:58 fredo * examples/040_annotation: genesis 2007-03-15 14:15 fredo * lib/PDF/API2.pm: added pageLabel method 2007-03-14 19:30 fredo * lib/PDF/API2.pm: fixed -twocolumnright option typo 2007-03-12 16:24 fredo * lib/PDF/API2/Content.pm: removed eval from state calls 2007-03-10 12:18 fredo * lib/PDF/API2/Basic/PDF/Objind.pm: applied improvements to release proposed by alankila@bel.fi 2007-03-10 12:05 fredo * lib/PDF/API2/Resource/Font.pm: applied improvements to encodeByData proposed by alankila@bel.fi 2007-03-10 11:10 fredo * lib/PDF/API2/Basic/PDF/File.pm: fixed trailer detection to be more tolerant (towards pdf-spec 1.7) 2007-02-22 08:00 fredo * lib/PDF/API2.pm: changed import* methods to check its first arg -- thanks alankila2@yahoo.ca 2007-02-14 20:29 fredo * lib/PDF/API2/Resource/Font/CoreFont/courier.pm: fixed default encoding with bold 2007-02-14 11:44 fredo * lib/PDF/API2/Resource/Font/CoreFont/timesroman.pm: updated default encoding to that used by bold 2007-02-14 11:26 fredo * lib/PDF/API2/Content.pm: fixed advancewidth for space calculation 2007-02-14 11:22 fredo * lib/PDF/API2/Basic/PDF/File.pm: updated versioning to PDF::API2 2007-02-14 11:19 fredo * lib/PDF/API2/Basic/PDF/File.pm: fixed version update for interoperability 2007-01-04 17:39 fredo * lib/PDF/API2/Resource/CIDFont/TrueType/FontFile.pm: fixed [rt.cpan.org #24203] Incompatibility in Wide character handling 2007-01-04 16:33 fredo * lib/PDF/API2/Resource/BaseFont.pm: fix acro 8 fix 2007-01-04 16:02 fredo * .project lib/PDF/API2/Content.pm lib/PDF/API2/Resource/BaseFont.pm lib/PDF/API2/Resource/CIDFont.pm lib/PDF/API2/Resource/UniFont.pm: applied untested fix for acrobat 8 " TJ" bug 2006-08-14 18:11 fredo * lib/PDF/API2/Resource/BaseFont.pm: fixed wxByGlyph 2006-08-14 18:08 fredo * lib/PDF/API2/Resource/Font/Postscript.pm: moved "use io-file" to begin section 2006-08-01 19:45 fredo * MANIFEST: added dejavu fonts 2006-06-25 20:31 fredo * lib/PDF/API2/Version.pm: prepairing dejavu font inclusion 2006-06-19 19:25 fredo * lib/PDF/API2/Content.pm: fixed compress vs. Compress::ZLib subs 2006-06-19 19:22 fredo * lib/PDF/API2/Resource/CIDFont.pm: removed dup sub 2006-06-19 19:20 fredo * examples/022_truefonts: added details 2006-06-16 01:56 fredo * lib/PDF/API2/Version.pm: version 0.52 2006-06-15 21:12 fredo * examples/027_winfont: added cid map 2006-06-15 20:27 fredo * lib/PDF/API2/Basic/PDF/String.pm: modified escaped string conversion 2006-06-15 20:15 fredo * lib/PDF/API2/Basic/PDF/File.pm: beautification 2006-06-14 16:57 fredo * lib/PDF/API2/Resource/BaseFont.pm: fixed ToUnicode cmap greneration to use actual encoden rather than the default 2006-06-14 16:53 fredo * lib/PDF/API2/Resource/BaseFont.pm: fixed unicode lookup to use actual encoding rather than default 2005-11-16 02:52 fredo * META.yml Makefile.PL lib/PDF/API2/Version.pm: fix for 0.51 2005-11-02 19:21 fredo * lib/PDF/API2/Resource/CIDFont/TrueType/FontFile.pm: added kerning lookup strategy 2005-11-02 19:18 fredo * lib/PDF/API2/Page.pm: added get_(crop/bleed/trim/art)box methods 2005-10-22 21:56 fredo * lib/PDF/API2/Resource/CIDFont/TrueType/FontFile.pm: added mor agressive kerning strategy 2005-10-21 23:42 fredo * lib/PDF/API2/Basic/PDF/File.pm: speedup reading large dictionaries/structs 2005-10-21 23:42 fredo * lib/PDF/API2/IOString.pm: fixed tell tier 2005-10-21 21:52 fredo * lib/PDF/API2/Basic/PDF/File.pm: fixed readxrtr to be more strict to the latest pdf-spec 2005-10-21 21:51 fredo * lib/PDF/API2.pm: fixed proc_pages 2005-10-20 23:06 fredo * lib/PDF/API2.pm: documented '-dokern' option for ttfonts 2005-10-20 23:04 fredo * lib/PDF/API2/Resource/: CIDFont/TrueType.pm, CIDFont.pm, CIDFont/TrueType/FontFile.pm: added handling of optional kerning 2005-10-20 01:05 fredo * lib/PDF/API2/Resource/Font/Postscript.pm: silenced 'cannot parse' since it is usually no error 2005-10-19 23:23 fredo * lib/PDF/API2.pm: documented '-dokern' option for core- and psfonts 2005-10-19 21:12 fredo * lib/PDF/API2/Resource/Font/: Postscript.pm, CoreFont.pm: added handling of optional kerning 2005-10-19 21:08 fredo * lib/PDF/API2/Resource/UniFont.pm: added extended typographic text handling call 2005-10-19 21:07 fredo * lib/PDF/API2/Resource/Font.pm: added handling of composites in automap 2005-10-19 21:06 fredo * lib/PDF/API2/Resource/BaseFont.pm: added handling of kerning 2005-10-19 21:05 fredo * lib/PDF/API2/IOString.pm: ... 2005-10-19 21:04 fredo * lib/PDF/API2/Content.pm: added extended typographic text handling call 2005-10-02 01:38 fredo * lib/PDF/API2/Resource/Font/Postscript.pm: added kerning+composite parsing added nonembedding check 2005-10-02 00:41 fredo * lib/PDF/API2/Resource/Font/: BdFont.pm, CoreFont.pm, Postscript.pm: fixed font-naming race condition for multiple document updates 2005-10-02 00:30 fredo * lib/PDF/API2/Resource/CIDFont/TrueType.pm: fixed font-naming race condition for multiple document updates 2005-10-02 00:10 fredo * lib/PDF/API2/Content.pm: added more docs for textlabel 2005-09-28 19:02 fredo * lib/PDF/API2/Resource/XObject/Image/JPEG.pm: fixed iostring handling 2005-09-28 19:00 fredo * lib/PDF/API2/Resource/Font/CoreFont/courier.pm: added composites 2005-09-28 19:00 fredo * lib/PDF/API2/Resource/uniglyph.txt: added combiners 2005-09-26 22:07 fredo * lib/PDF/API2/Resource/Font/CoreFont.pm: added fontmetric stub 2005-09-26 22:06 fredo * lib/PDF/API2/Resource/Font.pm: removed composite glyphs from automap 2005-09-26 21:28 fredo * lib/PDF/API2/Resource/Font/CoreFont/courier.pm: no message 2005-09-12 18:56 fredo * lib/PDF/API2/Resource/Font/: CoreFont.pm, CoreFont/bankgothic.pm, CoreFont/courier.pm, CoreFont/courierbold.pm, CoreFont/courierboldoblique.pm, CoreFont/courieroblique.pm, CoreFont/georgia.pm, CoreFont/georgiabold.pm, CoreFont/georgiabolditalic.pm, CoreFont/georgiaitalic.pm, CoreFont/helvetica.pm, CoreFont/helveticabold.pm, CoreFont/helveticaboldoblique.pm, CoreFont/helveticaoblique.pm, CoreFont/symbol.pm, CoreFont/timesbold.pm, CoreFont/timesbolditalic.pm, CoreFont/timesitalic.pm, CoreFont/timesroman.pm, CoreFont/trebuchet.pm, CoreFont/trebuchetbold.pm, CoreFont/trebuchetbolditalic.pm, CoreFont/trebuchetitalic.pm, CoreFont/verdana.pm, CoreFont/verdanabold.pm, CoreFont/verdanabolditalic.pm, CoreFont/verdanaitalic.pm, CoreFont/webdings.pm, CoreFont/wingdings.pm, CoreFont/zapfdingbats.pm: applied mod_perl patch by Paul Schilling 2005-09-12 18:55 fredo * MANIFEST: added META.yml 2005-09-12 18:55 fredo * examples/: 020_corefonts, 022_truefonts, 023_cjkfonts, 025_unifonts, 027_winfont: various updates 2005-09-12 18:53 fredo * lib/PDF/: API2/Resource/CIDFont/TrueType.pm, API2/Basic/TTF/Cmap.pm, API2.pm: added -isocmap option 2005-09-12 18:52 fredo * lib/PDF/API2/Resource/CIDFont/TrueType/FontFile.pm: added -isocmap option; fixed cmap handling for fallback entries 2005-08-07 04:14 fredo * Makefile.PL: upd 2005-08-06 22:59 fredo * lib/PDF/API2/Page.pm: fixed anotation pdf-array again for other braindead softs 2005-06-17 21:43 fredo * lib/PDF/: API2.pm, API2/Annotation.pm, API2/Content.pm, API2/IOString.pm, API2/Lite.pm, API2/Matrix.pm, API2/NamedDestination.pm, API2/Outline.pm, API2/Outlines.pm, API2/Page.pm, API2/Resource.pm, API2/Shape.pm, API2/UniWrap.pm, API2/Util.pm, API2/Content/Text.pm, API2/Resource/BaseFont.pm, API2/Resource/CIDFont.pm, API2/Resource/ColorSpace.pm, API2/Resource/ExtGState.pm, API2/Resource/Font.pm, API2/Resource/Pattern.pm, API2/Resource/Shading.pm, API2/Resource/UniFont.pm, API2/Resource/XObject.pm, API2/Resource/CIDFont/CJKFont.pm, API2/Resource/CIDFont/TrueType.pm, API2/Resource/CIDFont/TrueType/FontFile.pm, API2/Resource/ColorSpace/DeviceN.pm, API2/Resource/ColorSpace/Indexed.pm, API2/Resource/ColorSpace/Separation.pm, API2/Resource/ColorSpace/Indexed/ACTFile.pm, API2/Resource/ColorSpace/Indexed/Hue.pm, API2/Resource/ColorSpace/Indexed/WebColor.pm, API2/Resource/Font/BdFont.pm, API2/Resource/Font/CoreFont.pm, API2/Resource/Font/Postscript.pm, API2/Resource/Font/SynFont.pm, API2/Resource/Shading/axial.pm, API2/Resource/XObject/Form.pm, API2/Resource/XObject/Image.pm, API2/Resource/XObject/Form/BarCode.pm, API2/Resource/XObject/Form/Hybrid.pm, API2/Resource/XObject/Form/BarCode/codabar.pm, API2/Resource/XObject/Form/BarCode/code128.pm, API2/Resource/XObject/Form/BarCode/code3of9.pm, API2/Resource/XObject/Form/BarCode/ean13.pm, API2/Resource/XObject/Form/BarCode/int2of5.pm, API2/Resource/XObject/Image/GD.pm, API2/Resource/XObject/Image/GIF.pm, API2/Resource/XObject/Image/JPEG.pm, API2/Resource/XObject/Image/PNG.pm, API2/Resource/XObject/Image/PNM.pm, API2/Resource/XObject/Image/TIFF.pm: fixed CPAN modulefile versioning (again) 2005-06-17 20:53 fredo * lib/PDF/: API2.pm, API2/Annotation.pm, API2/Content.pm, API2/IOString.pm, API2/Lite.pm, API2/Matrix.pm, API2/NamedDestination.pm, API2/Outline.pm, API2/Outlines.pm, API2/Page.pm, API2/Resource.pm, API2/Shape.pm, API2/UniWrap.pm, API2/Util.pm, API2/Version.pm, API2/Content/Text.pm, API2/Resource/BaseFont.pm, API2/Resource/CIDFont.pm, API2/Resource/ColorSpace.pm, API2/Resource/ExtGState.pm, API2/Resource/Font.pm, API2/Resource/Pattern.pm, API2/Resource/Shading.pm, API2/Resource/UniFont.pm, API2/Resource/XObject.pm, API2/Resource/CIDFont/CJKFont.pm, API2/Resource/CIDFont/TrueType.pm, API2/Resource/CIDFont/TrueType/FontFile.pm, API2/Resource/ColorSpace/DeviceN.pm, API2/Resource/ColorSpace/Indexed.pm, API2/Resource/ColorSpace/Separation.pm, API2/Resource/ColorSpace/Indexed/ACTFile.pm, API2/Resource/ColorSpace/Indexed/Hue.pm, API2/Resource/ColorSpace/Indexed/WebColor.pm, API2/Resource/Font/BdFont.pm, API2/Resource/Font/CoreFont.pm, API2/Resource/Font/Postscript.pm, API2/Resource/Font/SynFont.pm, API2/Resource/Shading/axial.pm, API2/Resource/XObject/Form.pm, API2/Resource/XObject/Image.pm, API2/Resource/XObject/Form/BarCode.pm, API2/Resource/XObject/Form/Hybrid.pm, API2/Resource/XObject/Form/BarCode/codabar.pm, API2/Resource/XObject/Form/BarCode/code128.pm, API2/Resource/XObject/Form/BarCode/code3of9.pm, API2/Resource/XObject/Form/BarCode/ean13.pm, API2/Resource/XObject/Form/BarCode/int2of5.pm, API2/Resource/XObject/Image/GD.pm, API2/Resource/XObject/Image/GIF.pm, API2/Resource/XObject/Image/JPEG.pm, API2/Resource/XObject/Image/PNG.pm, API2/Resource/XObject/Image/PNM.pm, API2/Resource/XObject/Image/TIFF.pm: fixed CPAN modulefile versioning (dislikes cvs) 2005-06-17 20:37 fredo * lib/PDF/API2/Basic/PDF/Pages.pm: added find_prop undef fix 2005-06-14 14:55 fredo * lib/PDF/API2/Annotation.pm: fixed typo for text annotation leaving it empty 2005-06-14 14:54 fredo * lib/PDF/API2/Page.pm: fix for existing annotation dictionary (ex. ScanSoft PDF) 2005-06-10 18:12 fredo * lib/PDF/API2.pm: documentation update 2005-06-08 01:21 fredo * lib/PDF/API2/Resource/Font/CoreFont/: bankgothic.pm, courier.pm, courierbold.pm, courierboldoblique.pm, courieroblique.pm, georgia.pm, georgiabold.pm, georgiabolditalic.pm, georgiaitalic.pm, helvetica.pm, helveticabold.pm, helveticaboldoblique.pm, helveticaoblique.pm, timesbold.pm, timesbolditalic.pm, timesitalic.pm, timesroman.pm, trebuchet.pm, trebuchetbold.pm, trebuchetbolditalic.pm, trebuchetitalic.pm, verdana.pm, verdanabold.pm, verdanabolditalic.pm, verdanaitalic.pm, wingdings.pm: fontkey correction 2005-06-02 14:59 fredo * lib/PDF/API2/Basic/PDF/File.pm: relaxed pdf-header detection 2005-05-29 11:48 fredo * lib/PDF/API2/Content.pm: added conditional textstate2 method 2005-05-29 11:47 fredo * lib/PDF/API2/Resource/Font/CoreFont.pm: cosmetic changes 2005-05-28 18:13 fredo * MANIFEST: added unicolor/unipaper.txt 2005-05-28 17:58 fredo * lib/PDF/API2/Resource/: unicolor.txt, unipaper.txt: genesis 2005-05-28 17:58 fredo * lib/PDF/API2/Util.pm: added xmldecl for markup code moved colors/pagesizes to separate files 2005-03-25 14:30 fredo * Makefile.PL: changed release level versioning vs. maintainance level 2005-03-25 14:19 fredo * lib/PDF/API2/Basic/PDF/File.pm: fixed string exhaustion in array reading 2005-03-23 17:42 fredo * lib/PDF/API2.pm: fixed typo in infoMetaAttributes 2005-03-21 23:36 fredo * lib/PDF/API2.pm: fix for landscape imports 2005-03-21 18:31 fredo * lib/PDF/API2/Resource/CIDFont/TrueType.pm: cleanup 2005-03-21 00:24 fredo * lib/PDF/API2/Resource/CIDFont/TrueType/FontFile.pm: added workaround for broken truetype naming-tables 2005-03-16 20:40 fredo * lib/PDF/API2/Resource/CIDFont/: CJKFont/adobesongstdlightacro.pm, CMap/simplified.pm: updated to latest spec (gb1-4) 2005-03-16 19:27 fredo * lib/PDF/API2/Resource/CIDFont/CJKFont/adobemingstdlightacro.pm: updated to latest spec 2005-03-16 19:27 fredo * lib/PDF/API2/Resource/CIDFont/CMap/traditional.pm: added ccs 2005-03-16 18:59 fredo * lib/PDF/API2/Resource/CIDFont/CMap/traditional.pm: updated to adobe cmap cns-1-4 2005-03-16 03:27 fredo * CONTACT: updated website and twiki 2005-03-15 18:31 fredo * lib/PDF/API2.pm: corrected utf8 handling in info tags 2005-03-15 18:29 fredo * Makefile.PL: fixed ppm creation 2005-03-15 03:20 fredo * lib/PDF/API2/Content.pm: added metadata stubs 2005-03-15 01:59 fredo * lib/PDF/API2/Util.pm: cleanup 2005-03-15 00:53 fredo * lib/PDF/API2.pm: added xmpMetadata method to get/set XMP document data 2005-03-15 00:51 fredo * lib/PDF/API2/Util.pm: beatification 2005-03-14 23:05 fredo * release.sh: genesis 2005-03-14 23:01 fredo * Makefile.PL, lib/PDF/API2.pm, lib/PDF/API2/Annotation.pm, lib/PDF/API2/Content.pm, lib/PDF/API2/HOWTO.pod, lib/PDF/API2/IOString.pm, lib/PDF/API2/Lite.pm, lib/PDF/API2/NamedDestination.pm, lib/PDF/API2/Outline.pm, lib/PDF/API2/Outlines.pm, lib/PDF/API2/Page.pm, lib/PDF/API2/Resource.pm, lib/PDF/API2/Shape.pm, lib/PDF/API2/UniWrap.pm, lib/PDF/API2/Util.pm, lib/PDF/API2/Version.pm, lib/PDF/API2/Win32.pm, lib/PDF/API2/Basic/PDF/Literal.pm, lib/PDF/API2/Content/Text.pm, lib/PDF/API2/Content/symbols.pm, lib/PDF/API2/Content/Text/Markup.pm, lib/PDF/API2/Resource/BaseFont.pm, lib/PDF/API2/Resource/CIDFont.pm, lib/PDF/API2/Resource/ColorSpace.pm, lib/PDF/API2/Resource/ExtGState.pm, lib/PDF/API2/Resource/Font.pm, lib/PDF/API2/Resource/Pattern.pm, lib/PDF/API2/Resource/Shading.pm, lib/PDF/API2/Resource/UniFont.pm, lib/PDF/API2/Resource/XObject.pm, lib/PDF/API2/Resource/CIDFont/CJKFont.pm, lib/PDF/API2/Resource/CIDFont/TrueType.pm, lib/PDF/API2/Resource/CIDFont/CJKFont/adobemingstdlightacro.pm, lib/PDF/API2/Resource/CIDFont/CJKFont/adobemyungjostdmediumacro.pm, lib/PDF/API2/Resource/CIDFont/CJKFont/adobesongstdlightacro.pm, lib/PDF/API2/Resource/CIDFont/CJKFont/kozgopromediumacro.pm, lib/PDF/API2/Resource/CIDFont/CJKFont/kozminproregularacro.pm, lib/PDF/API2/Resource/CIDFont/CMap/japanese.pm, lib/PDF/API2/Resource/CIDFont/CMap/korean.pm, lib/PDF/API2/Resource/CIDFont/CMap/simplified.pm, lib/PDF/API2/Resource/CIDFont/CMap/traditional.pm, lib/PDF/API2/Resource/CIDFont/TrueType/FontFile.pm, lib/PDF/API2/Resource/ColorSpace/DeviceN.pm, lib/PDF/API2/Resource/ColorSpace/Indexed.pm, lib/PDF/API2/Resource/ColorSpace/Separation.pm, lib/PDF/API2/Resource/ColorSpace/Indexed/ACTFile.pm, lib/PDF/API2/Resource/ColorSpace/Indexed/Hue.pm, lib/PDF/API2/Resource/ColorSpace/Indexed/WebColor.pm, lib/PDF/API2/Resource/Font/BdFont.pm, lib/PDF/API2/Resource/Font/CoreFont.pm, lib/PDF/API2/Resource/Font/Postscript.pm, lib/PDF/API2/Resource/Font/SynFont.pm, lib/PDF/API2/Resource/Font/CoreFont/bankgothic.pm, lib/PDF/API2/Resource/Font/CoreFont/courier.pm, lib/PDF/API2/Resource/Font/CoreFont/courierbold.pm, lib/PDF/API2/Resource/Font/CoreFont/courierboldoblique.pm, lib/PDF/API2/Resource/Font/CoreFont/courieroblique.pm, lib/PDF/API2/Resource/Font/CoreFont/georgia.pm, lib/PDF/API2/Resource/Font/CoreFont/georgiabold.pm, lib/PDF/API2/Resource/Font/CoreFont/georgiabolditalic.pm, lib/PDF/API2/Resource/Font/CoreFont/georgiaitalic.pm, lib/PDF/API2/Resource/Font/CoreFont/helvetica.pm, lib/PDF/API2/Resource/Font/CoreFont/helveticabold.pm, lib/PDF/API2/Resource/Font/CoreFont/helveticaboldoblique.pm, lib/PDF/API2/Resource/Font/CoreFont/helveticaoblique.pm, lib/PDF/API2/Resource/Font/CoreFont/symbol.pm, lib/PDF/API2/Resource/Font/CoreFont/timesbold.pm, lib/PDF/API2/Resource/Font/CoreFont/timesbolditalic.pm, lib/PDF/API2/Resource/Font/CoreFont/timesitalic.pm, lib/PDF/API2/Resource/Font/CoreFont/timesroman.pm, lib/PDF/API2/Resource/Font/CoreFont/trebuchet.pm, lib/PDF/API2/Resource/Font/CoreFont/trebuchetbold.pm, lib/PDF/API2/Resource/Font/CoreFont/trebuchetbolditalic.pm, lib/PDF/API2/Resource/Font/CoreFont/trebuchetitalic.pm, lib/PDF/API2/Resource/Font/CoreFont/verdana.pm, lib/PDF/API2/Resource/Font/CoreFont/verdanabold.pm, lib/PDF/API2/Resource/Font/CoreFont/verdanabolditalic.pm, lib/PDF/API2/Resource/Font/CoreFont/verdanaitalic.pm, lib/PDF/API2/Resource/Font/CoreFont/webdings.pm, lib/PDF/API2/Resource/Font/CoreFont/wingdings.pm, lib/PDF/API2/Resource/Font/CoreFont/zapfdingbats.pm, lib/PDF/API2/Resource/Shading/axial.pm, lib/PDF/API2/Resource/XObject/Form.pm, lib/PDF/API2/Resource/XObject/Image.pm, lib/PDF/API2/Resource/XObject/Form/BarCode.pm, lib/PDF/API2/Resource/XObject/Form/Hybrid.pm, lib/PDF/API2/Resource/XObject/Form/BarCode/codabar.pm, lib/PDF/API2/Resource/XObject/Form/BarCode/code128.pm, lib/PDF/API2/Resource/XObject/Form/BarCode/code3of9.pm, lib/PDF/API2/Resource/XObject/Form/BarCode/ean13.pm, lib/PDF/API2/Resource/XObject/Form/BarCode/int2of5.pm, lib/PDF/API2/Resource/XObject/Image/GD.pm, lib/PDF/API2/Resource/XObject/Image/GIF.pm, lib/PDF/API2/Resource/XObject/Image/JPEG.pm, lib/PDF/API2/Resource/XObject/Image/PNG.pm, lib/PDF/API2/Resource/XObject/Image/PNM.pm, lib/PDF/API2/Resource/XObject/Image/TIFF.pm, lib/PDF/API2/Shape/line.pm, lib/PDF/API2/Shape/polygon.pm, lib/PDF/API2/Shape/polyline.pm, lib/PDF/API2/Shape/sline.pm: upd 2005 2005-03-14 22:49 fredo * LICENSE: upd 2005 2005-03-14 22:48 fredo * Makefile.PL: merged manify patch by gunnar wolf 2005-03-14 21:26 fredo * lib/PDF/API2/Content.pm: added 'auto' value for -underline parameter in text fixed text line construction to to work under width==0 conditions 2005-02-28 19:00 fredo * lib/PDF/API2/Lite.pm: removed color method since businesscolor is not available anymore in PDF::API2 2005-02-25 19:07 fredo * lib/PDF/API2.pm: no message 2005-02-24 00:11 fredo * lib/PDF/API2/Basic/PDF/File.pm: workaround for illustrator/enfocus bug to import objects 2005-02-22 23:59 fredo * lib/PDF/API2/Content.pm: fixed infinite loop in paragraph if words longer than a paragraph are present. 2005-02-21 23:15 fredo * lib/PDF/API2/Basic/: PDF/Bool.pm, PDF/Filter.pm, TTF/Bsln.pm, TTF/Fdsc.pm, TTF/GDEF.pm, TTF/Hhea.pm, TTF/PCLT.pm, TTF/Ttopen.pm, TTF/Vhea.pm, TTF/Kern/CompactClassArray.pm: correcting NAME section, thanks to SAPER 2005-02-17 15:50 fredo * Makefile: some 2005-02-17 08:03 fredo * lib/PDF/API2.pm: added 'pageencaps' default option to fix unusual styled content streams 2005-02-14 21:09 fredo * lib/PDF/API2.pm: fixed an openpage recompression bug / thanks to steve_wu@iinet.net.au 2005-02-11 20:11 fredo * lib/PDF/API2/IOString.pm: added binmode hack 2005-02-11 19:48 fredo * lib/PDF/API2/Util.pm: added getPaperSizes method to help fix PDF::Report. 2005-02-07 20:34 fredo * Makefile.PL: added ppmdist target for our windows friends 2005-02-07 20:31 fredo * lib/PDF/API2/Content.pm: fixed reset of textlinematrix on textmatrix set/resets 2005-01-24 12:46 fredo * lib/PDF/API2/Basic/PDF/File.pm: fixed rt.cpan.org: Ticket #11137 Error in File.pm & FileAPI.pm 2005-01-21 11:19 fredo * lib/PDF/API2/Content.pm: added spline operator 2005-01-21 11:04 fredo * lib/PDF/API2/Resource/Font/CoreFont.pm: rewrite fontproxy comment 2005-01-21 11:03 fredo * lib/PDF/API2/Resource/BaseFont.pm: added object saver for cmap 2005-01-21 11:01 fredo * lib/PDF/API2/Resource/CIDFont/TrueType.pm: added -nosubset option 2005-01-21 11:00 fredo * lib/PDF/API2/Resource/CIDFont/TrueType/FontFile.pm: added handling of nosubset option 2005-01-21 02:27 fredo * lib/PDF/API2/Basic/PDF/Dict.pm: added object saver for prepared stream+filter 2005-01-20 20:58 fredo * lib/PDF/API2/Resource/XObject/Image/TIFF.pm: cleaned up handler and ccitt mode 2005-01-03 06:01 fredo * examples/040_named_dest: genesis 2005-01-03 06:00 fredo * lib/PDF/API2/Annotation.pm: changed default behavior of border 2005-01-03 05:17 fredo * lib/PDF/API2/NamedDestination.pm: fixed dict creation 2005-01-03 05:17 fredo * lib/PDF/API2/Annotation.pm: fixed link bug 2005-01-03 04:47 fredo * lib/PDF/API2.pm: fixed use named destination 2005-01-03 04:46 fredo * lib/PDF/API2.pm: added named destination support 2005-01-03 04:34 fredo * MANIFEST: added NamedDestination.pm 2005-01-03 04:31 fredo * lib/PDF/API2/NamedDestination.pm: genesis 2005-01-03 04:29 fredo * lib/PDF/API2/Annotation.pm: removed code duplication 2005-01-03 02:16 fredo * lib/PDF/API2/Content.pm: fixed textpos tracking in nl method 2005-01-03 01:33 fredo * lib/PDF/API2/Outline.pm: added named destination support 2005-01-03 01:30 fredo * lib/PDF/API2/Annotation.pm: added named destination support 2004-12-31 04:59 fredo * lib/PDF/API2/Content.pm: fixed paragraph and text_fill_* methods (thanks to Shawn Corey ) 2004-12-31 04:12 fredo * lib/PDF/: API2.pm, API2/Util.pm: no message 2004-12-31 04:08 fredo * MANIFEST: added new examples 2004-12-31 04:04 fredo * examples/: 024_bmpfonts, 025_unifonts, 026_unifont2, 027_winfont, 020_textrise, 020_textunderline: genesis 2004-12-31 03:58 fredo * examples/: 021_synfonts, 022_truefonts, 023_cjkfonts: no message 2004-12-31 03:53 fredo * lib/PDF/API2/Content.pm: minor code corrections 2004-12-31 03:06 fredo * lib/PDF/API2/Content.pm: fixed textpos calculation, added underline capability (thanks to Shawn Corey ) 2004-12-29 23:01 fredo * lib/PDF/API2/Content.pm: advancewidth now can take a virtual textstate 2004-12-29 02:48 fredo * lib/PDF/API2/Content.pm: fixed _font method 2004-12-29 02:45 fredo * lib/PDF/API2/Win32.pm: fixed no warn for recursion 2004-12-29 02:16 fredo * Makefile.PL: added version pod 2004-12-29 02:14 fredo * lib/PDF/API2/Content.pm: added virtual attribute support 2004-12-29 02:13 fredo * lib/PDF/API2/Resource/Font/SynFont.pm: documented -caps option 2004-12-29 02:12 fredo * lib/PDF/API2/: Resource/CIDFont/TrueType/FontFile.pm, Util.pm: fixed no warn for recursion 2004-12-29 01:53 fredo * lib/PDF/API2/Resource/uniglyph.txt: fixed .notdef glyph 2004-12-28 18:23 fredo * lib/PDF/API2/Resource/Font/CoreFont/: timesroman.pm, zapfdingbats.pm: updated to new adobe afm 2004-12-28 18:23 fredo * lib/PDF/API2/Resource/Font/CoreFont/bankgothic.pm: added new 'Euro' glyph 2004-12-20 13:11 fredo * lib/PDF/API2/Content.pm: added fontset method to not set via 'Tf' 2004-12-17 19:35 fredo * lib/PDF/API2/Resource/uniglyph.txt: added adobe combining characters 2004-12-16 02:09 fredo * lib/PDF/API2/Resource/Font/CoreFont/: courier.pm, zapfdingbats.pm: updated to new adobe afm 2004-12-16 01:43 fredo * examples/020_corefonts: added full list of fonts and encoding latin1-10 2004-12-16 01:30 fredo * lib/PDF/: API2.pm, API2/Annotation.pm, API2/Content.pm, API2/IOString.pm, API2/Lite.pm, API2/Matrix.pm, API2/Outline.pm, API2/Outlines.pm, API2/Page.pm, API2/Resource.pm, API2/Shape.pm, API2/UniWrap.pm, API2/Util.pm, API2/Version.pm, API2/Win32.pm, API2/Basic/PDF/Array.pm, API2/Basic/PDF/Bool.pm, API2/Basic/PDF/Dict.pm, API2/Basic/PDF/File.pm, API2/Basic/PDF/Filter.pm, API2/Basic/PDF/Literal.pm, API2/Basic/PDF/Name.pm, API2/Basic/PDF/Null.pm, API2/Basic/PDF/Number.pm, API2/Basic/PDF/Objind.pm, API2/Basic/PDF/Page.pm, API2/Basic/PDF/Pages.pm, API2/Basic/PDF/String.pm, API2/Basic/PDF/Utils.pm, API2/Content/Text.pm, API2/Resource/BaseFont.pm, API2/Resource/CIDFont.pm, API2/Resource/ColorSpace.pm, API2/Resource/ExtGState.pm, API2/Resource/Font.pm, API2/Resource/Pattern.pm, API2/Resource/Shading.pm, API2/Resource/UniFont.pm, API2/Resource/XObject.pm, API2/Resource/CIDFont/CJKFont.pm, API2/Resource/CIDFont/TrueType.pm, API2/Resource/CIDFont/TrueType/FontFile.pm, API2/Resource/ColorSpace/DeviceN.pm, API2/Resource/ColorSpace/Indexed.pm, API2/Resource/ColorSpace/Separation.pm, API2/Resource/ColorSpace/Indexed/ACTFile.pm, API2/Resource/ColorSpace/Indexed/Hue.pm, API2/Resource/ColorSpace/Indexed/WebColor.pm, API2/Resource/Font/BdFont.pm, API2/Resource/Font/CoreFont.pm, API2/Resource/Font/Postscript.pm, API2/Resource/Font/SynFont.pm, API2/Resource/XObject/Form.pm, API2/Resource/XObject/Image.pm, API2/Resource/XObject/Form/BarCode.pm, API2/Resource/XObject/Form/Hybrid.pm, API2/Resource/XObject/Form/BarCode/codabar.pm, API2/Resource/XObject/Form/BarCode/code128.pm, API2/Resource/XObject/Form/BarCode/code3of9.pm, API2/Resource/XObject/Form/BarCode/ean13.pm, API2/Resource/XObject/Form/BarCode/int2of5.pm, API2/Resource/XObject/Image/GD.pm, API2/Resource/XObject/Image/GIF.pm, API2/Resource/XObject/Image/JPEG.pm, API2/Resource/XObject/Image/PNG.pm, API2/Resource/XObject/Image/PNM.pm, API2/Resource/XObject/Image/TIFF.pm: added no warn for recursion 2004-12-15 17:44 fredo * lib/PDF/API2/Content.pm: added condition to apply font (Tf) only when needed 2004-11-29 16:57 fredo * lib/PDF/API2/Resource/UniFont.pm: added docs for unifont 2004-11-29 16:19 fredo * lib/PDF/API2.pm: added docs for bdfont, synfont and unifont 2004-11-29 11:00 fredo * lib/PDF/API2/Resource/Font/SynFont.pm: added charspacer docs 2004-11-26 16:14 fredo * lib/PDF/API2/Resource/Font/SynFont.pm: fixed docs 2004-11-26 16:10 fredo * lib/PDF/API2/Resource/Font/SynFont.pm: added spacer mod option 2004-11-26 02:25 fredo * lib/PDF/API2/Resource/Font.pm: added unicode block mapping 2004-11-26 02:24 fredo * lib/PDF/API2/Resource/Font/CoreFont/webdings.pm: fixed unicode mapping 2004-11-26 00:51 fredo * lib/PDF/API2/Resource/UniFont.pm: added -encode option and handling 2004-11-26 00:50 fredo * lib/PDF/API2/Resource/Font.pm: fixed unicode maps for unmapped corefonts 2004-11-25 21:53 fredo * lib/PDF/API2/Content.pm: fixed unifont registration 2004-11-25 20:56 fredo * lib/PDF/API2/UniWrap.pm: genesis 2004-11-25 20:55 fredo * MANIFEST: added uniwrap 2004-11-25 16:30 fredo * lib/PDF/API2/Basic/: PDF/File.pm, PDF/Filter.pm, PDF/Objind.pm, TTF/Coverage.pm, TTF/Font.pm, TTF/Table.pm: fixed explicit release on scalar 2004-11-25 16:07 fredo * lib/PDF/API2/Resource/CIDFont/CJKFont.pm: fixed prototype warning 2004-11-24 21:13 fredo * MANIFEST: added unifont 2004-11-24 21:12 fredo * TODO: update 2004-11-24 21:11 fredo * lib/PDF/API2/Resource/UniFont.pm: genesis 2004-11-24 21:10 fredo * lib/PDF/API2/Resource/: BaseFont.pm, CIDFont.pm, Font.pm: added virtual font handling 2004-11-24 21:10 fredo * lib/PDF/API2/Content.pm: added virtual font handling, fixed var shadow bug 2004-11-24 21:09 fredo * lib/PDF/API2.pm: added unifont 2004-11-22 22:07 fredo * lib/PDF/API2/Resource/: CIDFont.pm, CIDFont/CJKFont.pm, CIDFont/TrueType.pm, CIDFont/TrueType/FontFile.pm: fixed multibyte-encoding support to work consistently acress cjk/ttf/otf 2004-11-22 17:07 fredo * MANIFEST: added TODO + uniglyph.txt 2004-11-22 17:07 fredo * TODO: genesis 2004-11-22 03:34 fredo * lib/PDF/API2/Util.pm: moved unicode+glyphs to better maintainable uniglyph.txt 2004-11-22 03:31 fredo * lib/PDF/API2/Basic/PDF/Utils.pm: added hexstring shortcut 2004-11-22 03:31 fredo * lib/PDF/API2/Basic/PDF/String.pm: speed fix 2004-11-22 03:25 fredo * lib/PDF/API2/Resource/CIDFont/TrueType/FontFile.pm: added advanced attributes 2004-11-22 03:08 fredo * lib/PDF/API2/Resource/Font/CoreFont.pm: aaa 2004-11-22 03:05 fredo * lib/PDF/API2/Resource/BaseFont.pm: added pdf-1.5 font param specs 2004-11-22 03:04 fredo * lib/PDF/API2/Resource/CIDFont/CJKFont.pm: added missing substitutes 2004-11-22 03:02 fredo * lib/PDF/API2/Resource/CIDFont/CJKFont/: kozminproregularacro.pm, kozgopromediumacro.pm: deleted obsolete character widths 2004-11-22 02:05 fredo * lib/PDF/API2/Resource/CIDFont/CMap/korean.pm: updated to korea1-2 spec 2004-11-22 02:04 fredo * lib/PDF/API2/Resource/CIDFont/CJKFont/: adobemyungjostdmediumacro.pm, kozminproregularacro.pm: added advanced attributes 2004-11-22 02:03 fredo * lib/PDF/API2/Resource/CIDFont/CJKFont.pm: fixed supplement set, added substitute handling 2004-11-21 04:20 fredo * lib/PDF/API2/Resource/CIDFont/CMap/japanese.pm: fixed cidmap to adobe japan1 supl 6 2004-11-21 03:58 fredo * lib/PDF/API2/Resource/CIDFont/CJKFont.pm: fixed multibyte encoding issues 2004-11-21 03:58 fredo * lib/PDF/API2/Resource/uniglyph.txt: genesis 2004-11-21 03:57 fredo * lib/PDF/API2/Resource/CIDFont.pm: cosmetic change 2004-10-26 16:46 fredo * lib/PDF/API2/Resource/CIDFont/CJKFont/: adobemingstdlightacro.pm, adobemyungjostdmediumacro.pm, adobesongstdlightacro.pm, kozgopromediumacro.pm, kozminproregularacro.pm: added alternative glyph-width storage 2004-10-26 16:42 fredo * lib/PDF/API2/Resource/: CIDFont.pm, CIDFont/CJKFont.pm: added alternative glyph-width storage/retrieval 2004-10-26 16:41 fredo * lib/PDF/API2/Resource/BaseFont.pm: added panose identification style entry 2004-10-26 13:34 fredo * lib/PDF/API2/Content.pm: reworked text_fill for paragraph, but still being development 2004-10-24 22:31 fredo * lib/PDF/API2/Resource/CIDFont/CMap/japanese.pm: updated to Adobe-Japan1 rev 4 2004-10-17 06:07 fredo * Makefile.PL: added option shorts and usage 2004-10-17 05:58 fredo * Makefile.PL: removed version fuss 2004-10-17 05:57 fredo * lib/PDF/API2.pm: added ToUnicode call for supported fonts 2004-10-17 05:55 fredo * lib/PDF/API2/Resource/BaseFont.pm: simplified ToUnicode associated CMap for single-byte fonts 2004-10-17 05:47 fredo * lib/PDF/API2/Resource/BaseFont.pm: fixed inclusion of ToUnicode compatible key and associated CMap 2004-10-17 05:46 fredo * lib/PDF/API2/Resource/Font.pm: restructured encoding vs. unicode vs. glyph-name lookup 2004-10-13 20:30 fredo * lib/PDF/API2/Annotation.pm: fixed pdfile method from utf8 back to ascii 2004-10-11 09:54 fredo * lib/PDF/API2/Annotation.pm: fixed file method from utf8 back to ascii 2004-10-01 03:39 fredo * lib/PDF/API2.pm: reverted annotations import fix 2004-10-01 03:20 fredo * lib/PDF/API2/Annotation.pm: fixed url link annotation to 7-bit ascii as per pdf-spec-1.5 2004-10-01 03:06 fredo * Makefile.PL: fixed versioning 2004-10-01 02:37 fredo * Makefile.PL: modded version hex schema 2004-10-01 01:57 fredo * Makefile.PL: implemented devel options 2004-10-01 01:57 fredo * lib/PDF/API2.pm: versioning beautify 2004-10-01 00:41 fredo * lib/PDF/API2/Version.pm: updated to current state 2004-10-01 00:40 fredo * lib/PDF/API2.pm: fixed pdf-producer to include OS 2004-10-01 00:37 fredo * MANIFEST: added back Version.pm removed tests 2004-10-01 00:36 fredo * Makefile.PL: changed versioning back to version.pm 2004-09-30 23:18 fredo * lib/PDF/API2.pm: changed file version back to cvs 2004-09-22 16:12 fredo * lib/PDF/API2/Basic/PDF/Dict.pm: fixed stream length calculation for acrobat 6 2004-09-20 14:01 fredo * lib/PDF/API2/Basic/PDF/File.pm: worked around broken dict-key by acrobat 5 2004-09-20 13:22 fredo * lib/PDF/API2.pm: added default param to fix import-rotation added default param to fix annotation-import 2004-09-13 17:30 fredo * examples/032_separation: added All/None Separation CS 2004-09-13 17:27 fredo * lib/PDF/API2/Page.pm: added rotate for acrobat-wise pdf-creators 2004-09-03 14:35 fredo * lib/PDF/API2.pm: pop'd to new version 2004-09-03 14:33 fredo * lib/PDF/API2/Basic/PDF/File.pm: fixed binary stream reading by update method 2004-08-31 15:50 fredo * lib/PDF/API2/Content.pm: fixed space vs. whitespace split bug 2004-08-25 05:03 fredo * lib/PDF/API2/Resource/CIDFont/TrueType/FontFile.pm: removed fuss 2004-08-25 04:59 fredo * lib/PDF/API2.pm: disabled memoize since long-running scripts bug from reused adresses 2004-07-29 13:06 fredo * lib/PDF/API2/Resource/XObject/Form/BarCode/int2of5.pm: fixed encode 2004-07-29 12:48 fredo * lib/PDF/API2/Basic/PDF/Utils.pm: added PDFLiteral and PDFNull methods 2004-07-29 12:47 fredo * lib/PDF/API2/Outline.pm: fixed "null vs. 0" bug of -xyz option 2004-07-29 12:46 fredo * lib/PDF/API2/Content.pm: added new text_fill_* methods and a simple paragraph 2004-07-25 01:38 fredo * lib/PDF/API2/Resource/XObject/Image/PNM.pm: added new headerparser and simplified loading 2004-07-25 01:38 fredo * lib/PDF/API2/Basic/PDF/Filter.pm: some 2004-07-25 01:33 fredo * lib/PDF/API2/Resource/Font/BdFont.pm: added compression 2004-07-25 01:10 fredo * lib/PDF/API2.pm: fixed memoize bug for bdf fonts 2004-07-25 01:09 fredo * lib/PDF/API2.pm: added bdf fonts 2004-07-25 01:08 fredo * lib/PDF/API2/Resource/Font/BdFont.pm: genesis 2004-07-23 15:41 fredo * lib/PDF/API2.pm: fixed in decoding info dictionary 2004-07-21 10:07 fredo * lib/PDF/API2.pm: added devicen colorspace 2004-07-20 22:31 fredo * MANIFEST: deleted changelog.pre added devicen.pm 2004-07-20 22:28 fredo * lib/PDF/API2/Resource/ColorSpace/Separation.pm: added tintname accessor 2004-07-20 22:27 fredo * lib/PDF/API2/Resource/ColorSpace/DeviceN.pm, examples/033_deviceN: genesis 2004-07-15 16:35 fredo * lib/PDF/API2/Resource/ColorSpace.pm: added type accessor 2004-07-15 16:28 fredo * lib/PDF/API2.pm: added devicen colorspace 2004-07-15 16:14 fredo * lib/PDF/API2/Resource/ColorSpace/Separation.pm: added type and color accessor 2004-07-15 16:13 fredo * lib/PDF/API2/Resource/ColorSpace/Indexed.pm: added type accessor 2004-07-13 20:09 fredo * t/020corecoit.t, t/020corecour.t, t/020coreheit.t, t/020coretiro.t, t/020corevebi.t, t/020coreverd.t, t/022core____.t, t/028psf_all.t, .cvsignore, .project, Makefile, t/020corecobi.t, t/020corecobo.t, t/020corehebi.t, t/020corehebo.t, t/020corehelv.t, t/020coretibi.t, t/020coretibo.t, t/020coretiit.t, t/020coretrbi.t, t/020coretrbo.t, t/020coretreb.t, t/020coretrit.t, t/020corevebo.t, t/020coreveit.t, t/029ttf_all.t: genesis 2004-06-22 03:33 fredo * lib/PDF/API2.pm: corrected spelling 2004-06-22 02:38 fredo * lib/PDF/API2/Resource/: Pattern.pm, Shading.pm: fixed ISA 2004-06-22 00:40 fredo * MANIFEST: added pattern/shading 2004-06-22 00:33 fredo * lib/PDF/: API2.pm, API2/Content.pm, API2/Util.pm, API2/Resource/Pattern.pm, API2/Resource/Shading.pm: added basic pattern/shading handling 2004-06-22 00:25 fredo * lib/PDF/API2/Resource/Font/CoreFont.pm: added custom corefont handling 2004-06-15 18:48 fredo * MANIFEST: removed shapes 2004-06-15 18:44 fredo * lib/PDF/API2/Basic/PDF/File.pm: jaws import workaround fix for broken xrefs 2004-06-15 11:16 fredo * MANIFEST: removed Version.pm 2004-06-15 11:14 fredo * lib/PDF/API2/: Basic/TTF/Maxp.pm, Basic/TTF/Mort.pm, Basic/TTF/Name.pm, Basic/TTF/OS_2.pm, Basic/TTF/OldCmap.pm, Basic/TTF/OldMort.pm, Basic/TTF/PCLT.pm, Basic/TTF/PSNames.pm, Basic/TTF/Post.pm, Basic/TTF/Prep.pm, Basic/TTF/Prop.pm, Basic/TTF/Segarr.pm, Basic/TTF/Table.pm, Basic/TTF/Ttc.pm, Basic/TTF/Ttopen.pm, Basic/TTF/Useall.pm, Basic/TTF/Utils.pm, Basic/TTF/Vhea.pm, Basic/TTF/Vmtx.pm, Basic/TTF/Win32.pm, Basic/TTF/XMLparse.pm, Basic/TTF/Kern/ClassArray.pm, Basic/TTF/Kern/CompactClassArray.pm, Basic/TTF/Kern/OrderedList.pm, Basic/TTF/Kern/StateTable.pm, Basic/TTF/Kern/Subtable.pm, Basic/TTF/Mort/Chain.pm, Basic/TTF/Mort/Contextual.pm, Basic/TTF/Mort/Insertion.pm, Basic/TTF/Mort/Ligature.pm, Basic/TTF/Mort/Noncontextual.pm, Basic/TTF/Mort/Rearrangement.pm, Basic/TTF/Mort/Subtable.pm, Content/Text.pm, Content/symbols.pm, Content/Text/Markup.pm, Resource/BaseFont.pm, Resource/CIDFont.pm, Resource/ColorSpace.pm, Resource/ExtGState.pm, Resource/Font.pm, Resource/Shading.pm, Resource/XObject.pm, Resource/CIDFont/CJKFont.pm, Resource/CIDFont/TrueType.pm, Resource/CIDFont/CJKFont/adobemingstdlightacro.pm, Resource/CIDFont/CJKFont/adobemyungjostdmediumacro.pm, Resource/CIDFont/CJKFont/adobesongstdlightacro.pm, Resource/CIDFont/CJKFont/kozgopromediumacro.pm, Resource/CIDFont/CJKFont/kozminproregularacro.pm, Resource/CIDFont/CMap/japanese.pm, Resource/CIDFont/CMap/korean.pm, Resource/CIDFont/CMap/simplified.pm, Resource/CIDFont/CMap/traditional.pm, Resource/CIDFont/TrueType/FontFile.pm, Resource/ColorSpace/Indexed.pm, Resource/ColorSpace/Separation.pm, Resource/ColorSpace/Indexed/ACTFile.pm, Resource/ColorSpace/Indexed/Hue.pm, Resource/ColorSpace/Indexed/WebColor.pm, Resource/Font/CoreFont.pm, Resource/Font/Postscript.pm, Resource/Font/SynFont.pm, Resource/Font/CoreFont/bankgothic.pm, Resource/Font/CoreFont/courier.pm, Resource/Font/CoreFont/courierbold.pm, Resource/Font/CoreFont/courierboldoblique.pm, Resource/Font/CoreFont/courieroblique.pm, Resource/Font/CoreFont/georgia.pm, Resource/Font/CoreFont/georgiabold.pm, Resource/Font/CoreFont/georgiabolditalic.pm, Resource/Font/CoreFont/georgiaitalic.pm, Resource/Font/CoreFont/helvetica.pm, Resource/Font/CoreFont/helveticabold.pm, Resource/Font/CoreFont/helveticaboldoblique.pm, Resource/Font/CoreFont/helveticaoblique.pm, Resource/Font/CoreFont/symbol.pm, Resource/Font/CoreFont/timesbold.pm, Resource/Font/CoreFont/timesbolditalic.pm, Resource/Font/CoreFont/timesitalic.pm, Resource/Font/CoreFont/timesroman.pm, Resource/Font/CoreFont/trebuchet.pm, Resource/Font/CoreFont/trebuchetbold.pm, Resource/Font/CoreFont/trebuchetbolditalic.pm, Resource/Font/CoreFont/trebuchetitalic.pm, Resource/Font/CoreFont/verdana.pm, Resource/Font/CoreFont/verdanabold.pm, Resource/Font/CoreFont/verdanabolditalic.pm, Resource/Font/CoreFont/verdanaitalic.pm, Resource/Font/CoreFont/webdings.pm, Resource/Font/CoreFont/wingdings.pm, Resource/Font/CoreFont/zapfdingbats.pm, Resource/Shading/axial.pm, Resource/XObject/Form.pm, Resource/XObject/Image.pm, Resource/XObject/Form/BarCode.pm, Resource/XObject/Form/Hybrid.pm, Resource/XObject/Form/BarCode/codabar.pm, Resource/XObject/Form/BarCode/code128.pm, Resource/XObject/Form/BarCode/code3of9.pm, Resource/XObject/Form/BarCode/ean13.pm, Resource/XObject/Form/BarCode/int2of5.pm, Resource/XObject/Image/GD.pm, Resource/XObject/Image/GIF.pm, Resource/XObject/Image/JPEG.pm, Resource/XObject/Image/PNG.pm, Resource/XObject/Image/PNM.pm, Resource/XObject/Image/TIFF.pm, Shape/line.pm, Shape/polygon.pm, Shape/polyline.pm, Shape/sline.pm: removed cr+lf 2004-06-15 11:11 fredo * lib/PDF/API2/: Annotation.pm, Content.pm, IOString.pm, Lite.pm, Matrix.pm, Outline.pm, Outlines.pm, Page.pm, Resource.pm, Shape.pm, Util.pm, Win32.pm, Basic/PDF/Array.pm, Basic/PDF/Bool.pm, Basic/PDF/Dict.pm, Basic/PDF/File.pm, Basic/PDF/Filter.pm, Basic/PDF/Literal.pm, Basic/PDF/Name.pm, Basic/PDF/Null.pm, Basic/PDF/Number.pm, Basic/PDF/Objind.pm, Basic/PDF/Page.pm, Basic/PDF/Pages.pm, Basic/PDF/String.pm, Basic/PDF/Utils.pm, Basic/TTF/AATKern.pm, Basic/TTF/AATutils.pm, Basic/TTF/Anchor.pm, Basic/TTF/Bsln.pm, Basic/TTF/Cmap.pm, Basic/TTF/Coverage.pm, Basic/TTF/Cvt_.pm, Basic/TTF/Delta.pm, Basic/TTF/Fdsc.pm, Basic/TTF/Feat.pm, Basic/TTF/Fmtx.pm, Basic/TTF/Font.pm, Basic/TTF/Fpgm.pm, Basic/TTF/GDEF.pm, Basic/TTF/GPOS.pm, Basic/TTF/GSUB.pm, Basic/TTF/Glyf.pm, Basic/TTF/Glyph.pm, Basic/TTF/Hdmx.pm, Basic/TTF/Head.pm, Basic/TTF/Hhea.pm, Basic/TTF/Hmtx.pm, Basic/TTF/Kern.pm, Basic/TTF/LTSH.pm, Basic/TTF/Loca.pm: removed cr+lf 2004-06-15 11:06 fredo * lib/PDF/API2.pm: forced version to 1.50 for beta state 2004-06-15 11:03 fredo * lib/PDF/: API2.pm: changed versioning back to API.pm 2004-06-15 11:00 fredo * Makefile.PL: changed versioning to API.pm 2004-06-15 10:09 fredo * lib/PDF/API2.pm: fixed memoized bug 2004-06-11 14:56 fredo * lib/PDF/API2/Resource/XObject/Form/BarCode/code128.pm: fixed encode bug 2004-06-09 18:30 fredo * lib/PDF/API2/Version.pm: release 0.40_22 2004-06-09 18:29 fredo * lib/PDF/API2/Page.pm: fixed named page size handling for *box methods 2004-06-07 21:43 fredo * lib/PDF/API2/Annotation.pm, lib/PDF/API2/Content.pm, lib/PDF/API2/HOWTO.pod, lib/PDF/API2/IOString.pm, lib/PDF/API2/Lite.pm, lib/PDF/API2/Matrix.pm, lib/PDF/API2/Outline.pm, lib/PDF/API2/Outlines.pm, lib/PDF/API2/Page.pm, lib/PDF/API2/Resource.pm, lib/PDF/API2/Shape.pm, lib/PDF/API2/Util.pm, lib/PDF/API2/Version.pm, lib/PDF/API2/Win32.pm, lib/PDF/API2/Basic/PDF/Array.pm, lib/PDF/API2/Basic/PDF/Bool.pm, lib/PDF/API2/Basic/PDF/Dict.pm, lib/PDF/API2/Basic/PDF/File.pm, lib/PDF/API2/Basic/PDF/Filter.pm, lib/PDF/API2/Basic/PDF/Literal.pm, lib/PDF/API2/Basic/PDF/Name.pm, lib/PDF/API2/Basic/PDF/Null.pm, lib/PDF/API2/Basic/PDF/Number.pm, lib/PDF/API2/Basic/PDF/Objind.pm, lib/PDF/API2/Basic/PDF/Page.pm, lib/PDF/API2/Basic/PDF/Pages.pm, lib/PDF/API2/Basic/PDF/String.pm, lib/PDF/API2/Basic/PDF/Utils.pm, lib/PDF/API2/Basic/TTF/AATKern.pm, lib/PDF/API2/Basic/TTF/AATutils.pm, lib/PDF/API2/Basic/TTF/Anchor.pm, lib/PDF/API2/Basic/TTF/Bsln.pm, lib/PDF/API2/Basic/TTF/Changes, lib/PDF/API2/Basic/TTF/Cmap.pm, lib/PDF/API2/Basic/TTF/Coverage.pm, lib/PDF/API2/Basic/TTF/Cvt_.pm, lib/PDF/API2/Basic/TTF/Delta.pm, lib/PDF/API2/Basic/TTF/Fdsc.pm, lib/PDF/API2/Basic/TTF/Feat.pm, lib/PDF/API2/Basic/TTF/Fmtx.pm, lib/PDF/API2/Basic/TTF/Font.pm, lib/PDF/API2/Basic/TTF/Fpgm.pm, lib/PDF/API2/Basic/TTF/GDEF.pm, lib/PDF/API2/Basic/TTF/GPOS.pm, lib/PDF/API2/Basic/TTF/GSUB.pm, lib/PDF/API2/Basic/TTF/Glyf.pm, lib/PDF/API2/Basic/TTF/Glyph.pm, lib/PDF/API2/Basic/TTF/Hdmx.pm, lib/PDF/API2/Basic/TTF/Head.pm, lib/PDF/API2/Basic/TTF/Hhea.pm, lib/PDF/API2/Basic/TTF/Hmtx.pm, lib/PDF/API2/Basic/TTF/Kern.pm, lib/PDF/API2/Basic/TTF/LTSH.pm, lib/PDF/API2/Basic/TTF/Loca.pm, lib/PDF/API2/Basic/TTF/Manual.pod, lib/PDF/API2/Basic/TTF/Maxp.pm, lib/PDF/API2/Basic/TTF/Mort.pm, lib/PDF/API2/Basic/TTF/Name.pm, lib/PDF/API2/Basic/TTF/OS_2.pm, lib/PDF/API2/Basic/TTF/OldCmap.pm, lib/PDF/API2/Basic/TTF/OldMort.pm, lib/PDF/API2/Basic/TTF/PCLT.pm, lib/PDF/API2/Basic/TTF/PSNames.pm, lib/PDF/API2/Basic/TTF/Post.pm, lib/PDF/API2/Basic/TTF/Prep.pm, lib/PDF/API2/Basic/TTF/Prop.pm, lib/PDF/API2/Basic/TTF/Segarr.pm, lib/PDF/API2/Basic/TTF/Table.pm, lib/PDF/API2/Basic/TTF/Ttc.pm, lib/PDF/API2/Basic/TTF/Ttopen.pm, lib/PDF/API2/Basic/TTF/Useall.pm, lib/PDF/API2/Basic/TTF/Utils.pm, lib/PDF/API2/Basic/TTF/Vhea.pm, lib/PDF/API2/Basic/TTF/Vmtx.pm, lib/PDF/API2/Basic/TTF/Win32.pm, lib/PDF/API2/Basic/TTF/XMLparse.pm, lib/PDF/API2/Basic/TTF/Kern/ClassArray.pm, lib/PDF/API2/Basic/TTF/Kern/CompactClassArray.pm, lib/PDF/API2/Basic/TTF/Kern/OrderedList.pm, lib/PDF/API2/Basic/TTF/Kern/StateTable.pm, lib/PDF/API2/Basic/TTF/Kern/Subtable.pm, lib/PDF/API2/Basic/TTF/Mort/Chain.pm, lib/PDF/API2/Basic/TTF/Mort/Contextual.pm, lib/PDF/API2/Basic/TTF/Mort/Insertion.pm, lib/PDF/API2/Basic/TTF/Mort/Ligature.pm, lib/PDF/API2/Basic/TTF/Mort/Noncontextual.pm, lib/PDF/API2/Basic/TTF/Mort/Rearrangement.pm, lib/PDF/API2/Basic/TTF/Mort/Subtable.pm, lib/PDF/API2/Content/Text.pm, lib/PDF/API2/Content/symbols.pm, lib/PDF/API2/Content/Text/Markup.pm, lib/PDF/API2/Resource/BaseFont.pm, lib/PDF/API2/Resource/CIDFont.pm, lib/PDF/API2/Resource/ColorSpace.pm, lib/PDF/API2/Resource/ExtGState.pm, lib/PDF/API2/Resource/Font.pm, lib/PDF/API2/Resource/Shading.pm, lib/PDF/API2/Resource/XObject.pm, lib/PDF/API2/Resource/CIDFont/CJKFont.pm, lib/PDF/API2/Resource/CIDFont/TrueType.pm, lib/PDF/API2/Resource/CIDFont/CJKFont/adobemingstdlightacro.pm, lib/PDF/API2/Resource/CIDFont/CJKFont/adobemyungjostdmediumacro.pm, lib/PDF/API2/Resource/CIDFont/CJKFont/adobesongstdlightacro.pm, lib/PDF/API2/Resource/CIDFont/CJKFont/kozgopromediumacro.pm, lib/PDF/API2/Resource/CIDFont/CJKFont/kozminproregularacro.pm, lib/PDF/API2/Resource/CIDFont/CMap/japanese.pm, lib/PDF/API2/Resource/CIDFont/CMap/korean.pm, lib/PDF/API2/Resource/CIDFont/CMap/simplified.pm, lib/PDF/API2/Resource/CIDFont/CMap/traditional.pm, lib/PDF/API2/Resource/CIDFont/TrueType/FontFile.pm, lib/PDF/API2/Resource/ColorSpace/Indexed.pm, lib/PDF/API2/Resource/ColorSpace/Separation.pm, lib/PDF/API2/Resource/ColorSpace/Indexed/ACTFile.pm, lib/PDF/API2/Resource/ColorSpace/Indexed/Hue.pm, lib/PDF/API2/Resource/ColorSpace/Indexed/WebColor.pm, lib/PDF/API2/Resource/Font/CoreFont.pm, lib/PDF/API2/Resource/Font/Postscript.pm, lib/PDF/API2/Resource/Font/SynFont.pm, lib/PDF/API2/Resource/Font/CoreFont/bankgothic.pm, lib/PDF/API2/Resource/Font/CoreFont/courier.pm, lib/PDF/API2/Resource/Font/CoreFont/courierbold.pm, lib/PDF/API2/Resource/Font/CoreFont/courierboldoblique.pm, lib/PDF/API2/Resource/Font/CoreFont/courieroblique.pm, lib/PDF/API2/Resource/Font/CoreFont/georgia.pm, lib/PDF/API2/Resource/Font/CoreFont/georgiabold.pm, lib/PDF/API2/Resource/Font/CoreFont/georgiabolditalic.pm, lib/PDF/API2/Resource/Font/CoreFont/georgiaitalic.pm, lib/PDF/API2/Resource/Font/CoreFont/helvetica.pm, lib/PDF/API2/Resource/Font/CoreFont/helveticabold.pm, lib/PDF/API2/Resource/Font/CoreFont/helveticaboldoblique.pm, lib/PDF/API2/Resource/Font/CoreFont/helveticaoblique.pm, lib/PDF/API2/Resource/Font/CoreFont/symbol.pm, lib/PDF/API2/Resource/Font/CoreFont/timesbold.pm, lib/PDF/API2/Resource/Font/CoreFont/timesbolditalic.pm, lib/PDF/API2/Resource/Font/CoreFont/timesitalic.pm, lib/PDF/API2/Resource/Font/CoreFont/timesroman.pm, lib/PDF/API2/Resource/Font/CoreFont/trebuchet.pm, lib/PDF/API2/Resource/Font/CoreFont/trebuchetbold.pm, lib/PDF/API2/Resource/Font/CoreFont/trebuchetbolditalic.pm, lib/PDF/API2/Resource/Font/CoreFont/trebuchetitalic.pm, lib/PDF/API2/Resource/Font/CoreFont/verdana.pm, lib/PDF/API2/Resource/Font/CoreFont/verdanabold.pm, lib/PDF/API2/Resource/Font/CoreFont/verdanabolditalic.pm, lib/PDF/API2/Resource/Font/CoreFont/verdanaitalic.pm, lib/PDF/API2/Resource/Font/CoreFont/webdings.pm, lib/PDF/API2/Resource/Font/CoreFont/wingdings.pm, lib/PDF/API2/Resource/Font/CoreFont/zapfdingbats.pm, lib/PDF/API2/Resource/Shading/axial.pm, lib/PDF/API2/Resource/XObject/Form.pm, lib/PDF/API2/Resource/XObject/Image.pm, lib/PDF/API2/Resource/XObject/Form/BarCode.pm, lib/PDF/API2/Resource/XObject/Form/Hybrid.pm, lib/PDF/API2/Resource/XObject/Form/BarCode/codabar.pm, lib/PDF/API2/Resource/XObject/Form/BarCode/code128.pm, lib/PDF/API2/Resource/XObject/Form/BarCode/code3of9.pm, lib/PDF/API2/Resource/XObject/Form/BarCode/ean13.pm, lib/PDF/API2/Resource/XObject/Form/BarCode/int2of5.pm, lib/PDF/API2/Resource/XObject/Image/GD.pm, lib/PDF/API2/Resource/XObject/Image/GIF.pm, lib/PDF/API2/Resource/XObject/Image/JPEG.pm, lib/PDF/API2/Resource/XObject/Image/PNG.pm, lib/PDF/API2/Resource/XObject/Image/PNM.pm, lib/PDF/API2/Resource/XObject/Image/TIFF.pm, lib/PDF/API2/Shape/line.pm, lib/PDF/API2/Shape/polygon.pm, lib/PDF/API2/Shape/polyline.pm, lib/PDF/API2/Shape/sline.pm, contrib/pdf-deoptimize.pl, MANIFEST, LICENSE: cleaned out cr+lf for lf 2004-06-01 02:17 fredo * contrib/pdf-merge.pl: genesis 2004-06-01 02:14 fredo * README: fixed spelling errors added Memoize as req. module 2004-06-01 02:09 fredo * lib/PDF/API2.pm: memoized *font methods for braindead invokers 2004-06-01 01:20 fredo * lib/PDF/API2/Content.pm: added basic platform encoding independency 2004-05-28 13:33 fredo * MANIFEST: added test scripts for corefonts: helvetica, times, courior 2004-05-28 13:30 fredo * lib/PDF/API2/Version.pm: update to 0.40_21 2004-05-28 13:29 fredo * lib/PDF/: API2.pm, API2/Resource/XObject/Image/GD.pm: added -lossless param to gd images 2004-05-21 18:36 fredo * lib/PDF/API2/Version.pm: update to 0.40_20 2004-05-21 17:10 fredo * lib/PDF/API2/Resource/Font.pm: worked around some unicode probs 2004-05-21 17:04 fredo * lib/PDF/API2/Lite.pm: fixed NAME pod bug for cpan indexer 2004-05-21 12:12 fredo * lib/PDF/API2.pm: fixed slight importpage quirk 2004-04-20 11:47 fredo * lib/PDF/API2/Resource/BaseFont.pm: fixed unicode to font-encoding-vector conversion 2004-04-20 11:46 fredo * lib/PDF/API2/Resource/CIDFont/TrueType/FontFile.pm: added glyph->read fix for subset-vector 2004-04-20 00:01 fredo * lib/PDF/API2/Resource/XObject/Image/TIFF.pm: additional tag handling and tag-accessor 2004-04-18 20:07 fredo * lib/PDF/API2.pm: fixed _findFont method 2004-04-18 19:56 fredo * lib/PDF/API2/Basic/TTF/Glyph.pm: fixed processing unusual/broken ttfs 2004-04-18 17:51 fredo * t/022corefunc.t: genesis 2004-04-18 16:11 fredo * t/020coreuse.t: fixed test for symbol fonts 2004-04-18 16:01 fredo * t/020coreuse.t: added defined/undefined test 2004-04-18 15:54 fredo * t/020coreuse.t: genesis 2004-04-18 15:46 fredo * t/021corebyte.t: added cvs-log tag 2004-04-18 15:43 fredo * t/021corebyte.t: genesis 2004-04-07 19:39 fredo * lib/PDF/API2/Shape/sline.pm: genesis 2004-04-07 19:38 fredo * lib/PDF/API2.pm: added infoMetaAttributes and support code 2004-04-07 12:51 fredo * lib/PDF/API2/Version.pm: updated to 0.40_18b quick-fix release 2004-04-07 12:50 fredo * lib/PDF/API2/Resource/ColorSpace/Separation.pm: fixed RGB semantics to match CMYK "tint" behaviour 2004-04-07 12:49 fredo * lib/PDF/API2/Content.pm: fixed handling of colorSpaces for fill/strokecolor 2004-04-07 12:48 fredo * lib/PDF/API2.pm: fixed handling of ColorSpace/Separation 2004-04-07 12:48 fredo * examples/032_separation: genesis 2004-04-07 12:47 fredo * MANIFEST: added examples/032_separation 2004-04-07 01:09 fredo * MANIFEST: added missing examples/023_cjkfonts 2004-04-07 01:08 fredo * examples/023_cjkfonts: genesis 2004-04-07 01:05 fredo * MANIFEST: added missing examples/022_truefonts 2004-04-07 01:04 fredo * examples/022_truefonts: genesis 2004-04-07 00:59 fredo * MANIFEST: added missing examples/031_color_hsv 2004-04-06 23:08 fredo * MANIFEST: added .../Resource/ColorSpace/Separation 2004-04-06 23:00 fredo * lib/PDF/API2.pm: separation colorspace now a full resource 2004-04-06 22:57 fredo * lib/PDF/API2/Resource/ColorSpace/Separation.pm: separation colorspace promoted to full object 2004-04-05 01:52 fredo * lib/PDF/API2/Version.pm: updated for release 0.40_18 2004-04-05 01:44 fredo * lib/PDF/API2/Shape/: polygon.pm, polyline.pm: updated stroke/fill behaviour 2004-04-05 01:42 fredo * lib/PDF/API2.pm: fixed 270 degree rotation in openpage 2004-04-05 01:36 fredo * lib/PDF/API2.pm: added simple separation colorspace 2004-03-20 10:11 fredo * lib/PDF/API2.pm: modified font search path methodname 2004-03-20 09:38 fredo * lib/PDF/API2.pm: added isEncrypted determinator 2004-03-20 09:37 fredo * lib/PDF/API2/Resource/XObject/Image/GIF.pm: added de-interlacing 2004-03-18 10:43 fredo * lib/PDF/API2.pm: added font search path handling 2004-03-18 07:47 fredo * lib/PDF/API2/Outline.pm: fixed yank/paste error in dest method with -xyz parameter 2004-03-02 22:55 fredo * lib/PDF/API2/Resource/XObject/Image/JPEG.pm: fixed reading jpeg image info marker according to ITU-T T.81 spec 2004-03-02 20:22 fredo * lib/PDF/API2/Basic/PDF/Literal.pm: added missing 'use vars' and fixed xmlexport method 2004-03-02 20:21 fredo * MANIFEST: added missing Version.pm definition 2004-02-24 03:09 fredo * lib/PDF/API2/Basic/PDF/Literal.pm: added initializer code 2004-02-24 03:08 fredo * lib/PDF/API2/Basic/PDF/Utils.pm, MANIFEST: added literal 2004-02-24 02:59 fredo * lib/PDF/API2/Basic/PDF/Literal.pm: genesis 2004-02-24 01:08 fredo * lib/PDF/API2/Resource/CIDFont/CJKFont.pm: added utf8 fallback for encoding 2004-02-24 01:07 fredo * lib/PDF/API2/Resource/CIDFont/CMap/: simplified.pm, traditional.pm: fixed unicode mapping based on adobe's utf32/utf16 specification 2004-02-24 00:34 fredo * lib/PDF/API2/Resource/CIDFont/CMap/korean.pm: fixed unicode mapping based on adobe's utf32/utf16 specification 2004-02-24 00:19 fredo * lib/PDF/API2/Resource/CIDFont/CMap/japanese.pm: fixed unicode mapping based on adobe's ucs2 specification with added vertical encoding 2004-02-23 00:55 fredo * lib/PDF/API2/Annotation.pm: full utf8 awareness 2004-02-23 00:49 fredo * lib/PDF/API2/Resource/CIDFont/CMap/japanese.pm: fixed unicode mapping based on adobe's ucs2 specification 2004-02-23 00:45 fredo * lib/PDF/API2/HOWTO.pod: added pdftk tool comment 2004-02-19 03:07 fredo * lib/PDF/API2/Resource/CIDFont/CJKFont/: adobemingstdlightacro.pm, adobemyungjostdmediumacro.pm, adobesongstdlightacro.pm: updated to acrobat 6 standard 2004-02-19 01:37 fredo * lib/PDF/API2/HOWTO.pod: added interoperability section 2004-02-18 15:05 fredo * lib/PDF/API2/Basic/PDF/Filter.pm: updated lzwdecode with code take from the gif module 2004-02-18 15:04 fredo * lib/PDF/API2/Basic/PDF/: Dict.pm, Name.pm: fixed name/key encoding regardless of pdf-version (who uses ancient but conforming pdf 1.0/1.1 anymore?) 2004-02-13 11:56 fredo * lib/PDF/API2/HOWTO.pod: added hello world example 2004-02-12 21:33 fredo * MANIFEST: added shapes: line, polyline, polygon 2004-02-12 21:26 fredo * lib/PDF/API2/Shape/polygon.pm: initial import 2004-02-12 21:20 fredo * lib/PDF/API2/: Shape.pm, Shape/line.pm, Shape/polyline.pm: updated new method for options 2004-02-12 21:10 fredo * lib/PDF/API2/Shape/: line.pm, polyline.pm: initial import 2004-02-12 17:55 fredo * lib/PDF/API2/Shape.pm: added release method, fixed render methods 2004-02-12 17:40 fredo * lib/PDF/API2/Shape.pm: initial import 2004-02-12 15:48 fredo * lib/PDF/API2/Resource/XObject/Image/: PNG.pm, GIF.pm: removed duplicate definition of $fh 2004-02-12 15:46 fredo * lib/PDF/API2/Content.pm: removed duplicate definition of egstate method 2004-02-12 15:41 fredo * examples/031_color_hsv: initial import 2004-02-12 15:40 fredo * examples/030_colorspecs: moved HSV to own example 2004-02-12 15:39 fredo * lib/PDF/API2/Util.pm: start work on better HSV code 2004-02-12 15:38 fredo * lib/PDF/API2.pm: added openScalar method 2004-02-12 15:38 fredo * lib/PDF/API2/IOString.pm: added import_from_scalar method 2004-02-10 16:55 fredo * lib/PDF/API2/Resource/Font/SynFont.pm: fixed glyph generation for .notdef glyphs 2004-02-10 16:54 fredo * examples/021_synfonts: modified to use all corefonts 2004-02-10 16:53 fredo * lib/PDF/API2/Util.pm: corrected pdfkeys 2004-02-06 03:01 fredo * lib/PDF/API2/Content.pm: added save/restore around textlabel 2004-02-06 00:24 fredo * lib/PDF/API2/Content.pm: fixed lab behavior 2004-02-05 23:35 fredo * examples/030_colorspecs: added rgb gamma 2004-02-05 23:21 fredo * lib/PDF/API2/Util.pm: fixed lab behavior 2004-02-05 23:17 fredo * examples/030_colorspecs: initial import 2004-02-05 17:13 fredo * lib/PDF/API2/Util.pm: fixed namecolor methods 2004-02-05 14:33 fredo * lib/PDF/API2/Annotation.pm: added unicode handling to strings 2004-02-05 14:27 fredo * lib/PDF/API2/Basic/PDF/String.pm: corrected utf8 behavior according to '3.8.1 Text Strings', U+FEFF indicating UTF-16BE (big-endian) 2004-02-05 14:18 fredo * lib/PDF/API2.pm: corrected info hash utf8 usage 2004-02-05 13:28 fredo * MANIFEST: added colorspecs example 2004-02-05 13:26 fredo * lib/PDF/API2/Content.pm: revised '_makecolor' to use Lab for hsv/hsl, added textlabel method 2004-02-05 12:28 fredo * lib/PDF/API2/Util.pm: simplified namecolor, added *_lab/*_cmyk methods, corrected rgb->cmyk conversion to practical parameters 2004-02-05 01:54 fredo * lib/PDF/API2/Basic/PDF/Utils.pm: added "PDFUtf" util method 2004-02-05 01:52 fredo * lib/PDF/API2/Basic/PDF/String.pm: added utf output capability 2004-02-05 00:43 fredo * lib/PDF/API2.pm: pdf info method now properly recognized utf8 parameters 2004-02-02 01:25 fredo * examples/021_synfonts: added caps example 2004-02-01 23:06 fredo * lib/PDF/API2/Resource/Font/SynFont.pm: beautified caps generation 2004-02-01 22:34 fredo * MANIFEST: added PDF::API2::Content::Text::Markup 2004-02-01 22:32 fredo * lib/PDF/API2/Content/Text/Markup.pm: added basic (yet unfinished) parsing code 2004-02-01 20:27 fredo * lib/PDF/API2/Resource/Font/SynFont.pm: fixed width calc for caps 2004-02-01 20:04 fredo * lib/PDF/API2/Resource/Font/SynFont.pm: added caps capability 2004-01-29 10:03 fredo * lib/PDF/API2/Content/Text/Markup.pm: genesis 2004-01-29 09:37 fredo * lib/PDF/API2/Content/symbols.pm: updated comments, added symbol aliases 2004-01-28 15:12 fredo * contrib/: pdf-deoptimize.pl, pdf-optimize.pl: updated licence statement 2004-01-22 15:19 fredo * Makefile.PL: final versioning update for 0.40_17 and beyond 2004-01-22 15:17 fredo * lib/PDF/API2/Basic/PDF/File.pm: added internal object comments feature for future debugging 2004-01-22 00:21 fredo * Makefile.PL: updated logo string 2004-01-21 14:24 fredo * lib/PDF/API2/Version.pm: fixed errorneous use/require behaviour 2004-01-21 13:44 fredo * Makefile.PL: fixed MakeMaker VERSION_FROM parameter 2004-01-21 13:35 fredo * MANIFEST: added changelog.pre 2004-01-21 13:29 fredo * Makefile.PL, lib/PDF/API2.pm, lib/PDF/API2/Version.pm: moved release versioning to PDF::API2::Version 2004-01-21 13:18 fredo * MANIFEST: added full changelog 2004-01-19 21:02 fredo * MANIFEST: added contrib pdf optimize/deoptimize 2004-01-19 20:59 fredo * contrib/: pdf-deoptimize.pl, pdf-optimize.pl: initial import 2004-01-19 15:16 fredo * Makefile.PL, lib/PDF/API2.pm: update for 0.40_16 2004-01-19 15:09 fredo * lib/PDF/API2/Basic/PDF/File.pm: fixed odd ends commenting practice import 2004-01-19 13:51 fredo * lib/PDF/API2/Basic/PDF/File.pm: fix for reportlab's starnge commenting -- removed 2004-01-19 13:47 fredo * lib/PDF/API2/Basic/PDF/File.pm: fix for reportlab's starnge commenting -- ad 1 2004-01-19 13:34 fredo * lib/PDF/API2/Basic/PDF/File.pm: fix for reportlab's starnge commenting 2004-01-15 22:26 fredo * lib/PDF/API2.pm: docbug: fixed inconsistent links 2004-01-14 19:25 fredo * Makefile.PL, lib/PDF/API2.pm: release update 0.40_15 2004-01-14 19:24 fredo * MANIFEST: added missing code128.pm entry 2004-01-12 14:52 fredo * Makefile.PL, lib/PDF/API2.pm: update for 0.40_14 2004-01-09 00:56 fredo * lib/PDF/API2.pm: corrected producer tag versioning, updated to release 0.40_13 2004-01-09 00:54 fredo * lib/PDF/API2/Basic/PDF/String.pm: corrected hex-string import/export with looser spec. 2004-01-08 13:00 fredo * LICENSE: patent statement reformatted 2003-12-08 23:46 Administrator * MANIFEST: added howto and examples: corefont, synfont 2003-12-08 23:42 Administrator * lib/PDF/API2/HOWTO.pod: rudimentary skeleton 2003-12-08 23:12 Administrator * examples/: 020_corefonts, 021_synfonts: inital import 2003-12-08 22:37 Administrator * Makefile.PL: updated copyright date 2003-12-08 14:51 Administrator * README: updated general changelog for 0.40_13 2003-12-08 14:20 Administrator * Makefile: makefile autogen update 2003-12-08 14:15 Administrator * MANIFEST: deleted obsolete docs-dir; added t/00use.t 2003-12-08 14:13 Administrator * t/00use.t: added Log tag 2003-12-08 14:11 Administrator * t/00use.t: new import with proper licencing statement 2003-12-08 14:05 Administrator * lib/PDF/: API2.pm, API2/Annotation.pm, API2/Content.pm, API2/IOString.pm, API2/Lite.pm, API2/Matrix.pm, API2/Outline.pm, API2/Outlines.pm, API2/Page.pm, API2/Resource.pm, API2/Util.pm, API2/Win32.pm, API2/Basic/PDF/Array.pm, API2/Basic/PDF/Bool.pm, API2/Basic/PDF/Dict.pm, API2/Basic/PDF/File.pm, API2/Basic/PDF/Filter.pm, API2/Basic/PDF/Name.pm, API2/Basic/PDF/Null.pm, API2/Basic/PDF/Number.pm, API2/Basic/PDF/Objind.pm, API2/Basic/PDF/Page.pm, API2/Basic/PDF/Pages.pm, API2/Basic/PDF/String.pm, API2/Basic/PDF/Utils.pm, API2/Basic/TTF/AATKern.pm, API2/Basic/TTF/AATutils.pm, API2/Basic/TTF/Anchor.pm, API2/Basic/TTF/Bsln.pm, API2/Basic/TTF/Cmap.pm, API2/Basic/TTF/Coverage.pm, API2/Basic/TTF/Cvt_.pm, API2/Basic/TTF/Delta.pm, API2/Basic/TTF/Fdsc.pm, API2/Basic/TTF/Feat.pm, API2/Basic/TTF/Fmtx.pm, API2/Basic/TTF/Font.pm, API2/Basic/TTF/Fpgm.pm, API2/Basic/TTF/GDEF.pm, API2/Basic/TTF/GPOS.pm, API2/Basic/TTF/GSUB.pm, API2/Basic/TTF/Glyf.pm, API2/Basic/TTF/Glyph.pm, API2/Basic/TTF/Hdmx.pm, API2/Basic/TTF/Head.pm, API2/Basic/TTF/Hhea.pm, API2/Basic/TTF/Hmtx.pm, API2/Basic/TTF/Kern.pm, API2/Basic/TTF/LTSH.pm, API2/Basic/TTF/Loca.pm, API2/Basic/TTF/Manual.pod, API2/Basic/TTF/Maxp.pm, API2/Basic/TTF/Mort.pm, API2/Basic/TTF/Name.pm, API2/Basic/TTF/OS_2.pm, API2/Basic/TTF/OldCmap.pm, API2/Basic/TTF/OldMort.pm, API2/Basic/TTF/PCLT.pm, API2/Basic/TTF/Post.pm, API2/Basic/TTF/PSNames.pm, API2/Basic/TTF/Prep.pm, API2/Basic/TTF/Prop.pm, API2/Basic/TTF/Segarr.pm, API2/Basic/TTF/Table.pm, API2/Basic/TTF/Ttc.pm, API2/Basic/TTF/Ttopen.pm, API2/Basic/TTF/Utils.pm, API2/Basic/TTF/Vhea.pm, API2/Basic/TTF/Vmtx.pm, API2/Basic/TTF/Win32.pm, API2/Basic/TTF/XMLparse.pm, API2/Basic/TTF/Kern/ClassArray.pm, API2/Basic/TTF/Kern/CompactClassArray.pm, API2/Basic/TTF/Kern/OrderedList.pm, API2/Basic/TTF/Kern/StateTable.pm, API2/Basic/TTF/Kern/Subtable.pm, API2/Basic/TTF/Mort/Chain.pm, API2/Basic/TTF/Mort/Contextual.pm, API2/Basic/TTF/Mort/Insertion.pm, API2/Basic/TTF/Mort/Ligature.pm, API2/Basic/TTF/Mort/Noncontextual.pm, API2/Basic/TTF/Mort/Rearrangement.pm, API2/Basic/TTF/Mort/Subtable.pm, API2/Content/symbols.pm, API2/Content/Text.pm, API2/Resource/BaseFont.pm, API2/Resource/CIDFont.pm, API2/Resource/ColorSpace.pm, API2/Resource/ExtGState.pm, API2/Resource/Font.pm, API2/Resource/Shading.pm, API2/Resource/XObject.pm, API2/Resource/CIDFont/CJKFont.pm, API2/Resource/CIDFont/TrueType.pm, API2/Resource/CIDFont/CJKFont/adobemingstdlightacro.pm, API2/Resource/CIDFont/CJKFont/adobemyungjostdmediumacro.pm, API2/Resource/CIDFont/CJKFont/adobesongstdlightacro.pm, API2/Resource/CIDFont/CJKFont/kozgopromediumacro.pm, API2/Resource/CIDFont/CJKFont/kozminproregularacro.pm, API2/Resource/CIDFont/CMap/japanese.pm, API2/Resource/CIDFont/CMap/korean.pm, API2/Resource/CIDFont/CMap/simplified.pm, API2/Resource/CIDFont/CMap/traditional.pm, API2/Resource/CIDFont/TrueType/FontFile.pm, API2/Resource/ColorSpace/Indexed.pm, API2/Resource/ColorSpace/Indexed/ACTFile.pm, API2/Resource/ColorSpace/Indexed/Hue.pm, API2/Resource/ColorSpace/Indexed/WebColor.pm, API2/Resource/Font/CoreFont.pm, API2/Resource/Font/Postscript.pm, API2/Resource/Font/SynFont.pm, API2/Resource/Font/CoreFont/bankgothic.pm, API2/Resource/Font/CoreFont/courier.pm, API2/Resource/Font/CoreFont/courierbold.pm, API2/Resource/Font/CoreFont/courierboldoblique.pm, API2/Resource/Font/CoreFont/courieroblique.pm, API2/Resource/Font/CoreFont/georgia.pm, API2/Resource/Font/CoreFont/georgiabold.pm, API2/Resource/Font/CoreFont/georgiabolditalic.pm, API2/Resource/Font/CoreFont/georgiaitalic.pm, API2/Resource/Font/CoreFont/helvetica.pm, API2/Resource/Font/CoreFont/helveticabold.pm, API2/Resource/Font/CoreFont/helveticaboldoblique.pm, API2/Resource/Font/CoreFont/helveticaoblique.pm, API2/Resource/Font/CoreFont/symbol.pm, API2/Resource/Font/CoreFont/timesbold.pm, API2/Resource/Font/CoreFont/timesbolditalic.pm, API2/Resource/Font/CoreFont/timesitalic.pm, API2/Resource/Font/CoreFont/timesroman.pm, API2/Resource/Font/CoreFont/trebuchet.pm, API2/Resource/Font/CoreFont/trebuchetbold.pm, API2/Resource/Font/CoreFont/trebuchetbolditalic.pm, API2/Resource/Font/CoreFont/trebuchetitalic.pm, API2/Resource/Font/CoreFont/verdana.pm, API2/Resource/Font/CoreFont/verdanabold.pm, API2/Resource/Font/CoreFont/verdanabolditalic.pm, API2/Resource/Font/CoreFont/verdanaitalic.pm, API2/Resource/Font/CoreFont/webdings.pm, API2/Resource/Font/CoreFont/wingdings.pm, API2/Resource/Font/CoreFont/zapfdingbats.pm, API2/Resource/Shading/axial.pm, API2/Resource/XObject/Form.pm, API2/Resource/XObject/Image.pm, API2/Resource/XObject/Form/BarCode.pm, API2/Resource/XObject/Form/Hybrid.pm, API2/Resource/XObject/Form/BarCode/codabar.pm, API2/Resource/XObject/Form/BarCode/code128.pm, API2/Resource/XObject/Form/BarCode/code3of9.pm, API2/Resource/XObject/Form/BarCode/ean13.pm, API2/Resource/XObject/Form/BarCode/int2of5.pm, API2/Resource/XObject/Image/GD.pm, API2/Resource/XObject/Image/GIF.pm, API2/Resource/XObject/Image/JPEG.pm, API2/Resource/XObject/Image/PNG.pm, API2/Resource/XObject/Image/PNM.pm, API2/Resource/XObject/Image/TIFF.pm: corrected to proper licencing statement 2003-12-08 12:55 Administrator * lib/PDF/API2/Annotation.pm: change for proper module versioning 2003-12-08 12:47 Administrator * lib/PDF/API2.pm: change step 3 for proper module versioning 2003-12-08 12:46 Administrator * lib/PDF/API2.pm: change step 2 for proper module versioning 2003-12-08 12:43 Administrator * lib/PDF/API2.pm: change step 1 for proper module versioning 2003-12-08 12:39 Administrator * Makefile.PL: updated for req. perl >= 5.8 of 0.40_13 release 2003-11-30 20:00 Administrator * lib/PDF/API2.pm: added Code128/EAN128 2003-11-30 19:55 Administrator * lib/PDF/API2/Resource/XObject/Form/BarCode/code128.pm: added EAN128 2003-11-30 19:53 Administrator * lib/PDF/API2/Resource/XObject/Form/BarCode/code128.pm: inital import 2003-11-30 19:16 Administrator * AUTHORS: added fredo as default author 2003-11-30 18:36 Administrator * lib/PDF/API2/Resource/XObject/: Form/BarCode/codabar.pm, Form/BarCode/code3of9.pm, Form/BarCode/ean13.pm, Form/BarCode/int2of5.pm, Image/GD.pm, Image/GIF.pm, Image/JPEG.pm, Image/PNG.pm, Image/PNM.pm, Image/TIFF.pm: merged into default 2003-11-30 18:32 Administrator * lib/PDF/API2/Resource/: ColorSpace/Indexed.pm, ColorSpace/Indexed/ACTFile.pm, ColorSpace/Indexed/Hue.pm, ColorSpace/Indexed/WebColor.pm, Font/CoreFont.pm, Font/Postscript.pm, Font/SynFont.pm, Font/CoreFont/bankgothic.pm, Font/CoreFont/courier.pm, Font/CoreFont/courierbold.pm, Font/CoreFont/courierboldoblique.pm, Font/CoreFont/courieroblique.pm, Font/CoreFont/georgia.pm, Font/CoreFont/georgiabold.pm, Font/CoreFont/georgiabolditalic.pm, Font/CoreFont/georgiaitalic.pm, Font/CoreFont/helvetica.pm, Font/CoreFont/helveticabold.pm, Font/CoreFont/helveticaboldoblique.pm, Font/CoreFont/helveticaoblique.pm, Font/CoreFont/symbol.pm, Font/CoreFont/timesbold.pm, Font/CoreFont/timesbolditalic.pm, Font/CoreFont/timesitalic.pm, Font/CoreFont/timesroman.pm, Font/CoreFont/trebuchet.pm, Font/CoreFont/trebuchetbold.pm, Font/CoreFont/trebuchetbolditalic.pm, Font/CoreFont/trebuchetitalic.pm, Font/CoreFont/verdana.pm, Font/CoreFont/verdanabold.pm, Font/CoreFont/verdanabolditalic.pm, Font/CoreFont/verdanaitalic.pm, Font/CoreFont/webdings.pm, Font/CoreFont/wingdings.pm, Font/CoreFont/zapfdingbats.pm, Shading/axial.pm, XObject/Form.pm, XObject/Image.pm, XObject/Form/BarCode.pm, XObject/Form/Hybrid.pm: merged into default 2003-11-30 18:28 Administrator * lib/PDF/API2/Resource/: BaseFont.pm, CIDFont.pm, ColorSpace.pm, ExtGState.pm, Font.pm, Shading.pm, XObject.pm, CIDFont/CJKFont.pm, CIDFont/TrueType.pm, CIDFont/CJKFont/adobemingstdlightacro.pm, CIDFont/CJKFont/adobemyungjostdmediumacro.pm, CIDFont/CJKFont/adobesongstdlightacro.pm, CIDFont/CJKFont/kozgopromediumacro.pm, CIDFont/CJKFont/kozminproregularacro.pm, CIDFont/CMap/japanese.pm, CIDFont/CMap/korean.pm, CIDFont/CMap/simplified.pm, CIDFont/CMap/traditional.pm, CIDFont/TrueType/FontFile.pm: merged into default 2003-11-30 18:23 Administrator * lib/PDF/API2/: Basic/TTF/Mort/Chain.pm, Basic/TTF/Mort/Contextual.pm, Basic/TTF/Mort/Insertion.pm, Basic/TTF/Mort/Ligature.pm, Basic/TTF/Mort/Noncontextual.pm, Basic/TTF/Mort/Rearrangement.pm, Basic/TTF/Mort/Subtable.pm, Content/Text.pm, Content/symbols.pm: merged into default 2003-11-30 18:20 Administrator * lib/PDF/API2/: Util.pm, Win32.pm, Basic/PDF/Array.pm, Basic/PDF/Bool.pm, Basic/PDF/Dict.pm, Basic/PDF/File.pm, Basic/PDF/Filter.pm, Basic/PDF/Name.pm, Basic/PDF/Null.pm, Basic/PDF/Number.pm, Basic/PDF/Objind.pm, Basic/PDF/Page.pm, Basic/PDF/Pages.pm, Basic/PDF/String.pm, Basic/PDF/Utils.pm, Basic/TTF/AATKern.pm, Basic/TTF/AATutils.pm, Basic/TTF/Anchor.pm, Basic/TTF/Bsln.pm, Basic/TTF/Changes, Basic/TTF/Cmap.pm, Basic/TTF/Coverage.pm, Basic/TTF/Cvt_.pm, Basic/TTF/Delta.pm, Basic/TTF/Fdsc.pm, Basic/TTF/Feat.pm, Basic/TTF/Fmtx.pm, Basic/TTF/Font.pm, Basic/TTF/Fpgm.pm, Basic/TTF/GDEF.pm, Basic/TTF/GPOS.pm, Basic/TTF/GSUB.pm, Basic/TTF/Glyf.pm, Basic/TTF/Glyph.pm, Basic/TTF/Hdmx.pm, Basic/TTF/Head.pm, Basic/TTF/Hhea.pm, Basic/TTF/Hmtx.pm, Basic/TTF/Kern.pm, Basic/TTF/LTSH.pm, Basic/TTF/Loca.pm, Basic/TTF/Manual.pod, Basic/TTF/Maxp.pm, Basic/TTF/Mort.pm, Basic/TTF/Name.pm, Basic/TTF/OS_2.pm, Basic/TTF/OldCmap.pm, Basic/TTF/OldMort.pm, Basic/TTF/PCLT.pm, Basic/TTF/PSNames.pm, Basic/TTF/Post.pm, Basic/TTF/Prep.pm, Basic/TTF/Prop.pm, Basic/TTF/Segarr.pm, Basic/TTF/Table.pm, Basic/TTF/Ttc.pm, Basic/TTF/Ttopen.pm, Basic/TTF/Useall.pm, Basic/TTF/Utils.pm, Basic/TTF/Vhea.pm, Basic/TTF/Vmtx.pm, Basic/TTF/Win32.pm, Basic/TTF/XMLparse.pm, Basic/TTF/Kern/ClassArray.pm, Basic/TTF/Kern/CompactClassArray.pm, Basic/TTF/Kern/OrderedList.pm, Basic/TTF/Kern/StateTable.pm, Basic/TTF/Kern/Subtable.pm: merged into default 2003-11-30 18:16 Administrator * lib/PDF/API2/: Outlines.pm, Page.pm, Resource.pm: merged into default 2003-11-30 18:11 Administrator * lib/PDF/API2/: Lite.pm, Matrix.pm, Outline.pm: merged into default 2003-11-30 18:08 Administrator * lib/PDF/API2/: Annotation.pm, Content.pm, IOString.pm: merged into default 2003-11-30 18:05 Administrator * INSTALL: added cvs id 2003-11-30 18:04 Administrator * README, VERSION, lib/PDF/API2.pm: merged into default 2003-11-30 18:01 Administrator * AUTHORS, CONTACT, COPYING, INSTALL, LICENSE, Makefile, Makefile.PL, MANIFEST: merged into default 2003-11-30 17:56 Administrator * AUTHORS, CONTACT, COPYING, INSTALL, LICENSE, MANIFEST, Makefile, Makefile.PL, README, VERSION, lib/PDF/API2.pm, lib/PDF/API2/Annotation.pm, lib/PDF/API2/Content.pm, lib/PDF/API2/IOString.pm, lib/PDF/API2/Lite.pm, lib/PDF/API2/Matrix.pm, lib/PDF/API2/Outline.pm, lib/PDF/API2/Outlines.pm, lib/PDF/API2/Page.pm, lib/PDF/API2/Resource.pm, lib/PDF/API2/Util.pm, lib/PDF/API2/Win32.pm, lib/PDF/API2/Basic/PDF/Array.pm, lib/PDF/API2/Basic/PDF/Bool.pm, lib/PDF/API2/Basic/PDF/Dict.pm, lib/PDF/API2/Basic/PDF/File.pm, lib/PDF/API2/Basic/PDF/Filter.pm, lib/PDF/API2/Basic/PDF/Name.pm, lib/PDF/API2/Basic/PDF/Null.pm, lib/PDF/API2/Basic/PDF/Number.pm, lib/PDF/API2/Basic/PDF/Objind.pm, lib/PDF/API2/Basic/PDF/Page.pm, lib/PDF/API2/Basic/PDF/Pages.pm, lib/PDF/API2/Basic/PDF/String.pm, lib/PDF/API2/Basic/PDF/Utils.pm, lib/PDF/API2/Basic/TTF/AATKern.pm, lib/PDF/API2/Basic/TTF/AATutils.pm, lib/PDF/API2/Basic/TTF/Anchor.pm, lib/PDF/API2/Basic/TTF/Bsln.pm, lib/PDF/API2/Basic/TTF/Changes, lib/PDF/API2/Basic/TTF/Cmap.pm, lib/PDF/API2/Basic/TTF/Coverage.pm, lib/PDF/API2/Basic/TTF/Cvt_.pm, lib/PDF/API2/Basic/TTF/Delta.pm, lib/PDF/API2/Basic/TTF/Fdsc.pm, lib/PDF/API2/Basic/TTF/Feat.pm, lib/PDF/API2/Basic/TTF/Fmtx.pm, lib/PDF/API2/Basic/TTF/Font.pm, lib/PDF/API2/Basic/TTF/Fpgm.pm, lib/PDF/API2/Basic/TTF/GDEF.pm, lib/PDF/API2/Basic/TTF/GPOS.pm, lib/PDF/API2/Basic/TTF/GSUB.pm, lib/PDF/API2/Basic/TTF/Glyf.pm, lib/PDF/API2/Basic/TTF/Glyph.pm, lib/PDF/API2/Basic/TTF/Hdmx.pm, lib/PDF/API2/Basic/TTF/Head.pm, lib/PDF/API2/Basic/TTF/Hhea.pm, lib/PDF/API2/Basic/TTF/Hmtx.pm, lib/PDF/API2/Basic/TTF/Kern.pm, lib/PDF/API2/Basic/TTF/LTSH.pm, lib/PDF/API2/Basic/TTF/Loca.pm, lib/PDF/API2/Basic/TTF/Manual.pod, lib/PDF/API2/Basic/TTF/Maxp.pm, lib/PDF/API2/Basic/TTF/Mort.pm, lib/PDF/API2/Basic/TTF/Name.pm, lib/PDF/API2/Basic/TTF/OS_2.pm, lib/PDF/API2/Basic/TTF/OldCmap.pm, lib/PDF/API2/Basic/TTF/OldMort.pm, lib/PDF/API2/Basic/TTF/PCLT.pm, lib/PDF/API2/Basic/TTF/PSNames.pm, lib/PDF/API2/Basic/TTF/Post.pm, lib/PDF/API2/Basic/TTF/Prep.pm, lib/PDF/API2/Basic/TTF/Prop.pm, lib/PDF/API2/Basic/TTF/Segarr.pm, lib/PDF/API2/Basic/TTF/Table.pm, lib/PDF/API2/Basic/TTF/Ttc.pm, lib/PDF/API2/Basic/TTF/Ttopen.pm, lib/PDF/API2/Basic/TTF/Useall.pm, lib/PDF/API2/Basic/TTF/Utils.pm, lib/PDF/API2/Basic/TTF/Vhea.pm, lib/PDF/API2/Basic/TTF/Vmtx.pm, lib/PDF/API2/Basic/TTF/Win32.pm, lib/PDF/API2/Basic/TTF/XMLparse.pm, lib/PDF/API2/Basic/TTF/Kern/ClassArray.pm, lib/PDF/API2/Basic/TTF/Kern/CompactClassArray.pm, lib/PDF/API2/Basic/TTF/Kern/OrderedList.pm, lib/PDF/API2/Basic/TTF/Kern/StateTable.pm, lib/PDF/API2/Basic/TTF/Kern/Subtable.pm, lib/PDF/API2/Basic/TTF/Mort/Chain.pm, lib/PDF/API2/Basic/TTF/Mort/Contextual.pm, lib/PDF/API2/Basic/TTF/Mort/Insertion.pm, lib/PDF/API2/Basic/TTF/Mort/Ligature.pm, lib/PDF/API2/Basic/TTF/Mort/Noncontextual.pm, lib/PDF/API2/Basic/TTF/Mort/Rearrangement.pm, lib/PDF/API2/Basic/TTF/Mort/Subtable.pm, lib/PDF/API2/Content/Text.pm, lib/PDF/API2/Content/symbols.pm, lib/PDF/API2/Resource/BaseFont.pm, lib/PDF/API2/Resource/CIDFont.pm, lib/PDF/API2/Resource/ColorSpace.pm, lib/PDF/API2/Resource/ExtGState.pm, lib/PDF/API2/Resource/Font.pm, lib/PDF/API2/Resource/Shading.pm, lib/PDF/API2/Resource/XObject.pm, lib/PDF/API2/Resource/CIDFont/CJKFont.pm, lib/PDF/API2/Resource/CIDFont/TrueType.pm, lib/PDF/API2/Resource/CIDFont/CJKFont/adobemingstdlightacro.pm, lib/PDF/API2/Resource/CIDFont/CJKFont/adobemyungjostdmediumacro.pm, lib/PDF/API2/Resource/CIDFont/CJKFont/adobesongstdlightacro.pm, lib/PDF/API2/Resource/CIDFont/CJKFont/kozgopromediumacro.pm, lib/PDF/API2/Resource/CIDFont/CJKFont/kozminproregularacro.pm, lib/PDF/API2/Resource/CIDFont/CMap/japanese.pm, lib/PDF/API2/Resource/CIDFont/CMap/korean.pm, lib/PDF/API2/Resource/CIDFont/CMap/simplified.pm, lib/PDF/API2/Resource/CIDFont/CMap/traditional.pm, lib/PDF/API2/Resource/CIDFont/TrueType/FontFile.pm, lib/PDF/API2/Resource/ColorSpace/Indexed.pm, lib/PDF/API2/Resource/ColorSpace/Indexed/ACTFile.pm, lib/PDF/API2/Resource/ColorSpace/Indexed/Hue.pm, lib/PDF/API2/Resource/ColorSpace/Indexed/WebColor.pm, lib/PDF/API2/Resource/Font/CoreFont.pm, lib/PDF/API2/Resource/Font/Postscript.pm, lib/PDF/API2/Resource/Font/SynFont.pm, lib/PDF/API2/Resource/Font/CoreFont/bankgothic.pm, lib/PDF/API2/Resource/Font/CoreFont/courier.pm, lib/PDF/API2/Resource/Font/CoreFont/courierbold.pm, lib/PDF/API2/Resource/Font/CoreFont/courierboldoblique.pm, lib/PDF/API2/Resource/Font/CoreFont/courieroblique.pm, lib/PDF/API2/Resource/Font/CoreFont/georgia.pm, lib/PDF/API2/Resource/Font/CoreFont/georgiabold.pm, lib/PDF/API2/Resource/Font/CoreFont/georgiabolditalic.pm, lib/PDF/API2/Resource/Font/CoreFont/georgiaitalic.pm, lib/PDF/API2/Resource/Font/CoreFont/helvetica.pm, lib/PDF/API2/Resource/Font/CoreFont/helveticabold.pm, lib/PDF/API2/Resource/Font/CoreFont/helveticaboldoblique.pm, lib/PDF/API2/Resource/Font/CoreFont/helveticaoblique.pm, lib/PDF/API2/Resource/Font/CoreFont/symbol.pm, lib/PDF/API2/Resource/Font/CoreFont/timesbold.pm, lib/PDF/API2/Resource/Font/CoreFont/timesbolditalic.pm, lib/PDF/API2/Resource/Font/CoreFont/timesitalic.pm, lib/PDF/API2/Resource/Font/CoreFont/timesroman.pm, lib/PDF/API2/Resource/Font/CoreFont/trebuchet.pm, lib/PDF/API2/Resource/Font/CoreFont/trebuchetbold.pm, lib/PDF/API2/Resource/Font/CoreFont/trebuchetbolditalic.pm, lib/PDF/API2/Resource/Font/CoreFont/trebuchetitalic.pm, lib/PDF/API2/Resource/Font/CoreFont/verdana.pm, lib/PDF/API2/Resource/Font/CoreFont/verdanabold.pm, lib/PDF/API2/Resource/Font/CoreFont/verdanabolditalic.pm, lib/PDF/API2/Resource/Font/CoreFont/verdanaitalic.pm, lib/PDF/API2/Resource/Font/CoreFont/webdings.pm, lib/PDF/API2/Resource/Font/CoreFont/wingdings.pm, lib/PDF/API2/Resource/Font/CoreFont/zapfdingbats.pm, lib/PDF/API2/Resource/Shading/axial.pm, lib/PDF/API2/Resource/XObject/Form.pm, lib/PDF/API2/Resource/XObject/Image.pm, lib/PDF/API2/Resource/XObject/Form/BarCode.pm, lib/PDF/API2/Resource/XObject/Form/Hybrid.pm, lib/PDF/API2/Resource/XObject/Form/BarCode/codabar.pm, lib/PDF/API2/Resource/XObject/Form/BarCode/code3of9.pm, lib/PDF/API2/Resource/XObject/Form/BarCode/ean13.pm, lib/PDF/API2/Resource/XObject/Form/BarCode/int2of5.pm, lib/PDF/API2/Resource/XObject/Image/GD.pm, lib/PDF/API2/Resource/XObject/Image/GIF.pm, lib/PDF/API2/Resource/XObject/Image/JPEG.pm, lib/PDF/API2/Resource/XObject/Image/PNG.pm, lib/PDF/API2/Resource/XObject/Image/PNM.pm, lib/PDF/API2/Resource/XObject/Image/TIFF.pm: merged into default 2003-11-30 17:47 Administrator * COPYING, LICENSE, lib/PDF/API2.pm: merged into default 2003-11-30 17:00 Administrator * lib/PDF/API2/Resource/XObject/Image/: GD.pm, GIF.pm, JPEG.pm, PNG.pm, PNM.pm, TIFF.pm: added CVS id/log 2003-11-30 16:55 Administrator * lib/PDF/API2/Resource/Shading/axial.pm: added CVS id/log 2003-11-30 16:52 Administrator * lib/PDF/API2/Resource/Font/CoreFont/: bankgothic.pm, courier.pm, courierbold.pm, courierboldoblique.pm, courieroblique.pm, georgia.pm, georgiabold.pm, georgiabolditalic.pm, georgiaitalic.pm, helvetica.pm, helveticabold.pm, helveticaboldoblique.pm, helveticaoblique.pm, symbol.pm, timesbold.pm, timesbolditalic.pm, timesitalic.pm, timesroman.pm, trebuchet.pm, trebuchetbold.pm, trebuchetbolditalic.pm, trebuchetitalic.pm, verdana.pm, verdanabold.pm, verdanabolditalic.pm, verdanaitalic.pm, webdings.pm, wingdings.pm, zapfdingbats.pm: added CVS id/log 2003-11-30 15:45 Administrator * lib/PDF/API2/Resource/Font/: CoreFont.pm, Postscript.pm, SynFont.pm: added CVS id/log 2003-11-30 15:31 Administrator * lib/PDF/API2/Resource/ColorSpace/Indexed/: ACTFile.pm, Hue.pm, WebColor.pm: added CVS id/log 2003-11-30 15:27 Administrator * lib/PDF/API2/Resource/: CIDFont/CJKFont/adobemingstdlightacro.pm, CIDFont/CJKFont/adobemyungjostdmediumacro.pm, CIDFont/CJKFont/adobesongstdlightacro.pm, CIDFont/CJKFont/kozgopromediumacro.pm, CIDFont/CJKFont/kozminproregularacro.pm, ColorSpace/Indexed.pm: added CVS id/log 2003-11-30 15:21 Administrator * lib/PDF/API2/Resource/CIDFont/CMap/: japanese.pm, korean.pm, simplified.pm, traditional.pm: added CVS id/log 2003-11-30 15:16 Administrator * lib/PDF/API2/Resource/CIDFont/TrueType/FontFile.pm: added CVS id/log 2003-11-30 15:13 Administrator * lib/PDF/API2/Resource/CIDFont/: CJKFont.pm, TrueType.pm: added CVS id/log 2003-11-30 14:57 Administrator * README: updated reqirements and support statement 2003-11-30 12:50 Administrator * lib/PDF/API2/Resource/XObject/Form/: BarCode.pm, Hybrid.pm, BarCode/codabar.pm, BarCode/code3of9.pm, BarCode/ean13.pm, BarCode/int2of5.pm: added CVS id/log 2003-11-30 12:44 Administrator * lib/PDF/API2/Resource/: BaseFont.pm, CIDFont.pm, ColorSpace.pm, ExtGState.pm, Font.pm, Shading.pm, XObject.pm, XObject/Form.pm, XObject/Image.pm: added CVS id/log 2003-11-30 12:32 Administrator * lib/PDF/API2/: Util.pm, Page.pm, Outline.pm, Matrix.pm, Lite.pm, IOString.pm, Annotation.pm, Content.pm: added CVS id/log 2003-11-30 00:31 Administrator * lib/PDF/API2/: Outlines.pm, Resource.pm, Win32.pm: added CVS id/log 2003-11-30 00:22 Administrator * MANIFEST: added symbols.pm 2003-11-30 00:20 Administrator * COPYING: removed adobe patent clarification 2003-11-30 00:20 Administrator * LICENSE: addedd CVS Id/Log adobe patent clarification 2003-11-30 00:16 Administrator * README: addedd CVS Id/Log 2003-11-30 00:12 Administrator * lib/PDF/: API2/Content/Text.pm, API2.pm: addedd CVS Id/Log 2003-11-30 00:08 Administrator * lib/PDF/API2/Content/symbols.pm: added arrow and arrowfull definitions 2003-11-29 23:27 Administrator * lib/PDF/API2/Content/symbols.pm: Added CVS Id/Log 2003-11-29 23:26 Administrator * Makefile.PL: Added CVS Id 2003-11-29 23:20 Administrator * Makefile.PL: Added CVS log 2003-11-29 23:17 Administrator * Makefile.PL: Compress::Zlib prereq. downgraded to 1.0 2003-11-16 23:24 Administrator * lib/PDF/API2/Resource/Shading/axial.pm: Initial revision 2003-11-16 23:24 Administrator * lib/PDF/API2/Resource/Shading/axial.pm: no message 2003-11-16 22:55 Administrator * lib/PDF/API2/Resource/Shading.pm: Initial revision 2003-11-16 22:55 Administrator * lib/PDF/API2/Resource/Shading.pm: no message 2003-11-16 05:01 Administrator * lib/PDF/API2/Resource/Font/SynFont.pm: Initial revision 2003-11-16 05:01 Administrator * lib/PDF/API2/Resource/Font/SynFont.pm: no message 2003-11-16 04:05 Administrator * MANIFEST, lib/PDF/API2.pm, Makefile: Initial revision 2003-11-16 04:05 Administrator * MANIFEST, lib/PDF/API2.pm, Makefile: no message 2003-11-16 01:45 Administrator * lib/PDF/API2/Resource/ColorSpace.pm: Initial revision 2003-11-16 01:45 Administrator * lib/PDF/API2/Resource/ColorSpace.pm: no message 2003-11-16 00:57 Administrator * Makefile.PL: Initial revision 2003-11-16 00:57 Administrator * Makefile.PL: no message 2003-11-16 00:41 Administrator * lib/PDF/API2/Resource/Font/CoreFont.pm: Initial revision 2003-11-16 00:41 Administrator * lib/PDF/API2/Resource/Font/CoreFont.pm: no message 2003-11-15 19:51 Administrator * lib/PDF/API2/Resource/XObject/Form/BarCode/: ean13.pm, code3of9.pm: Initial revision 2003-11-15 19:51 Administrator * lib/PDF/API2/Resource/XObject/Form/BarCode/: ean13.pm, code3of9.pm: no message 2003-11-15 19:46 Administrator * AUTHORS: Initial revision 2003-11-15 19:46 Administrator * AUTHORS: no message 2003-11-15 02:45 Administrator * INSTALL, CONTACT, VERSION: Initial revision 2003-11-15 02:45 Administrator * INSTALL, CONTACT, VERSION: no message 2003-11-15 02:41 Administrator * README, LICENSE: Initial revision 2003-11-15 02:41 Administrator * README, LICENSE: no message 2003-11-01 01:36 Administrator * lib/PDF/API2/Content.pm: Initial revision 2003-11-01 01:36 Administrator * lib/PDF/API2/Content.pm: no message 2003-11-01 01:21 Administrator * lib/PDF/API2/Resource/XObject/Form/BarCode/int2of5.pm: Initial revision 2003-11-01 01:21 Administrator * lib/PDF/API2/Resource/XObject/Form/BarCode/int2of5.pm: no message 2003-11-01 00:59 Administrator * lib/PDF/API2/Resource/XObject/Form/BarCode.pm: Initial revision 2003-11-01 00:59 Administrator * lib/PDF/API2/Resource/XObject/Form/BarCode.pm: no message 2003-11-01 00:50 Administrator * lib/PDF/API2/Resource/BaseFont.pm: Initial revision 2003-11-01 00:50 Administrator * lib/PDF/API2/Resource/BaseFont.pm: no message 2003-11-01 00:06 Administrator * lib/PDF/API2/Resource/XObject/Form/BarCode/codabar.pm: Initial revision 2003-11-01 00:06 Administrator * lib/PDF/API2/Resource/XObject/Form/BarCode/codabar.pm: no message 2003-10-08 17:02 Administrator * lib/PDF/API2/Resource/XObject/Image/GD.pm: Initial revision 2003-10-08 17:02 Administrator * lib/PDF/API2/Resource/XObject/Image/GD.pm: no message 2003-10-06 19:39 Administrator * lib/PDF/API2/: Annotation.pm, Basic/PDF/Array.pm, Basic/PDF/Bool.pm, Basic/PDF/Dict.pm, Basic/PDF/File.pm, Basic/PDF/Filter.pm, Basic/PDF/Name.pm, Basic/PDF/Null.pm, Basic/PDF/Number.pm, Basic/PDF/Objind.pm, Basic/PDF/Page.pm, Basic/PDF/Pages.pm, Basic/PDF/String.pm, Basic/PDF/Utils.pm, Basic/TTF/AATKern.pm, Basic/TTF/AATutils.pm, Basic/TTF/Anchor.pm, Basic/TTF/Bsln.pm, Basic/TTF/Cmap.pm, Basic/TTF/Coverage.pm, Basic/TTF/Cvt_.pm, Basic/TTF/Delta.pm, Basic/TTF/Fdsc.pm, Basic/TTF/Feat.pm, Basic/TTF/Fmtx.pm, Basic/TTF/Font.pm, Basic/TTF/Fpgm.pm, Basic/TTF/GDEF.pm, Basic/TTF/GPOS.pm, Basic/TTF/GSUB.pm, Basic/TTF/Glyf.pm, Basic/TTF/Glyph.pm, Basic/TTF/Hdmx.pm, Basic/TTF/Head.pm, Basic/TTF/Hhea.pm, Basic/TTF/Hmtx.pm, Basic/TTF/Kern.pm, Basic/TTF/LTSH.pm, Basic/TTF/Loca.pm, Basic/TTF/Maxp.pm, Basic/TTF/Kern/ClassArray.pm, Basic/TTF/Kern/CompactClassArray.pm, Basic/TTF/Kern/OrderedList.pm, Basic/TTF/Kern/StateTable.pm, Basic/TTF/Kern/Subtable.pm, Basic/TTF/Mort/Chain.pm, Basic/TTF/Mort/Contextual.pm, Basic/TTF/Mort/Insertion.pm, IOString.pm, Lite.pm, Matrix.pm, Outline.pm, Outlines.pm, Page.pm, Basic/TTF/Mort.pm, Basic/TTF/Name.pm, Basic/TTF/OS_2.pm, Basic/TTF/OldCmap.pm, Basic/TTF/OldMort.pm, Basic/TTF/PCLT.pm, Basic/TTF/PSNames.pm, Basic/TTF/Post.pm, Basic/TTF/Prep.pm, Basic/TTF/Prop.pm, Basic/TTF/Segarr.pm, Basic/TTF/Table.pm, Basic/TTF/Ttc.pm, Basic/TTF/Ttopen.pm, Basic/TTF/Useall.pm, Basic/TTF/Utils.pm, Basic/TTF/Vhea.pm, Basic/TTF/Vmtx.pm, Basic/TTF/Win32.pm, Basic/TTF/XMLparse.pm, Basic/TTF/Mort/Ligature.pm, Basic/TTF/Mort/Noncontextual.pm, Basic/TTF/Mort/Rearrangement.pm, Basic/TTF/Mort/Subtable.pm, Content/Text.pm, Resource/CIDFont/CJKFont/adobemingstdlightacro.pm, Resource/CIDFont/CJKFont/adobemyungjostdmediumacro.pm, Resource/CIDFont/CJKFont/adobesongstdlightacro.pm, Resource/CIDFont/CJKFont/kozgopromediumacro.pm, Resource/CIDFont/CJKFont.pm, Resource/CIDFont/CJKFont/kozminproregularacro.pm, Resource/CIDFont/CMap/japanese.pm, Resource/CIDFont/CMap/korean.pm, Resource/CIDFont/CMap/simplified.pm, Resource/CIDFont.pm, Resource/ExtGState.pm, Resource/CIDFont/TrueType.pm, Resource/CIDFont/CMap/traditional.pm, Resource/CIDFont/TrueType/FontFile.pm, Resource/ColorSpace/Indexed.pm, Resource/ColorSpace/Indexed/ACTFile.pm, Resource/ColorSpace/Indexed/Hue.pm, Resource/ColorSpace/Indexed/WebColor.pm, Resource/Font/CoreFont/bankgothic.pm, Resource/Font/CoreFont/courier.pm, Resource/Font/CoreFont/courierbold.pm, Resource/Font/CoreFont/courierboldoblique.pm, Resource/Font/CoreFont/courieroblique.pm, Resource/Font/CoreFont/georgia.pm, Resource/Font/CoreFont/georgiabold.pm, Resource/Font/CoreFont/georgiabolditalic.pm, Resource/Font/CoreFont/georgiaitalic.pm, Resource/Font/CoreFont/helvetica.pm, Resource/Font/CoreFont/helveticabold.pm, Resource/Font/CoreFont/helveticaboldoblique.pm, Resource/Font/CoreFont/helveticaoblique.pm, Resource/Font/CoreFont/symbol.pm, Resource/Font/CoreFont/timesbold.pm, Resource/Font/CoreFont/timesbolditalic.pm, Resource/Font/CoreFont/timesitalic.pm, Resource/Font/CoreFont/timesroman.pm, Resource/Font/CoreFont/trebuchet.pm, Resource/Font/CoreFont/trebuchetbold.pm, Resource/Font/CoreFont/trebuchetbolditalic.pm, Resource/Font/CoreFont/trebuchetitalic.pm, Resource.pm, Util.pm, Win32.pm, Resource/Font.pm, Resource/XObject.pm, Resource/Font/Postscript.pm, Resource/Font/CoreFont/verdana.pm, Resource/Font/CoreFont/verdanabold.pm, Resource/Font/CoreFont/verdanabolditalic.pm, Resource/Font/CoreFont/verdanaitalic.pm, Resource/Font/CoreFont/webdings.pm, Resource/Font/CoreFont/wingdings.pm, Resource/Font/CoreFont/zapfdingbats.pm, Resource/XObject/Form.pm, Resource/XObject/Image.pm, Resource/XObject/Form/Hybrid.pm, Resource/XObject/Image/GIF.pm, Resource/XObject/Image/JPEG.pm, Resource/XObject/Image/PNG.pm, Resource/XObject/Image/PNM.pm, Resource/XObject/Image/TIFF.pm: Initial revision 2003-10-06 19:39 Administrator * lib/PDF/API2/: Annotation.pm, Basic/PDF/Array.pm, Basic/PDF/Bool.pm, Basic/PDF/Dict.pm, Basic/PDF/File.pm, Basic/PDF/Filter.pm, Basic/PDF/Name.pm, Basic/PDF/Null.pm, Basic/PDF/Number.pm, Basic/PDF/Objind.pm, Basic/PDF/Page.pm, Basic/PDF/Pages.pm, Basic/PDF/String.pm, Basic/PDF/Utils.pm, Basic/TTF/AATKern.pm, Basic/TTF/AATutils.pm, Basic/TTF/Anchor.pm, Basic/TTF/Bsln.pm, Basic/TTF/Cmap.pm, Basic/TTF/Coverage.pm, Basic/TTF/Cvt_.pm, Basic/TTF/Delta.pm, Basic/TTF/Fdsc.pm, Basic/TTF/Feat.pm, Basic/TTF/Fmtx.pm, Basic/TTF/Font.pm, Basic/TTF/Fpgm.pm, Basic/TTF/GDEF.pm, Basic/TTF/GPOS.pm, Basic/TTF/GSUB.pm, Basic/TTF/Glyf.pm, Basic/TTF/Glyph.pm, Basic/TTF/Hdmx.pm, Basic/TTF/Head.pm, Basic/TTF/Hhea.pm, Basic/TTF/Hmtx.pm, Basic/TTF/Kern.pm, Basic/TTF/LTSH.pm, Basic/TTF/Loca.pm, Basic/TTF/Maxp.pm, Basic/TTF/Kern/ClassArray.pm, Basic/TTF/Kern/CompactClassArray.pm, Basic/TTF/Kern/OrderedList.pm, Basic/TTF/Kern/StateTable.pm, Basic/TTF/Kern/Subtable.pm, Basic/TTF/Mort/Chain.pm, Basic/TTF/Mort/Contextual.pm, Basic/TTF/Mort/Insertion.pm, IOString.pm, Lite.pm, Matrix.pm, Outline.pm, Outlines.pm, Page.pm, Basic/TTF/Mort.pm, Basic/TTF/Name.pm, Basic/TTF/OS_2.pm, Basic/TTF/OldCmap.pm, Basic/TTF/OldMort.pm, Basic/TTF/PCLT.pm, Basic/TTF/PSNames.pm, Basic/TTF/Post.pm, Basic/TTF/Prep.pm, Basic/TTF/Prop.pm, Basic/TTF/Segarr.pm, Basic/TTF/Table.pm, Basic/TTF/Ttc.pm, Basic/TTF/Ttopen.pm, Basic/TTF/Useall.pm, Basic/TTF/Utils.pm, Basic/TTF/Vhea.pm, Basic/TTF/Vmtx.pm, Basic/TTF/Win32.pm, Basic/TTF/XMLparse.pm, Basic/TTF/Mort/Ligature.pm, Basic/TTF/Mort/Noncontextual.pm, Basic/TTF/Mort/Rearrangement.pm, Basic/TTF/Mort/Subtable.pm, Content/Text.pm, Resource/CIDFont/CJKFont/adobemingstdlightacro.pm, Resource/CIDFont/CJKFont/adobemyungjostdmediumacro.pm, Resource/CIDFont/CJKFont/adobesongstdlightacro.pm, Resource/CIDFont/CJKFont/kozgopromediumacro.pm, Resource/CIDFont/CJKFont.pm, Resource/CIDFont/CJKFont/kozminproregularacro.pm, Resource/CIDFont/CMap/japanese.pm, Resource/CIDFont/CMap/korean.pm, Resource/CIDFont/CMap/simplified.pm, Resource/CIDFont.pm, Resource/ExtGState.pm, Resource/CIDFont/TrueType.pm, Resource/CIDFont/CMap/traditional.pm, Resource/CIDFont/TrueType/FontFile.pm, Resource/ColorSpace/Indexed.pm, Resource/ColorSpace/Indexed/ACTFile.pm, Resource/ColorSpace/Indexed/Hue.pm, Resource/ColorSpace/Indexed/WebColor.pm, Resource/Font/CoreFont/bankgothic.pm, Resource/Font/CoreFont/courier.pm, Resource/Font/CoreFont/courierbold.pm, Resource/Font/CoreFont/courierboldoblique.pm, Resource/Font/CoreFont/courieroblique.pm, Resource/Font/CoreFont/georgia.pm, Resource/Font/CoreFont/georgiabold.pm, Resource/Font/CoreFont/georgiabolditalic.pm, Resource/Font/CoreFont/georgiaitalic.pm, Resource/Font/CoreFont/helvetica.pm, Resource/Font/CoreFont/helveticabold.pm, Resource/Font/CoreFont/helveticaboldoblique.pm, Resource/Font/CoreFont/helveticaoblique.pm, Resource/Font/CoreFont/symbol.pm, Resource/Font/CoreFont/timesbold.pm, Resource/Font/CoreFont/timesbolditalic.pm, Resource/Font/CoreFont/timesitalic.pm, Resource/Font/CoreFont/timesroman.pm, Resource/Font/CoreFont/trebuchet.pm, Resource/Font/CoreFont/trebuchetbold.pm, Resource/Font/CoreFont/trebuchetbolditalic.pm, Resource/Font/CoreFont/trebuchetitalic.pm, Resource.pm, Util.pm, Win32.pm, Resource/Font.pm, Resource/XObject.pm, Resource/Font/Postscript.pm, Resource/Font/CoreFont/verdana.pm, Resource/Font/CoreFont/verdanabold.pm, Resource/Font/CoreFont/verdanabolditalic.pm, Resource/Font/CoreFont/verdanaitalic.pm, Resource/Font/CoreFont/webdings.pm, Resource/Font/CoreFont/wingdings.pm, Resource/Font/CoreFont/zapfdingbats.pm, Resource/XObject/Form.pm, Resource/XObject/Image.pm, Resource/XObject/Form/Hybrid.pm, Resource/XObject/Image/GIF.pm, Resource/XObject/Image/JPEG.pm, Resource/XObject/Image/PNG.pm, Resource/XObject/Image/PNM.pm, Resource/XObject/Image/TIFF.pm: no message 2003-09-13 20:37 Administrator * COPYING: Initial revision 2003-09-13 20:37 Administrator * COPYING: no message 2003-07-16 17:51 Administrator * lib/PDF/API2/Basic/TTF/Manual.pod: Initial revision 2003-07-16 17:51 Administrator * lib/PDF/API2/Basic/TTF/Manual.pod: no message 2003-04-09 13:13 fredo * lib/PDF/API2/Resource/CIDFont/CJKFont.pm: added/fixed proper alias/substitutions 2003-04-09 13:12 fredo * lib/PDF/API2/Content.pm: documented form-image 2002-10-02 18:47 Administrator * lib/PDF/API2/Basic/TTF/Changes: Initial revision 2002-10-02 18:47 Administrator * lib/PDF/API2/Basic/TTF/Changes: no message PDF-API2-2.048/lib/0000755000175000017500000000000015054353432013345 5ustar smsimmssmsimmsPDF-API2-2.048/lib/PDF/0000755000175000017500000000000015054353432013756 5ustar smsimmssmsimmsPDF-API2-2.048/lib/PDF/API2.pm0000644000175000017500000026663115054353432015025 0ustar smsimmssmsimmspackage PDF::API2; use strict; no warnings qw[ deprecated recursion uninitialized ]; our $VERSION = '2.048'; # VERSION use Carp; use Encode qw(:all); use English; use FileHandle; use PDF::API2::Basic::PDF::Utils; use PDF::API2::Util; use PDF::API2::Basic::PDF::File; use PDF::API2::Basic::PDF::Pages; use PDF::API2::Page; use PDF::API2::Resource::XObject::Form::Hybrid; use PDF::API2::Resource::ExtGState; use PDF::API2::Resource::Pattern; use PDF::API2::Resource::Shading; use PDF::API2::NamedDestination; use List::Util qw(max); use Scalar::Util qw(weaken); my @font_path = __PACKAGE__->set_font_path('/usr/share/fonts', '/usr/local/share/fonts', 'c:/windows/fonts'); =head1 NAME PDF::API2 - Create, modify, and examine PDF files =head1 SYNOPSIS use PDF::API2; # Create a blank PDF file $pdf = PDF::API2->new(); # Open an existing PDF file $pdf = PDF::API2->open('some.pdf'); # Add a blank page $page = $pdf->page(); # Retrieve an existing page $page = $pdf->open_page($page_number); # Set the page size $page->size('Letter'); # Add a built-in font to the PDF $font = $pdf->font('Helvetica-Bold'); # Add an external TrueType font to the PDF $font = $pdf->font('/path/to/font.ttf'); # Add some text to the page $text = $page->text(); $text->font($font, 20); $text->position(200, 700); $text->text('Hello World!'); # Save the PDF $pdf->save('/path/to/new.pdf'); =head1 INPUT/OUTPUT METHODS =head2 new my $pdf = PDF::API2->new(%options); Create a new PDF. The following options are available: =over =item * file If you will be saving the PDF to disk and already know the filename, you can include it here to open the file for writing immediately. C may also be a filehandle. =item * compress By default, most of the PDF will be compressed to save space. To turn this off (generally only useful for testing or debugging), set C to 0. =back =cut sub new { my ($class, %options) = @_; my $self = {}; bless $self, $class; $self->{'pdf'} = PDF::API2::Basic::PDF::File->new(); $self->{'pdf'}->{' version'} = '1.4'; $self->{'pages'} = PDF::API2::Basic::PDF::Pages->new($self->{'pdf'}); $self->{'pages'}->proc_set(qw(PDF Text ImageB ImageC ImageI)); $self->{'pages'}->{'Resources'} ||= PDFDict(); $self->{'pdf'}->new_obj($self->{'pages'}->{'Resources'}) unless $self->{'pages'}->{'Resources'}->is_obj($self->{'pdf'}); $self->{'catalog'} = $self->{'pdf'}->{'Root'}; weaken $self->{'catalog'}; $self->{'fonts'} = {}; $self->{'pagestack'} = []; # -compress is deprecated (remove the hyphen) if (exists $options{'-compress'}) { $options{'compress'} //= delete $options{'-compress'}; } if (exists $options{'compress'}) { $self->{'forcecompress'} = $options{'compress'} ? 1 : 0; } else { $self->{'forcecompress'} = 1; } $self->preferences(%options); # -file is deprecated (remove the hyphen) $options{'file'} //= $options{'-file'} if $options{'-file'}; if ($options{'file'}) { $self->{'pdf'}->create_file($options{'file'}); $self->{'partial_save'} = 1; } # Deprecated; used by info and infoMetaAttributes but not their replacements $self->{'infoMeta'} = [qw(Author CreationDate ModDate Creator Producer Title Subject Keywords)]; my $version = eval { $PDF::API2::VERSION } || 'Development Version'; $self->producer("PDF::API2 $version ($OSNAME)"); return $self; } =head2 open my $pdf = PDF::API2->open('/path/to/file.pdf', %options); Open an existing PDF file. The following option is available: =over =item * compress By default, most of the PDF will be compressed to save space. To turn this off (generally only useful for testing or debugging), set C to 0. =back =cut sub open { my ($class, $file, %options) = @_; croak "File '$file' does not exist" unless -f $file; croak "File '$file' is not readable" unless -r $file; my $self = {}; bless $self, $class; foreach my $parameter (keys %options) { $self->default($parameter, $options{$parameter}); } my $is_writable = -w $file; $self->{'pdf'} = PDF::API2::Basic::PDF::File->open($file, $is_writable); _open_common($self, %options); $self->{'pdf'}->{' fname'} = $file; $self->{'opened_readonly'} = 1 unless $is_writable; return $self; } sub _open_common { my ($self, %options) = @_; $self->{'pdf'}->{'Root'}->realise(); $self->{'pdf'}->{' version'} ||= '1.3'; $self->{'pages'} = $self->{'pdf'}->{'Root'}->{'Pages'}->realise(); weaken $self->{'pages'}; my @pages = proc_pages($self->{'pdf'}, $self->{'pages'}); $self->{'pagestack'} = [sort { $a->{' pnum'} <=> $b->{' pnum'} } @pages]; weaken $self->{'pagestack'}->[$_] for (0 .. scalar @{$self->{'pagestack'}}); $self->{'catalog'} = $self->{'pdf'}->{'Root'}; weaken $self->{'catalog'}; $self->{'opened'} = 1; # -compress is deprecated (remove the hyphen) if (exists $options{'-compress'}) { $options{'compress'} //= delete $options{'-compress'}; } if (exists $options{'compress'}) { $self->{'forcecompress'} = $options{'compress'} ? 1 : 0; } else { $self->{'forcecompress'} = 1; } $self->{'fonts'} = {}; $self->{'infoMeta'} = [qw(Author CreationDate ModDate Creator Producer Title Subject Keywords)]; return $self; } =head2 save $pdf->save('/path/to/file.pdf'); Write the PDF to disk and close the file. A filename is optional if one was specified while opening or creating the PDF. As a side effect, the document structure is removed from memory when the file is saved, so it will no longer be usable. =cut # Deprecated (renamed) sub saveas { return save(@_) } ## no critic sub save { my ($self, $file) = @_; if ($self->{'partial_save'} and not $file) { $self->{'pdf'}->close_file(); } elsif ($self->{'opened_scalar'}) { croak 'A filename argument is required' unless $file; $self->{'pdf'}->append_file(); my $fh; CORE::open($fh, '>', $file) or die "Unable to open $file for writing: $!"; binmode($fh, ':raw'); print $fh ${$self->{'content_ref'}}; CORE::close($fh); } else { croak 'A filename argument is required' unless $file; unless ($self->{'pdf'}->{' fname'}) { $self->{'pdf'}->out_file($file); } elsif ($self->{'pdf'}->{' fname'} eq $file) { croak "File is read-only" if $self->{'opened_readonly'}; $self->{'pdf'}->close_file(); } else { $self->{'pdf'}->clone_file($file); $self->{'pdf'}->close_file(); } } # This can be eliminated once we're confident that circular references are # no longer an issue. See t/circular-references.t. $self->close(); return; } # Deprecated (use save instead) # # This method allows for objects to be written to disk in advance of finally # saving and closing the file. Otherwise, it's no different than just calling # save when all changes have been made. There's no memory advantage since # ship_out doesn't remove objects from memory. sub finishobjects { my ($self, @objs) = @_; if ($self->{'partial_save'}) { $self->{'pdf'}->ship_out(@objs); } return; } # Deprecated (use save instead) sub update { my $self = shift(); croak "File is read-only" if $self->{'opened_readonly'}; $self->{'pdf'}->close_file(); return; } =head2 close $pdf->close(); Close an open file (if relevant) and remove the object structure from memory. PDF::API2 contains circular references, so this call is necessary in long-running processes to keep from running out of memory. 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. =cut # Deprecated (renamed) sub release { return $_[0]->close() } sub end { return $_[0]->close() } sub close { my $self = shift(); $self->{'pdf'}->release() if defined $self->{'pdf'}; foreach my $key (keys %$self) { $self->{$key} = undef; delete $self->{$key}; } return; } =head2 from_string my $pdf = PDF::API2->from_string($pdf_string, %options); Read a PDF document contained in a string. The following option is available: =over =item * compress By default, most of the PDF will be compressed to save space. To turn this off (generally only useful for testing or debugging), set C to 0. =back =cut # Deprecated (renamed) sub openScalar { return from_string(@_); } ## no critic sub open_scalar { return from_string(@_); } ## no critic sub from_string { my ($class, $content, %options) = @_; my $self = {}; bless $self, $class; foreach my $parameter (keys %options) { $self->default($parameter, $options{$parameter}); } $self->{'content_ref'} = \$content; my $fh; CORE::open($fh, '+<', \$content) or die "Can't begin scalar IO"; $self->{'pdf'} = PDF::API2::Basic::PDF::File->open($fh, 1); _open_common($self, %options); $self->{'opened_scalar'} = 1; return $self; } =head2 to_string my $string = $pdf->to_string(); Return the PDF document as a string. As a side effect, the document structure is removed from memory when the string is created, so it will no longer be usable. =cut # Maintainer's note: The object is being destroyed because it contains # (contained?) circular references that would otherwise result in memory not # being freed if the object merely goes out of scope. If possible, the circular # references should be eliminated so that to_string doesn't need to be # destructive. See t/circular-references.t. # # I've opted not to just require a separate call to close() because it would # likely introduce memory leaks in many existing programs that use this module. # Deprecated (renamed) sub stringify { return to_string(@_) } ## no critic sub to_string { my $self = shift(); my $string = ''; if ($self->{'opened_scalar'}) { $self->{'pdf'}->append_file(); $string = ${$self->{'content_ref'}}; } elsif ($self->{'opened'}) { my $fh = FileHandle->new(); CORE::open($fh, '>', \$string) || die "Can't begin scalar IO"; $self->{'pdf'}->clone_file($fh); $self->{'pdf'}->close_file(); $fh->close(); } else { my $fh = FileHandle->new(); CORE::open($fh, '>', \$string) || die "Can't begin scalar IO"; $self->{'pdf'}->out_file($fh); $fh->close(); } # This can be eliminated once we're confident that circular references are # no longer an issue. See t/circular-references.t. $self->close(); return $string; } =head1 METADATA METHODS =head2 title $title = $pdf->title(); $pdf = $pdf->title($title); Get/set/clear the document's title. =cut sub title { my $self = shift(); return $self->info_metadata('Title', @_); } =head2 author $author = $pdf->author(); $pdf = $pdf->author($author); Get/set/clear the name of the person who created the document. =cut sub author { my $self = shift(); return $self->info_metadata('Author', @_); } =head2 subject $subject = $pdf->subject(); $pdf = $pdf->subject($subject); Get/set/clear the subject of the document. =cut sub subject { my $self = shift(); return $self->info_metadata('Subject', @_); } =head2 keywords $keywords = $pdf->keywords(); $pdf = $pdf->keywords($keywords); Get/set/clear a space-separated string of keywords associated with the document. =cut sub keywords { my $self = shift(); return $self->info_metadata('Keywords', @_); } =head2 creator $creator = $pdf->creator(); $pdf = $pdf->creator($creator); Get/set/clear the name of the product that created the document prior to its conversion to PDF. =cut sub creator { my $self = shift(); return $self->info_metadata('Creator', @_); } =head2 producer $producer = $pdf->producer(); $pdf = $pdf->producer($producer); Get/set/clear the name of the product that converted the original document to PDF. PDF::API2 fills in this field when creating a PDF. =cut sub producer { my $self = shift(); return $self->info_metadata('Producer', @_); } =head2 created $date = $pdf->created(); $pdf = $pdf->created($date); Get/set/clear the document's creation date. The date format is C, where C is a static prefix identifying the string as a PDF date. The date may be truncated at any point after the year. C is one of C<+>, C<->, or C, with the following C representing an offset from UTC. When setting the date, C will be prepended automatically if omitted. =cut sub created { my $self = shift(); return $self->info_metadata('CreationDate', @_); } =head2 modified $date = $pdf->modified(); $pdf = $pdf->modified($date); Get/set/clear the document's modification date. The date format is as described in C above. =cut sub modified { my $self = shift(); return $self->info_metadata('ModDate', @_); } sub _is_date { my $value = shift(); # PDF 1.7 section 7.9.4 describes the required date format. Other than the # D: prefix and the year, all components are optional but must be present if # a later component is present. No provision is made in the specification # for leap seconds, etc. # # The Adobe PDF specifications (including 1.7) state that the offset minutes # must have a trailing apostrophe. Beginning with the ISO version of the # 1.7 specification, a trailing apostrophe is not permitted after the offset # minutes. For compatibility, we accept either version as valid. return unless $value =~ /^D:([0-9]{4}) # D:YYYY (required) (?:([01][0-9]) # Month (01-12) (?:([0123][0-9]) # Day (01-31) (?:([012][0-9]) # Hour (00-23) (?:([012345][0-9]) # Minute (00-59) (?:([012345][0-9]) # Second (00-59) (?:([Z+-]) # UT Offset Direction (?:([012][0-9])\'? # UT Offset Hours (?:([012345][0-9])\'? # UT Offset Minutes )?)?)?)?)?)?)?)?$/x; my ($year, $month, $day, $hour, $minute, $second, $od, $oh, $om) = ($1, $2, $3, $4, $5, $6, $7, $8, $9); # Do some basic validation to catch accidental date formatting issues. # Complete date validation is out of scope. if (defined $month) { return unless $month >= 1 and $month <= 12; } if (defined $day) { return unless $day >= 1 and $day <= 31; } if (defined $hour) { return unless $hour <= 23; } if (defined $minute) { return unless $minute <= 59; } if (defined $second) { return unless $second <= 59; } if (defined $od) { return if $od eq 'Z' and defined($oh); } if (defined $oh) { return unless $oh <= 23; } if (defined $om) { return unless $om <= 59; } if (defined $oh and $om) { # Apostrophe is required between offset hour and minute return unless $value =~ /$oh\'$om\'?/; } return 1; } =head2 info_metadata # Get all keys and values %info = $pdf->info_metadata(); # Get the value of one key $value = $pdf->info_metadata($key); # Set the value of one key $pdf = $pdf->info_metadata($key, $value); Get/set/clear a key in the document's information dictionary. The standard keys (title, author, etc.) have their own accessors, so this is primarily intended for interacting with custom metadata. Pass C as the value in order to remove the key from the dictionary. =cut sub info_metadata { my $self = shift(); my $field = shift(); # Return a hash of the Info table if called without arguments unless (defined $field) { return unless exists $self->{'pdf'}->{'Info'}; $self->{'pdf'}->{'Info'}->realise(); my %info; foreach my $key (keys %{$self->{'pdf'}->{'Info'}}) { next if $key =~ /^ /; next unless defined $self->{'pdf'}->{'Info'}->{$key}; $info{$key} = $self->{'pdf'}->{'Info'}->{$key}->val(); } return %info; } # Set if (@_) { my $value = shift(); $value = undef if defined($value) and not length($value); if ($field eq 'CreationDate' or $field eq 'ModDate') { if (defined ($value)) { $value = 'D:' . $value unless $value =~ /^D:/; croak "Invalid date string: $value" unless _is_date($value); } } unless (exists $self->{'pdf'}->{'Info'}) { return $self unless defined $value; $self->{'pdf'}->{'Info'} = PDFDict(); $self->{'pdf'}->new_obj($self->{'pdf'}->{'Info'}); } else { $self->{'pdf'}->{'Info'}->realise(); } if (defined $value) { $self->{'pdf'}->{'Info'}->{$field} = PDFStr($value); } else { delete $self->{'pdf'}->{'Info'}->{$field}; } return $self; } # Get return unless $self->{'pdf'}->{'Info'}; $self->{'pdf'}->{'Info'}->realise(); return unless $self->{'pdf'}->{'Info'}->{$field}; return $self->{'pdf'}->{'Info'}->{$field}->val(); } # Deprecated; replace with individual accessors or info_metadata sub info { my ($self, %opt) = @_; if (not defined($self->{'pdf'}->{'Info'})) { $self->{'pdf'}->{'Info'} = PDFDict(); $self->{'pdf'}->new_obj($self->{'pdf'}->{'Info'}); } else { $self->{'pdf'}->{'Info'}->realise(); } # Maintenance Note: Since we're not shifting at the beginning of # this sub, this "if" will always be true if (scalar @_) { foreach my $k (@{$self->{'infoMeta'}}) { next unless defined $opt{$k}; $self->{'pdf'}->{'Info'}->{$k} = PDFStr($opt{$k} || 'NONE'); } $self->{'pdf'}->out_obj($self->{'pdf'}->{'Info'}); } if (defined $self->{'pdf'}->{'Info'}) { %opt = (); foreach my $k (@{$self->{'infoMeta'}}) { next unless defined $self->{'pdf'}->{'Info'}->{$k}; $opt{$k} = $self->{'pdf'}->{'Info'}->{$k}->val(); if ( (unpack('n', $opt{$k}) == 0xfffe) or (unpack('n', $opt{$k}) == 0xfeff)) { $opt{$k} = decode('UTF-16', $self->{'pdf'}->{'Info'}->{$k}->val()); } } } return %opt; } # Deprecated; replace with info_metadata sub infoMetaAttributes { my ($self, @attr) = @_; if (scalar @attr) { my %at = map { $_ => 1 } @{$self->{'infoMeta'}}, @attr; @{$self->{'infoMeta'}} = keys %at; } return @{$self->{'infoMeta'}}; } =head2 xml_metadata $xml = $pdf->xml_metadata(); $pdf = $pdf->xml_metadata($xml); Get/set the document's XML metadata stream. =cut # Deprecated (renamed, changed set return value for consistency) sub xmpMetadata { my $self = shift(); if (@_) { my $value = shift(); $self->xml_metadata($value); return $value; } return $self->xml_metadata(); } sub xml_metadata { my ($self, $value) = @_; if (not defined($self->{'catalog'}->{'Metadata'})) { $self->{'catalog'}->{'Metadata'} = PDFDict(); $self->{'catalog'}->{'Metadata'}->{'Type'} = PDFName('Metadata'); $self->{'catalog'}->{'Metadata'}->{'Subtype'} = PDFName('XML'); $self->{'pdf'}->new_obj($self->{'catalog'}->{'Metadata'}); } else { $self->{'catalog'}->{'Metadata'}->realise(); $self->{'catalog'}->{'Metadata'}->{' stream'} = unfilter($self->{'catalog'}->{'Metadata'}->{'Filter'}, $self->{'catalog'}->{'Metadata'}->{' stream'}); delete $self->{'catalog'}->{'Metadata'}->{' nofilt'}; delete $self->{'catalog'}->{'Metadata'}->{'Filter'}; } my $md = $self->{'catalog'}->{'Metadata'}; if (defined $value) { $md->{' stream'} = $value; delete $md->{'Filter'}; delete $md->{' nofilt'}; $self->{'pdf'}->out_obj($md); $self->{'pdf'}->out_obj($self->{'catalog'}); } return $md->{' stream'}; } =head2 version $version = $pdf->version($new_version); Get/set the PDF version (e.g. 1.4). =cut sub version { my $self = shift(); return $self->{'pdf'}->version(@_); } =head2 is_encrypted $boolean = $pdf->is_encrypted(); Returns true if the opened PDF is encrypted. =cut # Deprecated (renamed) sub isEncrypted { return is_encrypted(@_) } sub is_encrypted { my $self = shift(); return defined($self->{'pdf'}->{'Encrypt'}) ? 1 : 0; } =head1 INTERACTIVE FEATURE METHODS =head2 outline $outline = $pdf->outline(); Creates (if needed) and returns the document's outline tree, which is also known as its bookmarks or the table of contents, depending on the PDF reader. To examine or modify the outline tree, see L. =cut # Deprecated (renamed) sub outlines { return outline(@_) } sub outline { my $self = shift(); require PDF::API2::Outlines; my $obj = $self->{'pdf'}->{'Root'}->{'Outlines'}; if ($obj) { $obj->realise(); bless $obj, 'PDF::API2::Outlines'; $obj->{' api'} = $self; weaken $obj->{' api'}; } else { $obj = PDF::API2::Outlines->new($self); $self->{'pdf'}->{'Root'}->{'Outlines'} = $obj; $self->{'pdf'}->new_obj($obj) unless $obj->is_obj($self->{'pdf'}); $self->{'pdf'}->out_obj($obj); $self->{'pdf'}->out_obj($self->{'pdf'}->{'Root'}); } return $obj; } =head2 open_action $pdf = $pdf->open_action($page, $location, @args); Set the destination in the PDF that should be displayed when the document is opened. C<$page> may be either a page number or a page object. The other parameters are as described in L. =cut sub open_action { my ($self, $page, @args) = @_; # $page can be either a page number or a page object $page = PDFNum($page) unless ref($page); require PDF::API2::NamedDestination; my $array = PDF::API2::NamedDestination::_destination($page, @args); $self->{'catalog'}->{'OpenAction'} = $array; $self->{'pdf'}->out_obj($self->{'catalog'}); return $self; } =head2 page_layout $layout = $pdf->page_layout(); $pdf = $pdf->page_layout($layout); Get/set the page layout that should be used when the PDF is opened. C<$layout> is one of the following: =over =item * single_page (or undef) Display one page at a time. =item * one_column Display the pages in one column (a.k.a. continuous). =item * two_column_left Display the pages in two columns, with odd-numbered pages on the left. =item * two_column_right Display the pages in two columns, with odd-numbered pages on the right. =item * two_page_left Display two pages at a time, with odd-numbered pages on the left. =item * two_page_right Display two pages at a time, with odd-numbered pages on the right. =back =cut sub page_layout { my $self = shift(); unless (@_) { return 'single_page' unless $self->{'catalog'}->{'PageLayout'}; my $layout = $self->{'catalog'}->{'PageLayout'}->val(); return 'single_page' if $layout eq 'SinglePage'; return 'one_column' if $layout eq 'OneColumn'; return 'two_column_left' if $layout eq 'TwoColumnLeft'; return 'two_column_right' if $layout eq 'TwoColumnRight'; return 'two_page_left' if $layout eq 'TwoPageLeft'; return 'two_page_right' if $layout eq 'TwoPageRight'; warn "Unknown page layout: $layout"; return $layout; } my $name = shift() // 'single_page'; my $layout = ($name eq 'single_page' ? 'SinglePage' : $name eq 'one_column' ? 'OneColumn' : $name eq 'two_column_left' ? 'TwoColumnLeft' : $name eq 'two_column_right' ? 'TwoColumnRight' : $name eq 'two_page_left' ? 'TwoPageLeft' : $name eq 'two_page_right' ? 'TwoPageRight' : ''); croak "Invalid page layout: $name" unless $layout; $self->{'catalog'}->{'PageLayout'} = PDFName($layout); $self->{'pdf'}->out_obj($self->{'catalog'}); return $self; } =head2 page_mode # Get $mode = $pdf->page_mode(); # Set $pdf = $pdf->page_mode($mode); Get/set the page mode, which describes how the PDF should be displayed when opened. C<$mode> is one of the following: =over =item * none (or undef) Neither outlines nor thumbnails should be displayed. =item * outlines Show the document outline. =item * thumbnails Show the page thumbnails. =item * full_screen Open in full-screen mode, with no menu bar, window controls, or any other window visible. =item * optional_content Show the optional content group panel. =item * attachments Show the attachments panel. =back =cut sub page_mode { my $self = shift(); unless (@_) { return 'none' unless $self->{'catalog'}->{'PageMode'}; my $mode = $self->{'catalog'}->{'PageMode'}->val(); return 'none' if $mode eq 'UseNone'; return 'outlines' if $mode eq 'UseOutlines'; return 'thumbnails' if $mode eq 'UseThumbs'; return 'full_screen' if $mode eq 'FullScreen'; return 'optional_content' if $mode eq 'UseOC'; return 'attachments' if $mode eq 'UseAttachments'; warn "Unknown page mode: $mode"; return $mode; } my $name = shift() // 'none'; my $mode = ($name eq 'none' ? 'UseNone' : $name eq 'outlines' ? 'UseOutlines' : $name eq 'thumbnails' ? 'UseThumbs' : $name eq 'full_screen' ? 'FullScreen' : $name eq 'optional_content' ? 'UseOC' : $name eq 'attachments' ? 'UseAttachments' : ''); croak "Invalid page mode: $name" unless $mode; $self->{'catalog'}->{'PageMode'} = PDFName($mode); $self->{'pdf'}->out_obj($self->{'catalog'}); return $self; } =head2 viewer_preferences # Get %preferences = $pdf->viewer_preferences(); # Set $pdf = $pdf->viewer_preferences(%preferences); Get or set PDF viewer preferences, as described in L. =cut sub viewer_preferences { my $self = shift(); require PDF::API2::ViewerPreferences; my $prefs = PDF::API2::ViewerPreferences->new($self); unless (@_) { return $prefs->get_preferences(); } return $prefs->set_preferences(@_); } # Deprecated; the various preferences have been split out into their own methods sub preferences { my ($self, %options) = @_; # Page Mode Options if ($options{'-fullscreen'}) { $self->page_mode('full_screen'); } elsif ($options{'-thumbs'}) { $self->page_mode('thumbnails'); } elsif ($options{'-outlines'}) { $self->page_mode('outlines'); } else { $self->page_mode('none'); } # Page Layout Options if ($options{'-singlepage'}) { $self->page_layout('single_page'); } elsif ($options{'-onecolumn'}) { $self->page_layout('one_column'); } elsif ($options{'-twocolumnleft'}) { $self->page_layout('two_column_left'); } elsif ($options{'-twocolumnright'}) { $self->page_layout('two_column_right'); } else { $self->page_layout('single_page'); } # Viewer Preferences if ($options{'-hidetoolbar'}) { $self->viewer_preferences(hide_toolbar => 1); } if ($options{'-hidemenubar'}) { $self->viewer_preferences(hide_menubar => 1); } if ($options{'-hidewindowui'}) { $self->viewer_preferences(hide_window_ui => 1); } if ($options{'-fitwindow'}) { $self->viewer_preferences(fit_window => 1); } if ($options{'-centerwindow'}) { $self->viewer_preferences(center_window => 1); } if ($options{'-displaytitle'}) { $self->viewer_preferences(display_doc_title => 1); } if ($options{'-righttoleft'}) { $self->viewer_preferences(direction => 'r2l'); } if ($options{'-afterfullscreenthumbs'}) { $self->viewer_preferences(non_full_screen_page_mode => 'thumbnails'); } elsif ($options{'-afterfullscreenoutlines'}) { $self->viewer_preferences(non_full_screen_page_mode => 'outlines'); } else { $self->viewer_preferences(non_full_screen_page_mode => 'none'); } if ($options{'-printscalingnone'}) { $self->viewer_preferences(print_scaling => 'none'); } if ($options{'-simplex'}) { $self->viewer_preferences(duplex => 'simplex'); } elsif ($options{'-duplexfliplongedge'}) { $self->viewer_preferences(duplex => 'duplex_long'); } elsif ($options{'-duplexflipshortedge'}) { $self->viewer_preferences(duplex => 'duplex_short'); } # Open Action if ($options{'-firstpage'}) { my ($page, %args) = @{$options{'-firstpage'}}; $args{'-fit'} = 1 unless keys %args; if (defined $args{'-fit'}) { $self->open_action($page, 'fit'); } elsif (defined $args{'-fith'}) { $self->open_action($page, 'fith', $args{'-fith'}); } elsif (defined $args{'-fitb'}) { $self->open_action($page, 'fitb'); } elsif (defined $args{'-fitbh'}) { $self->open_action($page, 'fitbh', $args{'-fitbh'}); } elsif (defined $args{'-fitv'}) { $self->open_action($page, 'fitv', $args{'-fitv'}); } elsif (defined $args{'-fitbv'}) { $self->open_action($page, 'fitbv', $args{'-fitbv'}); } elsif (defined $args{'-fitr'}) { $self->open_action($page, 'fitr', @{$args{'-fitr'}}); } elsif (defined $args{'-xyz'}) { $self->open_action($page, 'xyz', @{$args{'-xyz'}}); } } $self->{'pdf'}->out_obj($self->{'catalog'}); return $self; } sub proc_pages { my ($pdf, $object) = @_; if (defined $object->{'Resources'}) { eval { $object->{'Resources'}->realise(); }; } my @pages; $pdf->{' apipagecount'} ||= 0; foreach my $page ($object->{'Kids'}->elements()) { $page->realise(); if ($page->{'Type'}->val() eq 'Pages') { push @pages, proc_pages($pdf, $page); } else { $pdf->{' apipagecount'}++; $page->{' pnum'} = $pdf->{' apipagecount'}; if (defined $page->{'Resources'}) { eval { $page->{'Resources'}->realise(); }; } push @pages, $page; } } return @pages; } =head1 PAGE METHODS =head2 page # Add a page to the end of the document $page = $pdf->page(); # Insert a page before the specified page number $page = $pdf->page($page_number); Returns a new page object. By default, the page is added to the end of the document. If you include an existing page number, the new page will be inserted in that position, pushing existing pages back. If C<$page_number> is -1, the new page is inserted as the second-last page; if C<$page_number> is 0, the new page is inserted as the last page. =cut sub page { my $self = shift(); my $index = shift() || 0; my $page; if ($index == 0) { $page = PDF::API2::Page->new($self->{'pdf'}, $self->{'pages'}); } else { $page = PDF::API2::Page->new($self->{'pdf'}, $self->{'pages'}, $index - 1); } $page->{' apipdf'} = $self->{'pdf'}; $page->{' api'} = $self; weaken $page->{' apipdf'}; weaken $page->{' api'}; $self->{'pdf'}->out_obj($page); $self->{'pdf'}->out_obj($self->{'pages'}); if ($index == 0) { push @{$self->{'pagestack'}}, $page; weaken $self->{'pagestack'}->[-1]; } elsif ($index < 0) { splice @{$self->{'pagestack'}}, $index, 0, $page; weaken $self->{'pagestack'}->[$index]; } else { splice @{$self->{'pagestack'}}, $index - 1, 0, $page; weaken $self->{'pagestack'}->[$index - 1]; } # $page->{'Resources'} = $self->{'pages'}->{'Resources'}; return $page; } =head2 open_page $page = $pdf->open_page($page_number); Returns the L object of page C<$page_number>, if it exists. If $page_number is 0 or -1, it will return the last page in the document. =cut # Deprecated (renamed) sub openpage { return open_page(@_); } ## no critic sub open_page { my $self = shift(); my $index = shift() || 0; my ($page, $rotate, $media, $trans); if ($index == 0) { $page = $self->{'pagestack'}->[-1]; } elsif ($index < 0) { $page = $self->{'pagestack'}->[$index]; } else { $page = $self->{'pagestack'}->[$index - 1]; } return unless ref($page); if (ref($page) ne 'PDF::API2::Page') { bless $page, 'PDF::API2::Page'; $page->{' apipdf'} = $self->{'pdf'}; $page->{' api'} = $self; weaken $page->{' apipdf'}; weaken $page->{' api'}; $self->{'pdf'}->out_obj($page); if (($rotate = $page->find_prop('Rotate')) and not $page->{' opened'}) { $rotate = ($rotate->val() + 360) % 360; if ($rotate != 0 and not $self->default('nounrotate')) { $page->{'Rotate'} = PDFNum(0); foreach my $mediatype (qw(MediaBox CropBox BleedBox TrimBox ArtBox)) { if ($media = $page->find_prop($mediatype)) { $media = [ map { $_->val() } $media->elements() ]; } else { $media = [0, 0, 612, 792]; next if $mediatype ne 'MediaBox'; } if ($rotate == 90) { $trans = "0 -1 1 0 0 $media->[2] cm" if $mediatype eq 'MediaBox'; $media = [$media->[1], $media->[0], $media->[3], $media->[2]]; } elsif ($rotate == 180) { $trans = "-1 0 0 -1 $media->[2] $media->[3] cm" if $mediatype eq 'MediaBox'; } elsif ($rotate == 270) { $trans = "0 1 -1 0 $media->[3] 0 cm" if $mediatype eq 'MediaBox'; $media = [$media->[1], $media->[0], $media->[3], $media->[2]]; } $page->{$mediatype} = PDFArray(map { PDFNum($_) } @$media); } } else { $trans = ''; } } else { $trans = ''; } if (defined $page->{'Contents'} and not $page->{' opened'}) { $page->fixcontents(); my $uncontent = delete $page->{'Contents'}; my $content = $page->gfx(); $content->add(" $trans "); if ($self->default('pageencaps')) { $content->{' stream'} .= ' q '; } foreach my $k ($uncontent->elements()) { $k->realise(); $content->{' stream'} .= ' ' . unfilter($k->{'Filter'}, $k->{' stream'}) . ' '; } if ($self->default('pageencaps')) { $content->{' stream'} .= ' Q '; } # if we like compress we will do it now to do quicker saves if ($self->{'forcecompress'}) { $content->{' stream'} = dofilter($content->{'Filter'}, $content->{' stream'}); $content->{' nofilt'} = 1; delete $content->{'-docompress'}; $content->{'Length'} = PDFNum(length($content->{' stream'})); } } $page->{' opened'} = 1; } $self->{'pdf'}->out_obj($page); $self->{'pdf'}->out_obj($self->{'pages'}); $page->{' apipdf'} = $self->{'pdf'}; $page->{' api'} = $self; weaken $page->{' apipdf'}; weaken $page->{' api'}; return $page; } =head2 import_page $page = $pdf->import_page($source_pdf, $source_page_num, $target_page_num); Imports a page from C<$source_pdf> and adds it to the specified position in C<$pdf>. If C<$source_page_num> or C<$target_page_num> is 0, -1, or unspecified, the last page in the document is used. B If you pass a page object instead of a page number for C<$target_page_num>, the contents of the page will be merged into the existing page. B my $pdf = PDF::API2->new(); my $source = PDF::API2->open('source.pdf'); # Add page 2 from the source PDF as page 1 of the new PDF my $page = $pdf->import_page($source, 2); $pdf->save('sample.pdf'); B You can only import a page from an existing PDF file. =cut # Deprecated (renamed) sub importpage { return import_page(@_); } ## no critic sub import_page { my ($self, $s_pdf, $s_idx, $t_idx) = @_; $s_idx ||= 0; $t_idx ||= 0; my ($s_page, $t_page); unless (ref($s_pdf) and $s_pdf->isa('PDF::API2')) { die "Invalid usage: first argument must be PDF::API2 instance, not: " . ref($s_pdf); } if (ref($s_idx) eq 'PDF::API2::Page') { $s_page = $s_idx; } else { $s_page = $s_pdf->open_page($s_idx); die "Unable to open page '$s_idx' in source PDF" unless defined $s_page; } if (ref($t_idx) eq 'PDF::API2::Page') { $t_page = $t_idx; } else { if ($self->pages() < $t_idx) { $t_page = $self->page(); } else { $t_page = $self->page($t_idx); } } $self->{'apiimportcache'} = $self->{'apiimportcache'} || {}; $self->{'apiimportcache'}->{$s_pdf} = $self->{'apiimportcache'}->{$s_pdf} || {}; # we now import into a form to keep # all that nasty resources from polluting # our very own resource naming space. my $xo = $self->importPageIntoForm($s_pdf, $s_page); # copy all page dimensions foreach my $k (qw(MediaBox ArtBox TrimBox BleedBox CropBox)) { my $prop = $s_page->find_prop($k); next unless defined $prop; my $box = walk_obj({}, $s_pdf->{'pdf'}, $self->{'pdf'}, $prop); my $method = lc $k; $t_page->$method(map { $_->val() } $box->elements()); } $t_page->gfx->formimage($xo, 0, 0, 1); # copy annotations and/or form elements as well if (exists $s_page->{'Annots'} and $s_page->{'Annots'} and $self->{'copyannots'}) { # first set up the AcroForm, if required my $AcroForm; if (my $a = $s_pdf->{'pdf'}->{'Root'}->realise->{'AcroForm'}) { $a->realise(); $AcroForm = walk_obj({}, $s_pdf->{'pdf'}, $self->{'pdf'}, $a, qw(NeedAppearances SigFlags CO DR DA Q)); } my @Fields = (); my @Annots = (); foreach my $a ($s_page->{'Annots'}->elements()) { $a->realise(); my $t_a = PDFDict(); $self->{'pdf'}->new_obj($t_a); # these objects are likely to be both annotations and Acroform fields # key names are copied from PDF Reference 1.4 (Tables) my @k = ( qw( Type Subtype Contents P Rect NM M F BS Border AP AS C CA T Popup A AA StructParent Rotate ), # Annotations - Common (8.10) qw( Subtype Contents Open Name ), # Text Annotations (8.15) qw( Subtype Contents Dest H PA ), # Link Annotations (8.16) qw( Subtype Contents DA Q ), # Free Text Annotations (8.17) qw( Subtype Contents L BS LE IC ) , # Line Annotations (8.18) qw( Subtype Contents BS IC ), # Square and Circle Annotations (8.20) qw( Subtype Contents QuadPoints ), # Markup Annotations (8.21) qw( Subtype Contents Name ), # Rubber Stamp Annotations (8.22) qw( Subtype Contents InkList BS ), # Ink Annotations (8.23) qw( Subtype Contents Parent Open ), # Popup Annotations (8.24) qw( Subtype FS Contents Name ), # File Attachment Annotations (8.25) qw( Subtype Sound Contents Name ), # Sound Annotations (8.26) qw( Subtype Movie Contents A ), # Movie Annotations (8.27) qw( Subtype Contents H MK ), # Widget Annotations (8.28) # Printers Mark Annotations (none) # Trap Network Annotations (none) ); push @k, ( qw( Subtype FT Parent Kids T TU TM Ff V DV AA ), # Fields - Common (8.49) qw( DR DA Q ), # Fields containing variable text (8.51) qw( Opt ), # Checkbox field (8.54) qw( Opt ), # Radio field (8.55) qw( MaxLen ), # Text field (8.57) qw( Opt TI I ), # Choice field (8.59) ) if $AcroForm; # sorting out dups my %ky = map { $_ => 1 } @k; # we do P separately, as it points to the page the Annotation is on delete $ky{'P'}; # copy everything else foreach my $k (keys %ky) { next unless defined $a->{$k}; $a->{$k}->realise(); $t_a->{$k} = walk_obj({}, $s_pdf->{'pdf'}, $self->{'pdf'}, $a->{$k}); } $t_a->{'P'} = $t_page; push @Annots, $t_a; push @Fields, $t_a if ($AcroForm and $t_a->{'Subtype'}->val() eq 'Widget'); } $t_page->{'Annots'} = PDFArray(@Annots); $AcroForm->{'Fields'} = PDFArray(@Fields) if $AcroForm; $self->{'pdf'}->{'Root'}->{'AcroForm'} = $AcroForm; } $t_page->{' imported'} = 1; $self->{'pdf'}->out_obj($t_page); $self->{'pdf'}->out_obj($self->{'pages'}); return $t_page; } =head2 embed_page $xobject = $pdf->embed_page($source_pdf, $source_page_number); Returns a Form XObject created by extracting the specified page from a C<$source_pdf>. 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. B my $pdf = PDF::API2->new(); my $source = PDF::API2->open('source.pdf'); my $page = $pdf->page(); # Import Page 2 from the source PDF my $object = $pdf->embed_page($source, 2); # Add it to the new PDF's first page at 1/2 scale my ($x, $y) = (0, 0); $page->object($object, $x, $y, 0.5); $pdf->save('sample.pdf'); B You can only import a page from an existing PDF file. =cut # Deprecated (renamed) sub importPageIntoForm { return embed_page(@_) } sub embed_page { my ($self, $s_pdf, $s_idx) = @_; $s_idx ||= 0; unless (ref($s_pdf) and $s_pdf->isa('PDF::API2')) { croak "Invalid usage: first argument must be PDF::API2 instance, not: " . ref($s_pdf); } my ($s_page, $xo); $xo = $self->xo_form(); if (ref($s_idx) eq 'PDF::API2::Page') { $s_page = $s_idx; } else { $s_page = $s_pdf->open_page($s_idx); croak "Unable to open page $s_idx in source PDF" unless defined $s_page; } $self->{'apiimportcache'} ||= {}; $self->{'apiimportcache'}->{$s_pdf} ||= {}; # This should never get past MediaBox, since it's a required object. foreach my $k (qw(MediaBox ArtBox TrimBox BleedBox CropBox)) { # next unless defined $s_page->{$k}; # my $box = walk_obj($self->{'apiimportcache'}->{$s_pdf}, $s_pdf->{'pdf'}, $self->{'pdf'}, $s_page->{$k}); next unless defined $s_page->find_prop($k); my $box = walk_obj($self->{'apiimportcache'}->{$s_pdf}, $s_pdf->{'pdf'}, $self->{'pdf'}, $s_page->find_prop($k)); $xo->bbox(map { $_->val() } $box->elements()); last; } $xo->bbox(0, 0, 612, 792) unless defined $xo->{'BBox'}; foreach my $k (qw(Resources)) { $s_page->{$k} = $s_page->find_prop($k); next unless defined $s_page->{$k}; $s_page->{$k}->realise() if ref($s_page->{$k}) =~ /Objind$/; foreach my $sk (qw(XObject ExtGState Font ProcSet Properties ColorSpace Pattern Shading)) { next unless defined $s_page->{$k}->{$sk}; $s_page->{$k}->{$sk}->realise() if ref($s_page->{$k}->{$sk}) =~ /Objind$/; foreach my $ssk (keys %{$s_page->{$k}->{$sk}}) { next if $ssk =~ /^ /; $xo->resource($sk, $ssk, walk_obj($self->{'apiimportcache'}->{$s_pdf}, $s_pdf->{'pdf'}, $self->{'pdf'}, $s_page->{$k}->{$sk}->{$ssk})); } } } # create a whole content stream ## technically it is possible to submit an unfinished ## (eg. newly created) source-page, but that's nonsense, ## so we expect a page fixed by open_page and die otherwise unless ($s_page->{' opened'}) { croak join(' ', "Pages may only be imported from a complete PDF.", "Save and reopen the source PDF object first"); } if (defined $s_page->{'Contents'}) { $s_page->fixcontents(); $xo->{' stream'} = ''; # open_page pages only contain one stream my ($k) = $s_page->{'Contents'}->elements(); $k->realise(); if ($k->{' nofilt'}) { # we have a finished stream here so we unfilter $xo->add('q', unfilter($k->{'Filter'}, $k->{' stream'}), 'Q'); } else { # stream is an unfinished/unfiltered content # so we just copy it and add the required "qQ" $xo->add('q', $k->{' stream'}, 'Q'); } $xo->compressFlate() if $self->{'forcecompress'}; } return $xo; } # Used by embed_page and import_page sub walk_obj { my ($object_cache, $source_pdf, $target_pdf, $source_object, @keys) = @_; if (ref($source_object) =~ /Objind$/) { $source_object->realise(); } return $object_cache->{scalar $source_object} if defined $object_cache->{scalar $source_object}; # die "infinite loop while copying objects" if $source_object->{' copied'}; my $target_object = $source_object->copy($source_pdf); ## thanks to: yaheath // Fri, 17 Sep 2004 # $source_object->{' copied'} = 1; $target_pdf->new_obj($target_object) if $source_object->is_obj($source_pdf); $object_cache->{scalar $source_object} = $target_object; if (ref($source_object) =~ /Array$/) { $target_object->{' val'} = []; foreach my $k ($source_object->elements()) { $k->realise() if ref($k) =~ /Objind$/; $target_object->add_elements(walk_obj($object_cache, $source_pdf, $target_pdf, $k)); } } elsif (ref($source_object) =~ /Dict$/) { @keys = keys(%$target_object) unless scalar @keys; foreach my $k (@keys) { next if $k =~ /^ /; next unless defined $source_object->{$k}; $target_object->{$k} = walk_obj($object_cache, $source_pdf, $target_pdf, $source_object->{$k}); } if ($source_object->{' stream'}) { if ($target_object->{'Filter'}) { $target_object->{' nofilt'} = 1; } else { delete $target_object->{' nofilt'}; $target_object->{'Filter'} = PDFArray(PDFName('FlateDecode')); } $target_object->{' stream'} = $source_object->{' stream'}; } } delete $target_object->{' streamloc'}; delete $target_object->{' streamsrc'}; return $target_object; } =head2 page_count $integer = $pdf->page_count(); Return the number of pages in the document. =cut # Deprecated (renamed) sub pages { return page_count(@_) } sub page_count { my $self = shift(); return scalar @{$self->{'pagestack'}}; } =head2 page_labels $pdf = $pdf->page_labels($page_number, %options); Describes how pages should be numbered beginning at the specified page number. # Generate a 30-page PDF my $pdf = PDF::API2->new(); $pdf->page() for 1..30; # Number pages i to v, 1 to 20, and A-1 to A-5, respectively $pdf->page_labels(1, style => 'roman'); $pdf->page_labels(6, style => 'decimal'); $pdf->page_labels(26, style => 'decimal', prefix => 'A-'); $pdf->save('sample.pdf'); The following options are available: =over =item * style One of C (standard decimal arabic numerals), C (uppercase roman numerals), C (lowercase roman numerals), C (uppercase letters), or C (lowercase letters). There is no default numbering style. If omitted, the page label will be just the prefix (if set) or an empty string. =item * prefix The label prefix for pages in this range. =item * start An integer (default: 1) representing the first value to be used in this page range. =back =cut # Deprecated; replace with page_labels, updating arguments as shown sub pageLabel { my $self = shift(); while (@_) { my $page_index = shift(); # Pass options as a hash rather than a hashref my %options = %{shift() // {}}; # Remove leading hyphens from option names if (exists $options{'-prefix'}) { $options{'prefix'} = delete $options{'-prefix'}; } if (exists $options{'-start'}) { $options{'start'} = delete $options{'-start'}; } if (exists $options{'-style'}) { $options{'style'} = delete $options{'-style'}; unless ($options{'style'} =~ /^(?:[Rr]oman|[Aa]lpha|decimal)$/) { carp "Invalid -style for page labels; defaulting to decimal"; $options{'style'} = 'decimal'; } } # page_labels doesn't have a default numbering style, to be consistent # with the spec. $options{'style'} //= 'D'; # Set one set of page labels at a time (support for multiple sets of # page labels by pageLabel was undocumented). Switch from 0-based to # 1-based numbering. $self->page_labels($page_index + 1, %options); } # Return nothing (page_labels returns $self, matching other setters) return; } sub page_labels { my ($self, $page_number, %options) = @_; # $page_number is 1-based in order to be consistent with other PDF::API2 # methods, but the page label numbering is 0-based. my $page_index = $page_number - 1; $self->{'catalog'}->{'PageLabels'} //= PDFDict(); $self->{'catalog'}->{'PageLabels'}->{'Nums'} //= PDFArray(); my $nums = $self->{'catalog'}->{'PageLabels'}->{'Nums'}; $nums->add_elements(PDFNum($page_index)); my $d = PDFDict(); if (exists $options{'style'}) { unless ($options{'style'} and $options{'style'} =~ /^([rad])/i) { croak 'Invalid page numbering style'; } $d->{'S'} = PDFName($1 eq 'd' ? 'D' : $1); } if (exists $options{'prefix'}) { $d->{'P'} = PDFStr($options{'prefix'} // ''); } if (exists $options{'start'}) { $d->{'St'} = PDFNum($options{'start'} // ''); } $nums->add_elements($d); return $self; } =head2 default_page_size # Set $pdf->default_page_size($size); # Get @rectangle = $pdf->default_page_size() Set the default physical size for pages in the PDF. If called without arguments, return the coordinates of the rectangle describing the default physical page size. See L for possible values. =cut sub default_page_size { my $self = shift(); # Set if (@_) { return $self->default_page_boundaries(media => @_); } # Get my %boundaries = $self->default_page_boundaries(); return @{$boundaries{'media'}}; } =head2 default_page_boundaries # Set $pdf->default_page_boundaries(%boundaries); # Get %boundaries = $pdf->default_page_boundaries(); Set default prepress page boundaries for pages in the PDF. If called without arguments, returns the coordinates of the rectangles describing each of the supported page boundaries. See the equivalent C method in L for details. =cut # Called by PDF::API2::Page::boundaries via the default_page_* methods below sub _bounding_box { my $self = shift(); my $type = shift(); # Get unless (scalar @_) { unless ($self->{'pages'}->{$type}) { return if $type eq 'MediaBox'; # Use defaults per PDF 1.7 section 14.11.2 Page Boundaries return $self->_bounding_box('MediaBox') if $type eq 'CropBox'; return $self->_bounding_box('CropBox'); } return map { $_->val() } $self->{'pages'}->{$type}->elements(); } # Set $self->{'pages'}->{$type} = PDFArray(map { PDFNum(float($_)) } @_); return $self; } sub default_page_boundaries { return PDF::API2::Page::boundaries(@_); } # Deprecated; use default_page_size or default_page_boundaries sub mediabox { my $self = shift(); return $self->_bounding_box('MediaBox') unless @_; return $self->_bounding_box('MediaBox', page_size(@_)); } # Deprecated; use default_page_boundaries sub cropbox { my $self = shift(); return $self->_bounding_box('CropBox') unless @_; return $self->_bounding_box('CropBox', page_size(@_)); } # Deprecated; use default_page_boundaries sub bleedbox { my $self = shift(); return $self->_bounding_box('BleedBox') unless @_; return $self->_bounding_box('BleedBox', page_size(@_)); } # Deprecated; use default_page_boundaries sub trimbox { my $self = shift(); return $self->_bounding_box('TrimBox') unless @_; return $self->_bounding_box('TrimBox', page_size(@_)); } # Deprecated; use default_page_boundaries sub artbox { my $self = shift(); return $self->_bounding_box('ArtBox') unless @_; return $self->_bounding_box('ArtBox', page_size(@_)); } =head1 FONT METHODS =head2 font my $font = $pdf->font($name, %options) Add a font to the PDF. Returns the font object, to be used by L. The font C<$name> is either the name of one of the L (e.g. Helvetica), a C object, or the path to a font file. my $pdf = PDF::API2->new(); my $font1 = $pdf->font('Helvetica-Bold'); my $font2 = $pdf->font('/path/to/ComicSans.ttf'); my $page = $pdf->page(); my $content = $page->text(); $content->position(1 * 72, 9 * 72); $content->font($font1, 24); $content->text('Hello, World!'); $content->position(0, -36); $content->font($font2, 12); $content->text('This is some sample text.'); $pdf->save('sample.pdf'); The path can be omitted if the font file is in the current directory or one of the directories returned by C. TrueType (ttf/otf), Adobe PostScript Type 1 (pfa/pfb), and Adobe Glyph Bitmap Distribution Format (bdf) fonts are supported. The following C<%options> are available: =over =item * format The font format is normally detected automatically based on the file's extension. If you're using a font with an atypical extension, you can set C to one of C (TrueType or OpenType), C (PostScript Type 1), or C (Adobe Bitmap). =item * kerning Kerning (automatic adjustment of space between pairs of characters) is enabled by default if the font includes this information. Set this option to false to disable. =item * afm_file (PostScript Type 1 fonts only) Specifies the location of the font metrics file. =item * pfm_file (PostScript Type 1 fonts only) Specifies the location of the printer font metrics file. This option overrides the -encode option. =item * embed (TrueType fonts only) Fonts are embedded in the PDF by default, which is required to ensure that they can be viewed properly on a device that doesn't have the font installed. Set this option to false to prevent the font from being embedded. =back =cut sub font { my ($self, $name, %options) = @_; if (exists $options{'kerning'}) { $options{'-dokern'} = delete $options{'kerning'}; } require PDF::API2::Resource::Font::CoreFont; if (PDF::API2::Resource::Font::CoreFont->is_standard($name)) { return $self->corefont($name, %options); } elsif ($name eq 'Times' and not $options{'format'}) { # Accept Times as an alias for Times-Roman to follow the pattern set by # Courier and Helvetica. carp "Times is not a standard font; substituting Times-Roman"; return $self->corefont('Times-Roman', %options); } my $format = $options{'format'}; $format //= 'truetype' if UNIVERSAL::isa($name, 'Font::TTF::Font'); $format //= ($name =~ /\.[ot]tf$/i ? 'truetype' : $name =~ /\.pf[ab]$/i ? 'type1' : $name =~ /\.bdf$/i ? 'bitmap' : ''); if ($format eq 'truetype') { $options{'embed'} //= 1; return $self->ttfont($name, %options); } elsif ($format eq 'type1') { if (exists $options{'afm_file'}) { $options{'-afmfile'} = delete $options{'afm_file'}; } if (exists $options{'pfm_file'}) { $options{'-pfmfile'} = delete $options{'pfm_file'}; } return $self->psfont($name, %options); } elsif ($format eq 'bitmap') { return $self->bdfont($name, %options); } elsif ($format) { croak "Unrecognized font format: $format"; } elsif ($name =~ /(\..*)$/) { croak "Unrecognized font file extension: $1"; } else { croak "Unrecognized font: $name"; } } =head2 synthetic_font $font = $pdf->synthetic_font($base_font, %options) Creates and returns a new synthetic font object. See L for details. =cut # Deprecated (renamed) sub synfont { return synthetic_font(@_) } sub synthetic_font { my ($self, $font, %opts) = @_; # PDF::API2 doesn't set BaseEncoding for TrueType fonts, so text # isn't searchable unless a ToUnicode CMap is included. Include # the ToUnicode CMap by default, but allow it to be disabled (for # performance and file size reasons) by setting -unicodemap to 0. $opts{-unicodemap} = 1 unless exists $opts{-unicodemap}; require PDF::API2::Resource::Font::SynFont; my $obj = PDF::API2::Resource::Font::SynFont->new($self->{'pdf'}, $font, %opts); $self->{'pdf'}->out_obj($self->{'pages'}); $obj->tounicodemap() if $opts{-unicodemap}; return $obj; } =head2 standard_fonts @names = $pdf->standard_fonts() Returns the names of the 14 standard (built-in) fonts. See L for details. =cut sub standard_fonts { require PDF::API2::Resource::Font::CoreFont; return PDF::API2::Resource::Font::CoreFont->names(); } =head2 is_standard_font $boolean = PDF::API2->is_standard_font($name); Returns true if C<$name> is an exact, case-sensitive match for one of the standard font names. =cut sub is_standard_font { my $name = pop(); require PDF::API2::Resource::Font::CoreFont; return PDF::API2::Resource::Font::CoreFont->is_standard($name); } =head2 font_path @directories = PDF::API2->font_path() Return the list of directories that will be searched (in order) in addition to the current directory when you add a font to a PDF without including the full path to the font file. =cut sub font_path { return @font_path; } =head2 add_to_font_path @directories = PDF::API2->add_to_font_path('/my/fonts', '/path/to/fonts'); Add one or more directories to the list of paths to be searched for font files. Returns the font search path. =cut # Deprecated (renamed) sub addFontDirs { return add_to_font_path(@_) } sub add_to_font_path { # Allow this method to be called using either :: or -> notation. shift() if ref($_[0]); shift() if $_[0] eq __PACKAGE__; push @font_path, @_; return @font_path; } =head2 set_font_path @directories = PDF::API2->set_font_path('/my/fonts', '/path/to/fonts'); Replace the existing font search path. This should only be necessary if you need to remove a directory from the path for some reason, or if you need to reorder the list. Returns the font search path. =cut sub set_font_path { # Allow this method to be called using either :: or -> notation. shift() if ref($_[0]); shift() if $_[0] eq __PACKAGE__; @font_path = ((map { "$_/PDF/API2/fonts" } @INC), @_); return @font_path; } sub _find_font { my $font = shift(); # Check the current directory return $font if -f $font; # Check the font search path foreach my $directory (@font_path) { return "$directory/$font" if -f "$directory/$font"; } return; } sub corefont { my ($self, $name, %opts) = @_; require PDF::API2::Resource::Font::CoreFont; my $obj = PDF::API2::Resource::Font::CoreFont->new($self->{'pdf'}, $name, %opts); $self->{'pdf'}->out_obj($self->{'pages'}); $obj->tounicodemap() if $opts{-unicodemap}; return $obj; } sub psfont { my ($self, $psf, %opts) = @_; foreach my $o (qw(-afmfile -pfmfile)) { next unless defined $opts{$o}; $opts{$o} = _find_font($opts{$o}); } $psf = _find_font($psf) or croak "Unable to find font \"$psf\""; require PDF::API2::Resource::Font::Postscript; my $obj = PDF::API2::Resource::Font::Postscript->new($self->{'pdf'}, $psf, %opts); $self->{'pdf'}->out_obj($self->{'pages'}); $obj->tounicodemap() if $opts{-unicodemap}; return $obj; } sub ttfont { my ($self, $name, %opts) = @_; # PDF::API2 doesn't set BaseEncoding for TrueType fonts, so text # isn't searchable unless a ToUnicode CMap is included. Include # the ToUnicode CMap by default, but allow it to be disabled (for # performance and file size reasons) by setting -unicodemap to 0. $opts{-unicodemap} = 1 unless exists $opts{-unicodemap}; # -noembed is deprecated (replace with embed => 0) if ($opts{'-noembed'}) { $opts{'embed'} //= 0; } $opts{'embed'} //= 1; my $file = UNIVERSAL::isa($name,'Font::TTF::Font') ? $name : _find_font($name) or croak "Unable to find font \"$name\""; require PDF::API2::Resource::CIDFont::TrueType; my $obj = PDF::API2::Resource::CIDFont::TrueType->new($self->{'pdf'}, $file, %opts); $self->{'pdf'}->out_obj($self->{'pages'}); $obj->tounicodemap() if $opts{-unicodemap}; return $obj; } sub bdfont { my ($self, @opts) = @_; require PDF::API2::Resource::Font::BdFont; my $obj = PDF::API2::Resource::Font::BdFont->new($self->{'pdf'}, @opts); $self->{'pdf'}->out_obj($self->{'pages'}); # $obj->tounicodemap(); # does not support Unicode return $obj; } # Deprecated. Use Unicode-supporting TrueType fonts instead. # See PDF::API2::Resource::CIDFont::CJKFont for details. sub cjkfont { my ($self, $name, %opts) = @_; require PDF::API2::Resource::CIDFont::CJKFont; my $obj = PDF::API2::Resource::CIDFont::CJKFont->new($self->{'pdf'}, $name, %opts); $self->{'pdf'}->out_obj($self->{'pages'}); $obj->tounicodemap() if $opts{-unicodemap}; return $obj; } # Deprecated. Use Unicode-supporting TrueType fonts instead. sub unifont { my ($self, @opts) = @_; require PDF::API2::Resource::UniFont; my $obj = PDF::API2::Resource::UniFont->new($self->{'pdf'}, @opts); return $obj; } =head1 GRAPHICS METHODS =head2 image $object = $pdf->image($file, %options); Import a supported image type and return an object that can be placed as part of a page's content: my $pdf = PDF::API2->new(); my $page = $pdf->page(); my $image = $pdf->image('/path/to/image.jpg'); $page->object($image, 100, 100); $pdf->save('sample.pdf'); C<$file> may be either a file name, a filehandle, or a L object. See L for details about placing images on a page once they're imported. The image format is normally detected automatically based on the file's extension. If passed a filehandle, image formats GIF, JPEG, and PNG will be detected based on the file's header. If the file has an atypical extension or the filehandle is for a different kind of image, you can set the C option to one of the supported types: C, C, C, C, or C. Note: PNG images that include an alpha (transparency) channel go through a relatively slow process of splitting the image into separate RGB and alpha components as is required by images in PDFs. If you're having performance issues, install PDF::API2::XS or Image::PNG::Libpng to speed this process up by an order of magnitude; either module will be used automatically if available. =cut sub image { my ($self, $file, %options) = @_; my $format = lc($options{'format'} // ''); if (ref($file) eq 'GD::Image') { return $self->image_gd($file, %options); } elsif (ref($file)) { $format ||= _detect_image_format($file); } unless (ref($file)) { $format ||= ($file =~ /\.jpe?g$/i ? 'jpeg' : $file =~ /\.png$/i ? 'png' : $file =~ /\.gif$/i ? 'gif' : $file =~ /\.tiff?$/i ? 'tiff' : $file =~ /\.p[bgp]m$/i ? 'pnm' : ''); } if ($format eq 'jpeg') { return $self->image_jpeg($file, %options); } elsif ($format eq 'png') { return $self->image_png($file, %options); } elsif ($format eq 'gif') { return $self->image_gif($file, %options); } elsif ($format eq 'tiff') { return $self->image_tiff($file, %options); } elsif ($format eq 'pnm') { return $self->image_pnm($file, %options); } elsif ($format) { croak "Unrecognized image format: $format"; } elsif (ref($file)) { croak "Unspecified image format"; } elsif ($file =~ /(\..*)$/) { croak "Unrecognized image extension: $1"; } else { croak "Unrecognized image: $file"; } } sub _detect_image_format { my $fh = shift(); $fh->seek(0, 0); binmode $fh, ':raw'; my $test; my $bytes_read = $fh->read($test, 8); $fh->seek(0, 0); return unless $bytes_read and $bytes_read == 8; return 'gif' if $test =~ /^GIF\d\d[a-z]/; return 'jpeg' if $test =~ /^\xFF\xD8\xFF/; return 'png' if $test =~ /^\x89PNG\x0D\x0A\x1A\x0A/; return; } sub image_jpeg { my ($self, $file, %opts) = @_; require PDF::API2::Resource::XObject::Image::JPEG; my $obj = PDF::API2::Resource::XObject::Image::JPEG->new($self->{'pdf'}, $file); $self->{'pdf'}->out_obj($self->{'pages'}); return $obj; } sub image_tiff { my ($self, $file, %opts) = @_; require PDF::API2::Resource::XObject::Image::TIFF; my $obj = PDF::API2::Resource::XObject::Image::TIFF->new($self->{'pdf'}, $file); $self->{'pdf'}->out_obj($self->{'pages'}); return $obj; } sub image_pnm { my ($self, $file, %opts) = @_; $opts{'-compress'} //= $self->{'forcecompress'}; require PDF::API2::Resource::XObject::Image::PNM; my $obj = PDF::API2::Resource::XObject::Image::PNM->new($self->{'pdf'}, $file, %opts); $self->{'pdf'}->out_obj($self->{'pages'}); return $obj; } sub image_png { my ($self, $file, %opts) = @_; require PDF::API2::Resource::XObject::Image::PNG; my $obj = PDF::API2::Resource::XObject::Image::PNG->new($self->{'pdf'}, $file); $self->{'pdf'}->out_obj($self->{'pages'}); return $obj; } sub image_gif { my ($self, $file, %opts) = @_; require PDF::API2::Resource::XObject::Image::GIF; my $obj = PDF::API2::Resource::XObject::Image::GIF->new($self->{'pdf'}, $file); $self->{'pdf'}->out_obj($self->{'pages'}); return $obj; } sub image_gd { my ($self, $gd, %opts) = @_; require PDF::API2::Resource::XObject::Image::GD; my $obj = PDF::API2::Resource::XObject::Image::GD->new($self->{'pdf'}, $gd, undef, %opts); $self->{'pdf'}->out_obj($self->{'pages'}); return $obj; } =head2 barcode $object = $pdf->barcode($format, $code, %options); Generate and return a barcode that can be placed as part of a page's content: my $pdf = PDF::API2->new(); my $page = $pdf->page(); my $barcode = $pdf->barcode('ean13', '0123456789012'); $page->object($barcode, 100, 100); my $qr_code = $pdf->barcode('qr', 'http://www.example.com'); $page->object($qr_code, 100, 300, 144 / $qr_code->width()) $pdf->save('sample.pdf'); C<$format> can be one of C, C, C (a.k.a. 3 of 9), C, C, C (a.k.a. interleaved 2 of 5), or C. C<$code> is the value to be encoded. Start and stop characters are only required when they're not static (e.g. for Codabar). The following options are available: =over =item * bar_width The width of the smallest bar or space in points (72 points = 1 inch). If you're following a specification that gives bar width in mils (thousandths of an inch), use this conversion: C<$points = $mils / 1000 * 72>. =item * bar_height The base height of the barcode in points. =item * bar_extend If present and applicable, bars for non-printing characters (e.g. start and stop characters) will be extended downward by this many points, and printing characters will be shown below their respective bars. This is enabled by default for EAN-13 barcodes. =item * caption If present, this value will be printed, centered, beneath the barcode, and should be a human-readable representation of the barcode. This option is ignored for QR codes. =item * font A font object (created by L) that will be used to print the caption, or the printable characters when C is set. Helvetica will be used by default. =item * font_size The size of the font used for printing the caption or printable characters. The default will be calculated based on the barcode size, if C is set, or 10 otherwise. =item * quiet_zone A margin, in points, that will be place before the left and bottom edges of the barcode (including the caption, if present). This is used to help barcode scanners tell where the barcode begins and ends. The default is the width of one encoded character, or four squares for QR codes. =item * bar_overflow Shrinks the horizontal width of bars by this amount in points to account for ink spread when printing. This option is ignored for QR codes. The default is 0.01 points. =item * color Draw bars using this color, which may be any value accepted by L. The default is black. =back QR codes have L for customizing the error correction level and other niche settings. =cut sub barcode { my ($self, $format, $value, %options) = @_; croak "Missing barcode format" unless defined $format; croak "Missing barcode value" unless defined $value; # Set defaults to approximately the minimums for each barcode format. if ($format eq 'codabar') { $options{'bar_width'} //= 1.8; # 0.025" $options{'bar_extend'} //= 0; $options{'quiet_zone'} //= 10 * $options{'bar_width'}; if ($options{'bar_extend'}) { $options{'font_size'} //= 9 * $options{'bar_width'}; } # Minimum height is the larger of 0.25" or 15% of barcode length. my $length = (10 * length($value) + 2) * $options{'bar_width'}; $options{'bar_height'} //= max(18, $length * 0.15); } elsif ($format eq 'code128' or $format eq 'ean128' or $format eq 'code39') { $options{'bar_width'} //= 1; $options{'bar_extend'} //= 0; $options{'quiet_zone'} //= 11 * $options{'bar_width'}; if ($options{'bar_extend'}) { $options{'font_size'} //= 10 * $options{'bar_width'}; } # Minimum height is the larger of 0.5" or 15% of barcode length. my $length = 11 * (length($value) + 1) * $options{'bar_width'}; $options{'bar_height'} //= max(36, $length * 0.15); } elsif ($format eq 'itf') { $options{'bar_width'} //= 1; $options{'bar_height'} //= 40; $options{'bar_extend'} //= 0; $options{'quiet_zone'} //= 10 * $options{'bar_width'}; if ($options{'bar_extend'}) { $options{'font_size'} //= 9 * $options{'bar_width'}; } } elsif ($format eq 'ean13') { $options{'bar_width'} //= 1; $options{'bar_height'} //= 64.8; $options{'quiet_zone'} //= 11 * $options{'bar_width'}; unless ($options{'caption'}) { $options{'bar_extend'} //= 5 * $options{'bar_width'}; } if ($options{'bar_extend'}) { $options{'font_size'} //= 10 * $options{'bar_width'}; } } elsif ($format eq 'qr') { $options{'bar_width'} //= 1; $options{'bar_height'} //= $options{'bar_width'}; $options{'quiet_zone'} //= 4 * $options{'bar_width'}; } else { croak "Unrecognized barcode format: $format"; } if (exists $options{'caption'}) { $options{'font_size'} //= 10; } if ($options{'bar_extend'} or $options{'font_size'}) { $options{'font'} //= $self->font('Helvetica'); } # Convert from new arguments to old arguments $options{'-color'} = delete $options{'color'}; $options{'-fnsz'} = delete $options{'font_size'}; $options{'-font'} = delete $options{'font'}; $options{'-lmzn'} = delete $options{'bar_extend'}; $options{'-mils'} = (delete $options{'bar_width'}) * 1000 / 72; $options{'-ofwt'} = delete $options{'bar_overflow'}; $options{'-quzn'} = delete $options{'quiet_zone'}; $options{'-zone'} = delete $options{'bar_height'}; if ($format eq 'codabar') { return $self->xo_codabar(%options, -code => $value); } elsif ($format eq 'code128') { return $self->xo_code128(%options, -code => $value); } elsif ($format eq 'code39') { return $self->xo_3of9(%options, -code => $value); } elsif ($format eq 'ean128') { return $self->xo_code128(%options, -code => $value, -ean => 1); } elsif ($format eq 'ean13') { return $self->xo_ean13(%options, -code => $value); } elsif ($format eq 'itf') { return $self->xo_2of5int(%options, -code => $value); } elsif ($format eq 'qr') { my $qr_class = 'PDF::API2::Resource::XObject::Form::BarCode::qrcode'; eval "require $qr_class"; my $obj = $qr_class->new($self->{'pdf'}, %options, code => $value); # $self->{'pdf'}->out_obj($self->{'pages'}); return $obj; } } sub xo_code128 { my ($self, @opts) = @_; require PDF::API2::Resource::XObject::Form::BarCode::code128; my $obj = PDF::API2::Resource::XObject::Form::BarCode::code128->new($self->{'pdf'}, @opts); $self->{'pdf'}->out_obj($self->{'pages'}); return $obj; } sub xo_codabar { my ($self, @opts) = @_; require PDF::API2::Resource::XObject::Form::BarCode::codabar; my $obj = PDF::API2::Resource::XObject::Form::BarCode::codabar->new($self->{'pdf'}, @opts); $self->{'pdf'}->out_obj($self->{'pages'}); return $obj; } sub xo_2of5int { my ($self, @opts) = @_; require PDF::API2::Resource::XObject::Form::BarCode::int2of5; my $obj = PDF::API2::Resource::XObject::Form::BarCode::int2of5->new($self->{'pdf'}, @opts); $self->{'pdf'}->out_obj($self->{'pages'}); return $obj; } sub xo_3of9 { my ($self, @opts) = @_; require PDF::API2::Resource::XObject::Form::BarCode::code3of9; my $obj = PDF::API2::Resource::XObject::Form::BarCode::code3of9->new($self->{'pdf'}, @opts); $self->{'pdf'}->out_obj($self->{'pages'}); return $obj; } sub xo_ean13 { my ($self, @opts) = @_; require PDF::API2::Resource::XObject::Form::BarCode::ean13; my $obj = PDF::API2::Resource::XObject::Form::BarCode::ean13->new($self->{'pdf'}, @opts); $self->{'pdf'}->out_obj($self->{'pages'}); return $obj; } =head2 colorspace $colorspace = $pdf->colorspace($type, @arguments); Colorspaces can be added to a PDF to either specifically control the output color on a particular device (spot colors, device colors) or to save space by limiting the available colors to a defined color palette (web-safe palette, ACT file). Once added to the PDF, they can be used in place of regular hex codes or named colors: my $pdf = PDF::API2->new(); my $page = $pdf->page(); my $content = $page->graphics(); # Add colorspaces for a spot color and the web-safe color palette my $spot = $pdf->colorspace('spot', 'PANTONE Red 032 C', '#EF3340'); my $web = $pdf->colorspace('web'); # Fill using the spot color with 100% coverage $content->fill_color($spot, 1.0); # Stroke using the first color of the web-safe palette $content->stroke_color($web, 0); # Add a rectangle to the page $content->rectangle(100, 100, 200, 200); $content->paint(); $pdf->save('sample.pdf'); The following types of colorspaces are supported =over =item * spot my $spot = $pdf->colorspace('spot', $tint, $alt_color); Spot colors are used to instruct a device (usually a printer) to use or emulate a particular ink color (C<$tint>) for parts of the document. An C<$alt_color> is provided for devices (e.g. PDF viewers) that don't know how to produce the named color. It can either be an approximation of the color in RGB, CMYK, or HSV formats, or a wildly different color (e.g. 100% magenta, C<%0F00>) to make it clear if the spot color isn't being used as expected. =item * web my $web = $pdf->colorspace('web'); The web-safe color palette is a historical collection of colors that was used when many display devices only supported 256 colors. =item * act my $act = $pdf->colorspace('act', $filename); An Adobe Color Table (ACT) file provides a custom palette of colors that can be referenced by PDF graphics and text drawing commands. =item * device my $devicen = $pdf->colorspace('device', @colorspaces); A device-specific colorspace allows for precise color output on a given device (typically a printing press), bypassing the normal color interpretation performed by raster image processors (RIPs). Device colorspaces are also needed if you want to blend spot colors: my $pdf = PDF::API2->new(); my $page = $pdf->page(); my $content = $page->graphics(); # Create a two-color device colorspace my $yellow = $pdf->colorspace('spot', 'Yellow', '%00F0'); my $spot = $pdf->colorspace('spot', 'PANTONE Red 032 C', '#EF3340'); my $device = $pdf->colorspace('device', $yellow, $spot); # Fill using a blend of 25% yellow and 75% spot color $content->fill_color($device, 0.25, 0.75); # Stroke using 100% spot color $content->stroke_color($device, 0, 1); # Add a rectangle to the page $content->rectangle(100, 100, 200, 200); $content->paint(); $pdf->save('sample.pdf'); =back =cut sub colorspace { my $self = shift(); my $type = shift(); if ($type eq 'act') { my $file = shift(); return $self->colorspace_act($file); } elsif ($type eq 'web') { return $self->colorspace_web(); } elsif ($type eq 'hue') { # This type is undocumented until either a reference can be found for # this being a standard palette like the web color palette, or POD is # added to the Hue colorspace class that describes how to use it. return $self->colorspace_hue(); } elsif ($type eq 'spot') { my $name = shift(); my $alt_color = shift(); return $self->colorspace_separation($name, $alt_color); } elsif ($type eq 'device') { my @colors = @_; return $self->colorspace_devicen(\@colors); } else { croak "Unrecognized or unsupported colorspace: $type"; } } sub colorspace_act { my ($self, $file) = @_; require PDF::API2::Resource::ColorSpace::Indexed::ACTFile; return PDF::API2::Resource::ColorSpace::Indexed::ACTFile->new($self->{'pdf'}, $file); } sub colorspace_web { my $self = shift(); require PDF::API2::Resource::ColorSpace::Indexed::WebColor; return PDF::API2::Resource::ColorSpace::Indexed::WebColor->new($self->{'pdf'}); } sub colorspace_hue { my $self = shift(); require PDF::API2::Resource::ColorSpace::Indexed::Hue; return PDF::API2::Resource::ColorSpace::Indexed::Hue->new($self->{'pdf'}); } sub colorspace_separation { my ($self, $name, @clr) = @_; require PDF::API2::Resource::ColorSpace::Separation; return PDF::API2::Resource::ColorSpace::Separation->new($self->{'pdf'}, pdfkey(), $name, @clr); } sub colorspace_devicen { my ($self, $clrs) = @_; require PDF::API2::Resource::ColorSpace::DeviceN; return PDF::API2::Resource::ColorSpace::DeviceN->new($self->{'pdf'}, pdfkey(), $clrs); } =head2 egstate $resource = $pdf->egstate(); Creates and returns a new extended graphics state object, described in L. =cut sub egstate { my $self = shift(); my $obj = PDF::API2::Resource::ExtGState->new($self->{'pdf'}, pdfkey()); $self->{'pdf'}->out_obj($self->{'pages'}); return $obj; } sub default { my ($self, $parameter, $value) = @_; # Parameter names may consist of lowercase letters, numbers, and underscores $parameter = lc $parameter; $parameter =~ s/[^a-z\d_]//g; my $previous_value = $self->{$parameter}; if (defined $value) { $self->{$parameter} = $value; } return $previous_value; } sub xo_form { my $self = shift(); my $obj = PDF::API2::Resource::XObject::Form::Hybrid->new($self->{'pdf'}); $self->{'pdf'}->out_obj($self->{'pages'}); return $obj; } sub pattern { my ($self, %opts) = @_; my $obj = PDF::API2::Resource::Pattern->new($self->{'pdf'}, undef, %opts); $self->{'pdf'}->out_obj($self->{'pages'}); return $obj; } sub shading { my ($self, %opts) = @_; my $obj = PDF::API2::Resource::Shading->new($self->{'pdf'}, undef, %opts); $self->{'pdf'}->out_obj($self->{'pages'}); return $obj; } sub named_destination { my ($self, $cat, $name, $obj) = @_; my $root = $self->{'catalog'}; $root->{'Names'} ||= PDFDict(); $root->{'Names'}->{$cat} ||= PDFDict(); $root->{'Names'}->{$cat}->{'-vals'} ||= {}; $root->{'Names'}->{$cat}->{'Limits'} ||= PDFArray(); $root->{'Names'}->{$cat}->{'Names'} ||= PDFArray(); unless (defined $obj) { $obj = PDF::API2::NamedDestination->new($self->{'pdf'}); } $root->{'Names'}->{$cat}->{'-vals'}->{$name} = $obj; my @names = sort {$a cmp $b} keys %{$root->{'Names'}->{$cat}->{'-vals'}}; $root->{'Names'}->{$cat}->{'Limits'}->{' val'}->[0] = PDFStr($names[0]); $root->{'Names'}->{$cat}->{'Limits'}->{' val'}->[1] = PDFStr($names[-1]); @{$root->{'Names'}->{$cat}->{'Names'}->{' val'}} = (); foreach my $k (@names) { push @{$root->{'Names'}->{$cat}->{'Names'}->{' val'}}, ( PDFStr($k), $root->{'Names'}->{$cat}->{'-vals'}->{$k} ); } return $obj; } 1; __END__ =head1 BACKWARD COMPATIBILITY Code written using PDF::API2 should continue to work unchanged for the life of most long-term-stable (LTS) server distributions. Specifically, it should continue working for versions of Perl that were L within the past five years (the typical support window for LTS releases) plus six months (allowing plenty of time for package freezes prior to release). In PDF::API2, method names, options, and functionality change over time. Functionality that's documented (not just in source code comments) should continue working for the same time period of five years and six months, though deprecation warnings may be added. There may be exceptions if your code happens to rely on bugs that get fixed, including when a method in PDF::API2 is changed to more closely follow the PDF specification. Occasional breaking changes may be unavoidable or deemed small enough in scope to be worth the benefit of making the change instead of keeping the old behavior. These will be noted in the Changes file as items beginning with the phrase "Breaking Change". Undocumented features, unreleased code, features marked as experimental, and underlying data structures may change at any time. An exception is for features that were previously released and documented, which should continue to work for the above time period after the documentation is removed. Before migrating to a new LTS server version, it's recommended that you upgrade to the latest version of PDF::API2, C, and check your server logs for deprecation messages after exercising your code. Once these are resolved, it should be safe to use future PDF::API2 releases during that LTS support window. If your code uses a PDF::API2 method that isn't documented here, it has probably been deprecated. Search for it in the Migration section below to find its replacement. =head1 MIGRATION Use this section to bring your existing code up to date with current method names and options. If you're not getting a deprecation warning, this is optional, but still recommended. For example, in cases where a method was simply renamed, the old name will be set up as an alias for the new one, which can be maintained indefinitely. The main benefit of switching to the new name is to make it easier to find the appropriate documentation when you need it. =over =item new(-compress => 0) =item new(-file => $filename) Remove the hyphen from the option names. =item new() with any options other than C or C Replace with calls to L. See the deprecated L method for particular option names. =item finishobjects =item saveas =item update Replace with L. =item end =item release Replace with L. =item open_scalar =item openScalar Replace with L. =item stringify Replace with L. =item info Each of the hash keys now has its own accessor. See L. For custom keys or if you prefer to give the key names as variables (e.g. as part of a loop), use L. =item infoMetaAttributes Use L without arguments to get a list of currently-set keys in the Info dictionary (including any custom keys). This is slightly different behavior from calling C without arguments, which always returns the standard key names and any defined custom key names, whether or not they're present in the PDF. Calling C with arguments defines the list of Info keys that are supported by the deprecated C method. You can now just call L with a standard or custom key and value. =item xmpMetadata Replace with L. Note that, when called with an argument, C returns the PDF object rather than the value, to line up with most other PDF::API2 accessors. =item isEncrypted Replace with L. =item outlines Replace with L. =item preferences This functionality has been split into a few methods, aligning more closely with the underlying PDF structure. See the documentation for each of the methods for revised option names. =over =item * -fullscreen, -thumbs, -outlines Call L. =item * -singlepage, -onecolumn, -twocolumnleft, -twocolumnright Call L. =item * -hidetoolbar, -hidemenubar, -hidewindowui, -fitwindow, -centerwindow, -displaytitle, -righttoleft, -afterfullscreenthumbs, -afterfullscreenoutlines, -printscalingnone, -simplex, -duplexfliplongedge, -duplexflipshortedge Call L. =item * -firstpage Call L. =back =item openpage Replace with L. =item importpage Replace with L. =item importPageIntoForm Replace with L. =item pages Replace with L. =item pageLabel Replace with L. Remove hyphens from the argument names. Add C