Help language development. Donate to The Perl Foundation
0.5.18 2023-05-24T08:53:23+12:00 - Rework invalid test in t/cos-tie-entry.t, which was failing on Rakudo blead 0.5.17 2023-05-18T07:16:56+12:00 - Increase indirect object parse window by 1 byte. fixes: https://github.com/pdf-raku/PDF-Class-raku/issues/22 0.5.16 2023-02-21T05:46:04+13:00 - Add :$file option to new(). Implicitly opens a PDF 0.5.15 2023-01-25T06:41:44+13:00 - Handle and throw on IO.open failures 0.5.14 2023-01-19T14:59:45+13:00 - Suppress warning from PDF::COS::Coercer. See https://github.com/pdf-raku/PDF-Class-raku/issues/21 0.5.13 2022-12-11T09:21:41+13:00 - make pdf-rewriter.raku --render option only uncompress page content - refactor of PDF::COS::Tie multi-methods. Added !tie-container() private method for Hash/Dict coercement. 0.5.12 2022-07-27T05:13:06+12:00 - Ensure cross reference entries are sorted by object number #35 0.5.11 2022-07-04T15:46:11+12:00 - Fix locking for consistency in PDF::COS::Util ast_coerce() 0.5.10 2022-07-04T12:46:14+12:00 - Fix pdf-checker.raku for PDF 0.5.8+ - Add PDF::COS::Dict required-entries() and aliases method - Deprecate Hash slow-path in PDF::IO::Writer - Fix regression in Pod::To::PDF t/render-pdf-test-sheets.t 0.5.9 2022-06-09T08:20:15+12:00 - Fix writing of Any as 'null' 0.5.8 2022-06-07T16:19:57+12:00 - Use PDF::Grammar v0.2.9+ :lite mode for lighter AST's. - Numeric objects are no longer cast to roles PDF::COS::Int, PDF::COS::Bool, PDF::COS::Real unless they are indirect objects. - Utilize PDF::Native v0.0.2+ cross reference stream unpack-xref-stream() and pack-xref-stream() subroutines. - Add --compat option to pdf-rewriter.raku script. 0.5.7 2022-06-02T06:26:44+12:00 - Upgrade from 32 to 64 bit indexing in cross reference streams to support opening very large PDF 1.5+ (> 3.2Gb) files. - Added compatibility and automatic loading of PDF::Native. Soon to be released optional performance enhancement module. 0.5.6 2022-05-21T09:43:39+12:00 - More thread protection for array/hash construction 0.5.5 2022-05-19T12:58:40+12:00 - Fix possible memory leaks in PDF object construction 0.5.4 2022-05-12T13:37:30+12:00 - Fix a thread-safety issue in PDF::COS::Util ast-coerce() sub. 0.5.3 2022-05-12T07:59:14+12:00 - Fix a thread-safety issue in PDF::COS::Tie tie() method. 0.5.2 2022-05-11T12:58:16+12:00 - Partially back-out PDF::COS required() method to fix PDF::Class regressions from 0.5.0 release. 0.5.1 2022-05-07T09:32:57+12:00 - Further lock-protection of dynamically 'require'd classes for thread safety 0.5.0 2022-05-06T13:19:02+12:00 - Improved thread safety of reading and fetching objects. -- Protect PDF::COS loader() method -- Protect Reader ind-obj method to allow concurrent fetching -- Better scoping of %seen + general refactor in PDF::COS::{Dict|Array} -- Some locking and deprecations in PDF::COS::Loader -- Added test t/threads.t This round of changes targets concurrent PDF reading only! 0.4.25 2022-03-31T16:42:09+13:00 - Replace role() method with induce(). Only mixin punned roles. 0.4.24 2022-03-26T07:41:03+13:00 - Further fixes to latin-1 in ByteString coercements 0.4.23 2022-03-13T17:25:53+13:00 - Ensure strings are latin-1 in ByteString coercements - Simplify date string coercements - Add X::PDF::NoTrailer error 0.4.22 2022-03-13T17:07:05+13:00 - Initial CPAN -> zef release 0.4.22 2022-02-24T13:21:35+13:00 - Replace role-model() method with role() 0.4.21 2022-02-23T14:06:44+13:00 - Attempted fix of flapping error in PDF::COS::Tie role-model() method 0.4.20 2022-02-06T11:53:46+13:00 - Fix PDF::IO::Filter::RunLength for pending Rakudo 2022.02; niner++ 0.4.19 2022-01-12T06:47:11+13:00 - Refactor Array coercements for consistency with Dict and Stream - Fixed PDF::IO::Writer name serialization to encode '#' as #23 (not ##) - Fixed some test fails from git checkout on Windows #31 0.4.18 2022-01-01T07:42:10+13:00 - PDF::COS::Bool now does the PDF::COS role - Fixed PDFDoc encoding by regenerating from PDF::ISO_32000 resource: Table_D2-PDFDocEncoding_Character_Set.json - Fixed PDF::COS::TextString to handle non-byte strings (e.g. /ActualText in content streams). - Improvements to PDF::COS::TextString utf16-be encoding 0.4.17 2021-09-29T14:46:25+13:00 - Refix PDF::COS::DateTime.new 0.4.16 2021-09-28T09:21:51+13:00 - Fix to PDF::COS::DateTime.new 0.4.15 2021-07-29T12:43:43+12:00 - Add error check for zero cross reference offset - Change Bufs to Blobs in PDF::IO::Util :&pack and PDF::IO::Filter::Predictors - Fix overflow error in LZW decode filter #30 0.4.14 2021-07-02T13:14:48+12:00 - Refix PDF without file associations 0.4.13 2021-07-02T12:07:07+12:00 - Fix PDF::IO coercement of Blobs - Ensure a PDF works without file associations. E.g. when rebuilt from: $pdf .= open: $pdf.Blob; 0.4.12 2021-06-24T11:43:44+12:00 - Add COERCE method to PDF::IO::Blob, PDF::IO::Handle, PDF::IO:Str 0.4.11 2021-04-28T12:41:23+12:00 - Fix writing of enumerated names #29 0.4.10 2021-04-20T06:27:30+12:00 - Add --stream option to pdf-rewriter.raku and PDF::IO::Reader - Default to :!stream in save-as() method. 0.4.9 2021-04-19T06:37:06+12:00 - Add PDF::IO::Writer stream-cos() and stream-body() methods for chunked saving to a file-handle. Apply to PDF save-as() and update() methods. 0.4.8 2021-04-15T07:09:03+12:00 - Enum agnostic array access for latest Rakudo. See https://github.com/rakudo/rakudo/issues/4310 0.4.7 2021-04-14T06:19:49+12:00 - Tweak AST construction for latest Rakudo 0.4.6 2021-04-12T12:39:56+12:00 - Use Hash::int for PDF::IO::Reader %!ind-obj-idx (indirect object index). - Add $pdf.id rw accessor. In particular, this allows assignment of consistent IDs for the benefit of PDF tool-chain testing. 0.4.5 2021-01-12T06:00:31+13:00 - Rename classes PDF::Writer -> PDF::IO::Writer and PDF::Reader -> PDF::IO::Reader. Free up PDF::Reader and PDF::Writer for Raku ecosystem usage. Release 0.4.4 - Add COERCE methods to COS roles and classes. For example: my PDF::COS::TextString $s .= COERCE: 'Hi'; or using Rakudo 2020.11+ coercion semantics: my PDF::COS::TextString() $s = 'Hi'; Release 0.4.3 - [PDF::Reader] add abstract base exception class X::PDF apply to existing X::PDF::* exception classes - [pdf-rewriter.raku] -- added --render option to render and reformat pages. This option also requires an upstream module such as PDF::Lite or PDF::Class. -- Hide back trace for handled errors (type X::PDF) - [PDF::COS::TextString] Decode as UTF16-BE / PDFDoc when input is a byte-string #26 - [PDF::COS::Util] rename pack-pp() -> pack-be() [big endian] Release 0.4.2 - Streamlined cross-reference loading; adjust to PDF::Grammar 0.2.1 - Fix 'missing required field(s)' message on a tied COS attribute. - Fix accidental coercement of byte to name strings; also date coercements - Fix syntax level PDF/A non-conformance issues, as reported by verapdf: -- follow 'obj' by \n (not space) when serialising indirect objects -- have 4 binary characters (not 3) in header comment Release 0.4.1 - [PDF::Writer] Compacted writing of smaller dictionaries - [PDF] .save-as() method: don't copy when updating and source and destination are the same Release 0.4.0 - Rename modules *.pm -> *.rakumod and scripts *.p6 -> *.raku Release 0.3.8 - [PDF::Writer] - Fixed .write-content() method to sanitise any non-latin unicode chars in comment strings, which otherwise breaks serialization. Choosing to map them to #Xxx where Xxx is a hexadecimal number - [PDF] Add $.open(:type) option. Asserts that the PDF file is of a given type 'PDF', 'FDF' etc. - [pdf-rewriter.p6] --class option changed from a Boolean to a string. Any class can now be loaded that is based on PDF (PDF::Lite, PDF::Class, PDF::API6). - [PDF::COS::Tie][PDF::COS::Tie::Array][PDF::COS::Tie::Hash] Some internal renaming of attribute roles and methods. TiedHash -> COSDictAttrHOW, TiedArray -> COSArrayAttrHOW, $attr.tied -> $attr.cos Release 0.3.7 - [PDF::COS::Type::XRef] -- Fixed a bug in decode-index() method. - [PDF::Reader] -- Reworked !load-index method - [PDF::COS] -- Improved required() method. Release 0.3.6 - [PDF::Writer] -- Fix for issue#22 Incremental updates breaking Adobe Reader. Incremental updates to a 1.5+ PDF that has cross reference streams are now written with cross reference streams. Release 0.3.5 - [PDF] -- Add top-level .cb-finish() hook. Call just prior to serialization Release 0.3.4 - [PDF::Reader][PDF::Writer] -- Allow copying of raw object ASTs from input to output PDFs. To reduce memory usage in full-save mode. Speeds up saving of encrypted PDFs. -- Fixed /Prev trailer entry in incremental save -- Fixed pdf-rewriter.p6 --decrypt option - [PDF::Reader] -- Respect EncryptMetadata flag in existing PDF files. Disallow for newly created PDF files. -- Fixed handling of encryption dictionaries when they're not an indirect object -- Improved loading of cross reference index - [PDF] -- Allow reencryption of an already encrypted PDF. -- Disallow update of a newly encrypted or re-encrypted PDF - [pdf-rewriter.p6] -- added owner-check and -drm option. Release 0.3.3 - [PDF::COS::Tie] -- added :default trait - [PDF::COS::Coercer] -- fixed coercement to a PDF::COS::TextString subset - [PDF::Reader] -- Add revision-xrefs() method [to distinguish revision sections from hybrid cross referefence sections] -- Tweaked filtering of object and cross reference streams during serialization Release 0.3.2 - Handle null entries in stream DecodeParms entry (as per spec) - Rename PDF::IO.substr() method to byte-str() - `save-as()` method now copies an input PDF, then updates it incrementally. - Add constant PDF::COS::DateString::DateRegex - Add PDF::COS::Tie entry :key trait option - Fix AES-128 encryption for xpdf Release 0.3.1 - Add Tie :array-or-item trait. For the common case, where a single item or array of items is permitted.` - add tmp/ directory for test JSON files, etc - Adjust for 'pdf' -> 'ast' in PDF::Grammar 0.1.6. - Changed the top level node from 'pdf' to 'cos' in JSON serializations - Handle utf-16 encoding in PDF::COS::DateString Release 0.3.0 - Renamed PDF::DAO classes to PDF::COS, where COS stands for Carousel Object System (see https://en.wikipedia.org/wiki/Portable_Document_Format#File_structure) - Improvements to PDF::COS.coerce($obj, $type) multi methods. - Fixed class-level PDF::COS::Stream.gist - Support Hybrid PDFs that contain both cross reference tables and streams Release 0.2.8 - [PDF::DAO] -- better support for lists and list to array coercion - [PDF::DAO::Loader] -- replaced :$fallback option with :$base-class - [PDF::DAO::Tie] -- add mixin method Release 0.2.7 - [PDF::DAO::Tie] -- reintroduce method :entry(:alias<foo>) sub-trait. -- remove type-check method Release 0.2.6 - [PDF::DAO::Util] setup libpdf at BEGIN time - Rename or hide overused load() method in various classes/roles -- [PDF::DAO] [PDF::DAO::Loader] deprecate load() -> load-delegate() -- [PDF::Reader] rename load() -> load-pdf() -- [PDF::IO::Crypt] made load() method private - Fix PNG predictors for BitsPerComponent < 8 (issue #18) Release 0.2.5 - [PDF::Reader][PDF::Writer] -- adjust to PDF::Grammar v0.1.1 shaped cross reference streams. -- upgrade index offsets from uint32 to uint64 (for PDF files > 4.2Gb) -- don't escape binary characters when writing literal strings - [PDF::DAO::Util] -- add coercements for typed arrays Release 0.2.4 - [PDF] renamed .save-as :update option to :preserve - Created classes PDF::DAO::Loader and PDF::DAO::Coercer. These replace the PDF::DAO::Delegator class. - [PDF::DAO::Type::Xref] streamlined index decoding and encoding - [PDF::Writer] tweak write-real method to match Lib::PDF::Writer.write-real Release 0.2.3 - [PDF::DAO::Tie] -- Simplify method accessors. direct use of AT-KEY, ASSIGN-KEY, etc. 20% speed up of test suite run. - [PDF::DAO::Util] -- convert enums to ints in to-ast() -- rename sub to-ast-native() -> ast-coerce() - [PDF::Writer] -- use native functions from Lib::PDF::Writer, when available. Release 0.2.2 - [PDF::Writer] handle ' (MoveShow) and " (MoveSetShow) operators - [PDF::IO::Handle] Open I/O as :bin - Experimental use of Lib::PDF -- Speed up the slowest test xt/filter-predictors_bulk.t -- Fast packing alternative for PDF::IO::Util Optional, and for regression purposes, at this stage. Probably wont persue seriously until Rakudo has better JIT. Release 0.2.1 - Renamed classes PDF::IO to PDF::IO::Util and PDF::IO::Input::* to PDF::IO::*. - Don't cache misses in PDF::DAO::Delegator - PDF::IO::Filter::Predictors now handles /BitsPerComponent < 8 - Replace PDF::IO::Util resample() with pack(), unpack() Release 0.2.0 - Renamed class PDF::DAO::Type::PDF to PDF. Restored module name to PDF Release 0.1.1 - [PDF::Reader] now handles very large xref tables or streams (> 65K) - [PDF::DAO] use 'but' to apply roles to simple scalars, not 'does'. Release 0.1.0 Renamed class namespace PDF::Storage -> PDF::IO. Used as the module name Release 0.0.9 - class PDF::DAO::Stream is now based on PDF::DAO::Dict - withdrew non-standard PDF::DAO::Dict.new( $dict) positionals, in favour of PDF::DAO::Dict.new( :$dict ) named arguments. Same also for stream and array object constructors. - Use of sigil-less variables, where appropriate. - Revamped handing of PDF::DAO::Tie :entry and :index traits. - Fixes for PDF::Storage::Input::Str (byte-string reader) and PDF::Storage::Filter::Predictors Release 0.0.8 - [PDF::DAO::Doc] .update( :diffs(...) ) - now supports JSON - Renamed classes -- PDF::DAO::Doc -> PDF::DAO::Type::PDF -- PDF::DAO::Storage::Crypt::Doc -> PDF::DAO::Storage::Crypt::PDF - [PDF::DAO::Type::XRef] renamed methods -- decode-to-stage2 -> decode-index -- encode-from-stage2 -> encode-index - [PDF::Writer] -- refactored 'write' multi method into node-specific methods (write-array, write-bool, ... etc) -- handle comments in write-op method - [PDF::Writer] [PDF::Storage::Filter::RunLength] fixed handling of DOS newline graphemes "\r\n" - [bin/pdf-rewriter.pl] fixed --rebuild option Release 0.0.7 - [PDF::Storage::Crypt] Encryption refactored to use OpenSSL. Added support for PDF 1.6+ AES-128 encryption. - [PDF::DAO::Doc] add saves-as( :update ) option. The input PDF is copied to the destination PDF, which is then incrementally updated. This should generally be faster than a regular .save-as. - [PDF::Reader] Bug fixes to JSON serialization - [PDF::Storage::Filter] simplified filter dispatch Release 0.0.6 - [bin/pdf-rewriter.pl] unbust rewriting/recompression of encrypted PDFs - [PDF::Storage::Serializer][PDF::DAO::{Array|Dict|Stream}] use Perl 6 object hashes -- Refactored `my %h; ...; %hash{$object.WHICH}` with `my %h{Any}; ...; %hash{$object}` (See http://doc.perl6.org/type/Hash#Object_hashes_and_type_constraints) - [PDF::DAO::Doc] -- added $doc.ast method. factored out from $doc.save-as -- Added $doc.Str method; for in-memory serialization -- $doc.save-as($target); # can now be file-name, io-path, or io-handle -- added $.update( :diffs(...) ) option. This allows the update body to be saved to a separate 'differences' file, as an alternative to appending to the original PDF. Useful in a mail-merge scenario where multiple documents are being produced from a common template and each can be reconstituted by appending the update file to the original template. Possible further work: -- JSON output of 'to' files -- add `$doc.open( $file, :diff(...))` option - load a base pdf, then apply differences. - [PDF::Reader] bug-fixes: -- avoid encrypting the encryption dictionary -- fixed de-Linearization. Now handled by PDF::Storage::Serializer - [PDF::Storage::Filter] bug fixes: -- fixed ascii-85, ascii-hex and run-length encoders to add end-of-data markers -- withdrew LZW encoding Release 0.0.5 - added some reader exception classes, e.g. X::PDF::BadXRef - renamed META.info => META6.json - changed $.delegator.find-delegate method - removed PDF::DAO::Type - [PDF::DAO::Delegator] -- simplified and more general coercement to roles -- added X::PDF::Coerce warning - [PDF::DAO::Tie] -- removed support for method aliases - [PDF::Storage::Filter::Predictors] -- fixed multi-channel (color) PNG prediction Release 0.0.4 - encrypted document creation is now supported. RC4 (Encryption revisions 1-4) only at this stage. - [PDF::Writer] -- add extra new-line after each indirect object - readability improvement Release 0.0.3 - [PDF::DAO::Util] from-ast() sub now handles cyclical hashes and arrays Release 0.0.2 - [META.info] Correct PDF::Storage::Filter::Predictors entry - [PDF::Writer] -- improved formatting of PDF output. Reduced number of new-lines in output. --- '>> stream' are now cuddled together on a line --- as are 'endstream endobj' -- added $.make-body and $.make-xref methods Release 0.0.1 - Initial release