See also Changes-ver_2 for changes released for PDF::API2, and incorporated
into PDF::Builder.
See also Changes_2017 for earlier version 3 release logs.
3.013 2018-12-27
examples/022_truefonts-022_truefonts_diacrits_utf8-023_cjkfonts-
024_bdffonts-026_unifont2
Minor cleanup to end "dot" line.
3_examples.pl, 4_contrib.pl
Minor cleanup to contrib tests, examples -step and -cont command line
flag to stop after each test to allow tester to read expected results
description (new) and look at PDF file(s) before going on to next test,
or run them all in one fell swoop.
Note that the failure in 025_unifonts is probably reading the data line
right after __END__ (there is no __DATA__).
MANIFEST, 1_pc.pl, 2_t-tests.pl, 3_examples.pl, 4_contrib.pl,
INFO/old/pc.bat, INFO/old/t-tests.bat, INFO/old/examples.bat,
INFO/old/contrib.bat
Convert the various test suites from Windows .bat files to Perl .pl
files, so that they may be used on any system. Some configuration may
need to be adjusted for Linux or Unix systems (such as directory
separators and available font file names). The old .bat files have been
moved to INFO/old, in case you'd rather use them (they would need to
first either be moved back to the root, or their internal paths updated,
and checked to see if they need updating). The Perl replacements are
numbered in the suggested order for running them (only 3 and 4 are
critical to use in that order).
examples/BarCode.pl
Clean up by consolidating Helvetica font declaration into one place,
rather than once per barcode Xobject (much smaller output PDF file).
Note that barcodes still appear to have some problems with bars merging
with each other.
examples/Content.pl
Add a sample showing the use of multiple text and graphics objects to
have some text under a graphic, and other over it, and change one image
to show it rotated and clipped.
Makefile.PL
Try a different format for bugtracker entry, to point to GitHub issues
rather than the default RT ticket system.
t/00-all-usable.t
Check for optional libraries and do auto-OK only if missing. If an
optional library is present, do the normal "use" test.
README, MANIFEST
Moved README back to the root to shut up Kwalitee's complaint about no
README file.
lib/PDF/Builder.pm, lib/PDF/Builder/Annotation.pm-NamedDestination.pm-
Outline.pm, lib/PDF/Builder/Basic/PDF/Utils.pm,
lib/PDF/Builder/Resource/BaseFont.pm-CIDFont.pm,
lib/PDF/Builder/Resource/CIDFont/CJKFont.pm,
lib/PDF/Builder/Resource/Font/BdFont.pm, t/annotate.t
[ref RT 33497, RT 117031]
Consolidate PDFStr() and PDFUtf() calls (and associated is_utf() etc.
checks) into new function PDFString(), which is given the string and
usage code, and returns either PDFStr() or PDFUtf(), based on the
usage and whether UTF-8 is permitted for that usage, and what the
original string encoding was. This fixes RT 33497, and appears to fix
RT 117031 too, as I have not seen any documentation that forbids UTF-8
characters in metadata (PDFString usage 'm'). If such turns up, I will
update PDF::Builder::Basic::PDF::Utils to move metadata usage from UTF-8
permitted to disallowed.
Various Annotation titles and labels now permit UTF-8 text. Named
Destinations currently permit UTF-8, as I have not seen any restrictions
against this. Outline titles permit UTF-8. The annotate t-test was
updated because PDFUtf() format <hex quartets> is no longer forced for
annotations.
lib/PDF/Builder/Resource/XObject/Image/GIF.pm [ref RT 44877]
Fixed library to process GIFs with 3 more types of extension blocks,
and updated the POD. The new extension blocks are read, but ignored,
so they no longer produce an error.
lib/PDF/Builder/Annotation.pm [ref RT 117942]
Do some more cleanup of annotations. Unable to get same icon behavior
between text and file_attachment, even though the same code is produced.
lib/PDF/Builder/Resource/Font/CoreFont/verdana*.pm change "gimel" width from
0 to 620 (but still doesn't show up, gets "invalid character" box marker)
lib/PDF/Builder/Resource/Font/CoreFont/times*.pm change "macron" width from
333 to 520 (width was too narrow)
lib/PDF/Builder/Resource/Font/CoreFont/helvetica*.pm change "macron" width
from 333 to 580 (width was too narrow)
lib/PDF/Builder/Resource/Glyphs.pm, uniglyph.txt change character 'dblgrave'
(U+F6D6) to 'dblgravecmb' (U+030F) and add width to all CoreFont/*.pm.
020_corefonts, etc. now shows a double grave accent at x0E (where
available in a typeface).
lib/PDF/Builder/Resource/Glyphs.pm, uniglyph.txt change dotlessj from U+F6BE
to U+0237; still not displaying at x1F with my font collection.
lib/PDF/Builder/Resource/Font/CoreFont.pm, lib/PDF/examples/020_corefonts,
lib/PDF/Builder/Resource/Font/CoreFont/bankgothic.pm
enable full bankgothic (not just regular). Unfortunately, this appears to
be the older Bank Gothic (not "Pro"), which has only medium weight (bold,
bolditalic are no different than regular and italic). Corrected widths on
'mu' (increased from missing/300 to 689) and 'germandbls' (reduced from
1327 to 847). bankgothic.pm is used by all four variants, so at this time
there appears to be no need to create bold, italic, and bolditalic
versions. (other fonts have different widths for some glyphs in different
variants)
lib/PDF/Builder/Resource/Font/CoreFont/bankgothic.pm remove 'euro', as the
only entry in the font is named 'Euro'. add 'macron' with width.
lib/PDF/examples/020_corefonts-ShowFont.pl,
lib/PDF/Builder/Resource/Font/BaseFont.pm core fonts with no assigned
width, show background of light red to flag them. Add method
'wxMissingByEnc()' to flag a missing core font width.
lib/PDF/Builder/Annotation.pm enable dash pattern in -border option.
lib/PDF/Builder/NamedDestination.pm remove -border and -rect options
from POD, as there seems to be no code to implement them. A link (with
-rect and -border) to a Named Destination should be taken care of in the
Annotation module.
3.012 2018-10-26
new PNG_IPL module got caught by t/00-all-usable.t on test systems that did
not have Image::PNG::Libpng installed. Exclude from test, and add
reminder in Makefile.PL to update 00-all-usable.t.
3.011 2018-10-25
move .travis.yml.HOLD and dist.ini.old from the root to INFO/old/, to
unclutter the root. It is unknown when and if they will ever be used.
lib/PDF/Builder/Annotation.pm [ref RT 125917] minor fix to properly
implement a default target page fit (-xyz), otherwise the link()
method would not go to the desired target page. Some minor POD updates
to indicate that some functionality depends on the PDF reader (e.g.,
mouseover text on a link).
lib/PDF/Builder/Resource/XObject/Image/PNG.pm-PNG_IPL.pm
minor POD updates
lib/PDF/Builder/Resource/XObject/Image/PNG-PNG_IPL-TIFF-TIFF_GT.pm,
Makefile.PL, MANIFEST, lib/PDF/Builder.pm, lib/PDF/Builder/Docs.pm,
t/png.t
[ref RT 124349] If libpng.a and its wrapper, Image::PNG::Libpng are
installed, use them to process PNG files for inclusion into a PDF
document. If this library is not installed, or the user directs that
it is not be used via the -nouseIPL option, the existing pure Perl
PNG library (PNG.pm) will be used. The new library (PNG_IPL.pm) is
considerably faster than the old one and offers support for 16 bits
per sample and interlaced images*. Documentation has been updated in
TIFF and TIFF_GT, and functions LA_GT() and LA_IPL() have been added
to Builder to check LibraryAvailability (package availability) for
Graphics::TIFF and Image::PNG::Libpng, so you can know in advance
whether it is safe to try to use certain image functionality.
* interlacing is removed during processing, so it is irrelevant to
PDF, and 16bps channels (force PDF 1.5) can be reduced to 8bps,
permitting PDF 1.4 output, by use of the -force8bps option.
Makefile.PL try directing support issues to GitHub rather than CPAN RT
lib/PDF/Builder.pm while working on 124349, I noticed that a partially
transparent RGBA PNG file (white background made transparent) with -notrans
option was showing as transparent. The problem was found to be that no
options given in the image_png() call, such as -notrans, were being passed
to the PNG image processing routine. This has been fixed.
docs/buildDoc.pl modified to first look for .pod files, and then .pm files
for producing documentation .html files. It still has some issues with
finding too much input, but is generally workable. The POD search path
needs further work, as references to other packages often don't work
(don't produce a working link, but a severe error message).
lib/PDF/Builder.pm internal routine proc_pages() renamed _proc_pages(),
walk_obj() renamed _walk_obj(), and add POD for save() method. There is a
release() method that is undocumented but it's not clear whether it's
internal. Improve documentation of mediabox and other *box methods.
lib/PDF/Builder/Annotation.pm-Matrix.pm-Outline.pm-Page.pm minor POD fixes.
There are a lot of low level calls (e.g., Array.pm) that perhaps should not
be considered as part of the User API (i.e., remove from POD).
lib/PDF/Builder/Outline.pm-NamedDestination.pm-Annotation.pm, INFO/DEPRECATED
deprecate pdfile() method and replace by pdf_file() (same as done earlier
for Annotation.pm). pdfile() will be removed on or after October, 2020.
lib/PDF/Builder/Resource/XObject/Image/TIFF_GT.pm-TIFF.pm, INFO/DEPRECATED
remove warning and support for Blackls1 (should be BlackIs1).
lib/PDF/Builder/Content.pm, examples/Content.pl
[ref RT 124218] add -strikethru text capability similar to -underline.
New example of strike-through in Content.pl examples.
lib/PDF/Builder.pm [ref #93] Bringing PDF::Builder into the 21st century
add -outver option (default: 1.4) to new() as output PDF version. It will
be increased by any PDF file read in with a higher PDF level (with message)
or by a call to version().
add -msgver option (default: 1) to output (value 1) a warning message when
the PDF output version is increased by verCheckInput() or verCheckOutput().
A value of 0 suppresses the warning messages.
add verCheckInput(version) to give warning if PDF just read in is of higher
PDF version than the current version, and to increase the current version
to that level. Implemented for reading of PDF files.
WARNING: just because the PDF output version has been increased does NOT
guarantee that any particular content will be handled correctly! There
are many known cases of PDF 1.5 and up files being read in, that have
content that PDF::Builder does not handle correctly, corrupting the
resulting PDF. Pay attention to run-time warning messages that the PDF
output level has been increased due to a PDF file being read in, and check
the resulting file carefully.
add verCheckOutput(version, description) to increase the output PDF version
if a PDF feature that requires a higher PDF version is requested. At this
time, there are no output features higher than 1.4.
in version(), give warning if LOWERING the output PDF version (not
suppressed by -msgver).
lib/PDF/Builder.pm, lib/PDF/Builder/Basic/PDF/File.pm-Name.pm
internally store PDF version as full number (e.g., 1.4) instead of just the
minor version (e.g., 4), as PDF 2.0 has been announced.
t/02-xrefstm.t, t/03-xrefstm-index.t
both t-tests read in a PDF-1.5 file, so add a call to new(-outver=>1.5) to
silence the warning message that the maximum version is being increased.
lib/PDF/Builder/Resource/Basefont.pm-CIDFont.pm-UniFont.pm
fix typo variable name $ident to $indent (indentation)
lib/PDF/Builder/Resource/UniFont.pm
[ref RT 126274/#96] (reporter: fcc_del) by adding missing indentation
value to recursive text() call (rather than reporter's more complex fix).
lib/PDF/Builder/Content.pm
[ref RT 98539] (need to verify flatness function) close. According to PDF
spec, there's no real way to tell by eye whether it's within tolerance, and
results are unpredictable if you try to force visible line segments with
a higher tolerance. Also update POD to clarify the range of permissible
tolerance values, and silently clamp the input value to be in that range.
3.010 2018-08-20
.gitignore, Changes, docs/buildDoc.pl, lib/PDF/Builder/Content.pm,
lib/PDF/Builder/Resource/XObject/Image/PNG.com
fix some minor glitches discovered in final testing
lib/PDF/Builder/Basic/PDF/Array.pm-Bool.pm-Dict.pm,
lib/PDF/Builder/Content.pm, lib/PDF/Builder/Resource/ColorSpace/DeviceN.pm,
lib/PDF/Builder/Resource/XObject/Image/PNG.pm
fix some minor POD errors
Changes_2017, Changes-ver_2, DEPRECATED, KNOWN_INCOMP, LICENSE, PATENTS,
README, SUPPORT
move to new INFO/ directory, as things were starting to get a little
crowded in the root directory. Changes and MANIFEST are used by the
system and can not be moved. MANIFEST updated to reflect new structure.
Changes, Changes_2017, MANIFEST
split up Change logs by year, to make them easier to handle.
docs/, docs/buildDoc.pl, MANIFEST
provide a tool and place to build the HTML pages from PODs in the
PDF::Builder module sources. The .html files are NOT shipped with either
the Perl build or on GitHub.
lib/PDF/Builder/Resource/XObject/Image/PNG.pm
[ref RT 124349] code cleanup while looking at issue of why PNG RGBA
processing is so incredibly slow. Suspect that the heavy use of the
Perl vec() call may have something to do with it. To be continued...
lib/PDF/Builder/Content.pm, examples/Content.pl, examples/Bspline.pl,
t/content.t, MANIFEST, examples.bat
[ref CTS 8] add "bspline" method to draw a smoothly continuous curve
(using blended cubic Bezier curves) through all the given points. In
addition, the first and/or last points may be specified as visible or
invisible straight line or curved segments in order to constrain the
spline's behavior at the endpoints.
lib/PDF/Builder/Content.pm, examples/Content.pl, t/content.t, DEPRECATED
[ref CTS 8] change "spline" method name to "qbspline", and deprecate
"spline". This is to reflect that this method is actually a piecewise
(non-continuous) series of quadratic Bezier curves, and not a true spline.
lib/PDF/Builder.pm, lib/PDF/Builder/Docs.pm, MANIFEST
Add POD commentary on input and output PDF version supported.
Move POD function details out of Builder.pm to a lower level "Docs"
routine, in order to reduce the POD clutter.
.perl-version, dist.ini.old, .travis.yml.HOLD, Makefile.PL,
lib/PDF/Builder.pm, lib/PDF/Builder/UniWrap.pm, MANIFEST
change minimum Perl release level from 5.8.6 to Perl 5.16.0, per PDF::API2.
The intent is to "support major Perl versions released in the past six
years, plus one 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.16 (first released 2012-05-20...
see https://www.cpan.org/src/ "First release in each branch of Perl" for
dates, NOT "Latest releases in each branch of Perl"!). The next version
bump (to 5.18) should be after 2019-05-18.
lib/PDF/Builder/Resource/CIDFont/TrueType/FontFile.pm
use confess (Carp.pm) rather than die, per PDF::API2.
examples/*, examples.bat
moved output PDFs for several examples from the current directory to the
examples directory, in the same style as the rest of the example outputs.
Note that contrib.bat still outputs in the current directory.
contrib/text2pdf.pl, examples/020_corefonts--021_psfonts--021_synfonts--
022_truefonts--022_truefonts_diacrits_utf8--023_cjkfonts--026_unifont2--
ShowFont.pl, examples/Windows/Win32.pm, lib/PDF/Builder.pm,
lib/PDF/Builder/Annotation.pm--Content.pm--Lite.pm--Page.pm,
lib/PDF/Builder/Basic/PDF/Page.pm--Pages.pm,
lib/PDF/Builder/Resource/CIDFont/TrueType/FontFile.pm,
lib/PDF/Builder/Resource/XObject/Image/TIFF_GT.pm, t/author-critic.t--
author-pod-syntax.t--font-synfont.t--font-ttf.t--font-type1.t--
rt120397.t--rt120450.t
minor code styling changes to make perlcritic (level 5) happy. Some changes
from PDF::API2 for level 4/5.
t/*, contrib/pdf-debug.pl--text2pdf.pl, examples/012_pages--021_psfonts--
030_colorspecs--BarCode.pl--Content.pl--ContentText.pl--ShowFont.pl,
lib/PDF/Builder/Annotation.pm--Content.pm--Lite.pm--Matrix.pm--Outline.pm--
Page.pm--Resource.pm--UniWrap.pm--Util.pm,
lib/PDF/Builder/Content/Text.pm,
lib/PDF/Builder/Basic/PDF/Array.pm--Dict.pm--File.pm--Filter.pm--
Literal.pm--Null.pm--Objind.pm--Pages.pm--String.pm,
lib/PDF/Builder/Basic/PDF/Filter/FlateDecode.pm--ASCII85Decode.pm,
lib/PDF/Builder/Resource/CIDFont.pm--ColorSpace.pm--ExtGState.pm--
Glyphs.pm,
lib/PDF/Builder/Resource/CIDFont/CJKFont.pm--TrueType.pm,
lib/PDF/Builder/Resource/CIDFont/TrueType/FontFile.pm,
lib/PDF/Builder/Resource/Font/CoreFont.pm,
lib/PDF/Builder/Resource/XObject/Form/BarCode.pm,
lib/PDF/Builder/Resource/XObject/Image/GIF.pm
minor code styling changes to make perlcritic (level 4) happy, including
adding explicit "return" on all routines where missing, and not using
variables $a and $b ("magic" according to perlcritic). Some changes
suggested by PDF::API2 for this. There are many other level 4 errors yet
to be gotten rid of: "Code before warnings" and "Warnings disabled at" due
to use of "no warnings", "Close filehandles as soon as possible" due to
too many lines between "open" and "close" calls, "Always unpack @_ first"
(perlcritic doesn't like much about using the @_ array), "Subroutine name
is a homonym for a builtin function" (e.g., our own "open" in contrast to
CORE::open), "Symbols are exported by default" (doesn't like @EXPORT_OK
usage). Most other perlcritic level 4 complaints were permanently fixed,
but a few, such as "grep" and "map" formats, have been suppressed with
"no critic" statements. Those might be revisited later.
pc.bat
add batch file to run perlcritic
lib/PDF/Builder/Page.pm
a few minor code styling changes, per PDF::API2. Most of the PDF::API2
changes were already in PDF::Builder, and some I declined because the
style was not consistent.
examples.bat, examples/024_bdffonts, examples/examples.output
some minor improvements to bitmapped (BDF) display output. Bitmap font
support is still _very_ buggy! Does anyone actually _use_ bitmapped fonts?
lib/PDF/Builder.pm
stringify() make sure return value has at least empty string for content.
Several cases of -unicodemap check for true, not 1. After PDF::API2
changes for perlcritic.
lib/PDF/Builder/Content.pm
outobjdeep() check -docompress is true, not 1. bogen() explicitly default
move, larger, reverse to "false" (0). isvirtual(), ' apiistext' check for
true, not 1. After PDF::API2 changes for perlcritic.
lib/PDF/Builder/Basic/PDF/File.pm
add support for cross-reference streams (PDF 1.5) using 64-bit field
widths, per PDF::API2 changes.
.travis.yml.HOLD, MANIFEST
name restore (from .tgravis.yml). May attempt at some point to make use of
Travis for testing. Currently my system seems to not be supportive of
Travis modules, and I don't have a Travis account. I vaguely recall the
CPAN system trying to use .travis.yml in my first release, and requiring
an immediate release update, so I'm not using the name .travis.yml for now.
(see Changes_2017 for earlier changes)
(see Changes-ver_2 for changes to PDF::API2 up through 2.031)