-
This replaces a PDF from the wild that I didn't want to include in the test suite but used to verify the original fix.
-
3.0.rc1
-
Implement --pages ... -- option for qpdf. Update TODO with remaining things to document.
-
Move object parsing code from QPDF to QPDFObjectHandle and parameterize the parts of it that are specific to a QPDF object. Provide a version that can't handle indirect objects and that can be called on an arbitrary string. A side effect of this change is that the offset used when reporting invalid stream length has changed, but since the new value seems like a better value than the old one, the test suite has been updated rather than making the code backward compatible. This only effects the offset reported for invalid streams that lack /Length or have an invalid /Length key. Updated some test code and exmaples to use QPDFObjectHandle::parse. Supporting changes include adding a BufferInputSource constructor that takes a string.
-
Add --copy-encryption and --encryption-file-password options to qpdf. Also strengthen test suite for copying encryption. The strengthened test suite would have caught the failure to preserve AES and the failure to update the file version, which was invalidating the encrypted data.
-
Method to copy encryption parameters from another file. Adapted from existing code to copy encryption parameters from the original file.
-
This includes QPDF::copyForeignObject and supporting foreign objects as arguments to addPage*.
-
Breaking API change: length parameter has disappeared from the StreamDataProvider version of QPDFObjectHandle::replaceStreamData since it is no longer necessary to compute it in advance. This breaking change is justified by the fact that removing the length parameter provides the caller an opportunity to simplify the calling code.
-
Also updated pdf_from_scratch test driver to use the new factories, and made some cosmetic improvements and documentation updates for the emptyPDF() method.
-
Significantly improve the code's use of off_t for file offsets, size_t for memory sizes, and integer types in cases where there has to be compatibility with external interfaces. Rework sections of the code that would have prevented qpdf from working on files larger than 2 (or maybe 4) GB in size.
-
For ELF systems, turn on versioned symbols by default, and add a configure option to enable or disable them.
-
This works around cases where gs falsely complains about things in the PDF files or gives warnings that don't harm the output. See comments in qpdf.test for details.