- Enable Zopfli compression:
still needs the user to manually set QPDF_ZOPFLI
- build: enable SHOW_FAILED_TEST_OUTPUT, WERROR
- rename package htmldoc to doc and move in the PDF documentation
- doc obsoletes htmldoc
- version update to 12.2.0
12.2.0: May 4, 2025
- Upcoming C++ Version Change
- This is expected to be the last minor release of qpdf to work
with C++-17. We will be switching to C++-20 for 12.3.0.
- Bug fixes
- In ``QPDF::getAllPages`` detect shared ``/Kids`` arrays to avoid stack
overflows in (specially constructed) damaged input files.
- Fix severe performance issues in ``QPDFFormFieldObjectHelper`` with some
(specially constructed) damaged input files.
- Add missing ``QPDFFormFieldObjectHelper::isChecked`` implementation.
- Fix bug in ``QPDFNameTreeObjectHelper`` / ``QPDFNumberTreeObjectHelper``.
Under certain conditions tree insertions resulted in a ``/Range`` entry
being written to the tree root node, which is not permitted. One of the
possible consequences is that some readers would not recognize
embedded / attached files.
- In ``QPDFFormFieldObjectHelper::getChoices`` return the display string
if an ``/Opt`` entry is a pair of export value and display string rather
than a single string representing both values. Previously no value was
returned if the entry was not a single string.
- Other enhancements
- More sanity checks have been added when files with damaged xref tables
are recovered in order to avoid long runtimes and large memory use.
Objects with with very large arrays or dictionaries (more than 5000
elements) and duplicate pages are ignored as they are almost certainly
invalid.
12.1.0: April 6, 2025
- Bug fixes
- In ``QPDF::isLinearized`` return false if the first object in the file is
not a linearization parameter dictionary or its ``/L`` entry is not an
integer object. Previously the method returned false if the first
dictionary object was not a linearization parameter dictionary.
- Fix parsing of object streams containing objects not separated by
white-space. Pre-2020 editions of the PDF specification incorrectly
stated that white-space was required between objects. qpdf relied on this
when parsing object streams.
- Fix two object stream error/warning messages that reported the wrong
object id.
- Accept an array for ``rotate`` in qpdf job JSON since it is a
repeatable option.
- When reading an encrypted PDF with cleartext metadata, only
expect top-level /Metadata to be clear-text. When writing an
encrypted PDF with cleartext metadata, only leave top-level
unencrypted. qpdf has always incorrectly handled all
``/Metadata`` streams as special with cleartext metadata.
- Library Enhancements
- Add function ``Pl_DCT::make_compress_config`` to return a
``Pl_DCT::CompressConfig`` unique pointer to a
``CompressConfig`` from a ``std::function`` for a more modern
configuration option.
- CLI Enhancements
- New :qpdf:ref:`--remove-structure` option to exclude the document
structure tree from the output PDF.
- New :qpdf:ref:`--jpeg-quality` option to set jpeg quality used
with :qpdf:ref:`--optimize-images`.
- Other enhancements
- There have been further enhancements to how files with damaged xref
tables are recovered.
- Other changes
- The ``QPDF::optimize`` method is believed to be not in use and has been
deprecated. If you are relying on it please open a ticket_.
- The parsing of object streams including the creation of error/warning
messages and object descriptions has been refactored with some
improvement both in runtime and memory usage.
- There has been some refactoring of QPDFWriter including how object
streams are written with some performance improvement.
12.0.0: March 9, 2025
- API breaking changes
- The header file ``qpdf/QPDFObject.hh`` now generates an error if
included. This is to prevent code that includes it from
accidentally working because an old version is installed
somewhere on the system. Instead of including that header,
include ``<qpdf/Constants.h>``, and replace ``QPDFObject::ot_``
with ``::ot_`` in your code.
- The deprecated ``QPDFObjectHandle::replaceOrRemoveKey`` method has been
removed since it was identical to ``QPDFObjectHandle::replaceKey``.
- The deprecated ``JSON::checkDictionaryKeySeen`` function has been removed.
If ``JSON::parse`` encounters duplicate keys the last value is silently
accepted instead of throwing a runtime error. This is consistent with the
JSON specification.
- The deprecated versionless overload of ``QPDFObjectHandle::getJSON`` has
been removed.
- The deprecated ``Buffer`` copy constructor and assignment operator have
been removed. ``Buffer`` copy operations are expensive as they always
involve copying the buffer content. Use ``buffer2 = buffer1.copy();`` or
``Buffer buffer2{buffer1.copy()};`` to make it explicit that copying is
intended.
- ``QIntC.hh`` contained the typo ``substract`` in function names,
which has been fixed to ``subtract``.
- The protected ``QPDFObjectHelper::oh`` data member has been replaced with
the new accessor method ``QPDFObjectHelper::oh()``.
- Except for abstract classes and the exceptions listed below, sub-classing of
qpdf classes is not supported. These classes were never designed to be used as a
base class and will be made final in version 13. If you have a use case for
extending one of these classes, please open a ticket_.
Exceptions:
- ``QPDFDocumentHelper``
- ``QPDFObjectHelper``
- Upcasting to ``QPDFObjectHelper`` and ``QPDFDocumentHelper`` is not supported. Their
destructors will be made protected in version 13.
- Catching of logic errors thrown as the result of using an uninitialized
``QPDFObjectHandle`` is not supported. In version 13 uninitialized object handles
will be treated as immutable `shared null`_ objects. Using them will no longer throw
any logic errors, but may where appropriate generate type warnings or exceptions.
- CLI breaking Changes
- To support the future introduction of sub-commands, the use of filenames without
extension and path element as the first argument is no longer supported, and the
result may change in the future. For example, ``qpdf check out.pdf`` currently
copies the file ``check`` to ``out.pdf`` but may in future check ``out.pdf``.
Use ``qpdf ./check out.pdf`` or ``qpdf -- check out.pdf`` instead.
- Bug fixes
- In object streams, ignore objects with invalid offset. Report objects with invalid
id or offset.
- Library Enhancements
- ``QPDFObjectHandle`` supports move construction/assignment.
This change is invisible to most developers but may break
your code if you rely on specific behavior around how many
references to a QPDFObjectHandle's underlying object exist. You
would have to write code specifically to do that, so if you're not
sure, then you shouldn't have to worry.
- Most ``QPDFObjectHandle`` accessor methods are now ``const`` qualified.
- ``QPDFObjectHandle`` and all object helper classes are now explicitly convertible
to ``QPDFObjGen``, and therefore can be passed as parameter where a ``QPDFObjGen``
is required. Redundant overloaded methods have been removed.
- All object helper classes are now explicitly convertible to ``QPDFObjectHandle``.
- Other Changes
- The internal implementation of objects has been extensively refactored, using
``std::variant`` to eliminate one level of indirection. This has saved one shared pointer
per object with some improvement both in runtime and memory usage. A new class
``BaseHandle`` has been added as common base class of both ``QPDFObjectHandle``
and ``QPDFObjectHelper`` to provide common functionality appropriate for all
object-handle-like classes such as the operator to convert to ``QPDFObjGen``.
``BaseHandle`` is an implementation detail and not directly usable by library users.
- There has been significant refactoring of how qpdf internally iterates over
arrays and dictionaries.
- The internal mechanism used to check object sizes for binary
compatibility between releases has been changed. As such, the
``CHECK_SIZES`` maintainer-only build option has been removed.
OBS-URL: https://build.opensuse.org/request/show/1318194
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/qpdf?expand=0&rev=82
Description
No description provided
Languages
Public Key
100%