mirror of
https://github.com/qpdf/qpdf.git
synced 2024-12-22 02:49:00 +00:00
Disregard appearance state when irrelevant (fixes #949)
If /AP is a dictionary of streams rather than a dictionary of dictionaries, disregard /AS, which is supposed to point to a subkey of one of the dictionaries. This fix prevents qpdf's annotation flattening from discarding some annotations when /AS is erroneously set.
This commit is contained in:
parent
3cfd6546f3
commit
293a2e52b3
@ -5,6 +5,15 @@
|
||||
reserved object fits better in the QPDF API. The old call just
|
||||
delegates to the new one.
|
||||
|
||||
2023-05-13 Jay Berkenbilt <ejb@ql.org>
|
||||
|
||||
* When an annotation dictionary's appearance dictionary (`/AP`)
|
||||
has a key that is a stream, disregard `/AS` (which is supposed to
|
||||
point to a subkey). This enables qpdf to not ignore annotations
|
||||
that have incorrect values for `/AS` when the appearance stream is
|
||||
directly in the `/AP` dictionary instead of in a subkey. Fixes
|
||||
#949.
|
||||
|
||||
2023-04-02 Jay Berkenbilt <ejb@ql.org>
|
||||
* Allow QPDFJob's workflow to be split into a reading phase and a
|
||||
writing phase to allow the caller to operate on the QPDF object
|
||||
|
@ -54,7 +54,14 @@ QPDFAnnotationObjectHelper::getAppearanceStream(
|
||||
std::string desired_state = state.empty() ? getAppearanceState() : state;
|
||||
if (ap.isDictionary()) {
|
||||
QPDFObjectHandle ap_sub = ap.getKey(which);
|
||||
if (ap_sub.isStream() && desired_state.empty()) {
|
||||
if (ap_sub.isStream()) {
|
||||
// According to the spec, Appearance State is supposed to
|
||||
// refer to a subkey of the appearance stream when /AP is
|
||||
// a dictionary, but files have been seen in the wild
|
||||
// where Appearance State is `/N` and `/AP` is a stream.
|
||||
// Therefore, if `which` points to a stream, disregard
|
||||
// state and just use the stream. See qpdf issue #949 for
|
||||
// details.
|
||||
QTC::TC("qpdf", "QPDFAnnotationObjectHelper AP stream");
|
||||
return ap_sub;
|
||||
}
|
||||
|
@ -26,6 +26,14 @@ For a detailed list of changes, please see the file
|
||||
- Add ``QPDF::newReserved`` as a better alternative to
|
||||
``QPDFObjectHandle::newReserved``.
|
||||
|
||||
- Bug fixes
|
||||
|
||||
- Ignore an annotation's appearance state when the annotation only
|
||||
has one appearance. This prevents qpdf's annotation flattening
|
||||
logic from throwing away appearances of annotations whose
|
||||
annotation state is set incorrectly, as has been seen in some
|
||||
PDF files.
|
||||
|
||||
11.3.0: February 25, 2023
|
||||
- CLI Enhancements
|
||||
|
||||
|
@ -178,7 +178,7 @@ Page: 11 0 R
|
||||
Subtype: /Widget
|
||||
Rect: [123.4, 692.1, 260.9, 706.7]
|
||||
Appearance stream (/N): 14 0 R
|
||||
Appearance stream (/N, /3): null
|
||||
Appearance stream (/N, /3): 14 0 R
|
||||
Annotation: 16 0 R
|
||||
Field: 16 0 R
|
||||
Subtype: /Widget
|
||||
@ -249,5 +249,5 @@ Page: 35 0 R
|
||||
Subtype: /Widget
|
||||
Rect: [113.6, 378.5, 351.3, 396.3]
|
||||
Appearance stream (/N): 36 0 R
|
||||
Appearance stream (/N, /3): null
|
||||
Appearance stream (/N, /3): 36 0 R
|
||||
test 43 done
|
||||
|
@ -166,7 +166,7 @@ Page: 11 0 R
|
||||
Subtype: /Widget
|
||||
Rect: [123.4, 692.1, 260.9, 706.7]
|
||||
Appearance stream (/N): 14 0 R
|
||||
Appearance stream (/N, /3): null
|
||||
Appearance stream (/N, /3): 14 0 R
|
||||
Annotation: 16 0 R
|
||||
Field: 16 0 R
|
||||
Subtype: /Widget
|
||||
@ -237,5 +237,5 @@ Page: 35 0 R
|
||||
Subtype: /Widget
|
||||
Rect: [113.6, 378.5, 351.3, 396.3]
|
||||
Appearance stream (/N): 36 0 R
|
||||
Appearance stream (/N, /3): null
|
||||
Appearance stream (/N, /3): 36 0 R
|
||||
test 43 done
|
||||
|
@ -166,7 +166,7 @@ Page: 11 0 R
|
||||
Subtype: /Widget
|
||||
Rect: [123.4, 692.1, 260.9, 706.7]
|
||||
Appearance stream (/N): 14 0 R
|
||||
Appearance stream (/N, /3): null
|
||||
Appearance stream (/N, /3): 14 0 R
|
||||
Annotation: 16 0 R
|
||||
Field: 16 0 R
|
||||
Subtype: /Widget
|
||||
@ -237,5 +237,5 @@ Page: 35 0 R
|
||||
Subtype: /Widget
|
||||
Rect: [113.6, 378.5, 351.3, 396.3]
|
||||
Appearance stream (/N): 36 0 R
|
||||
Appearance stream (/N, /3): null
|
||||
Appearance stream (/N, /3): 36 0 R
|
||||
test 43 done
|
||||
|
@ -171,7 +171,7 @@ Page: 11 0 R
|
||||
Subtype: /Widget
|
||||
Rect: [123.4, 692.1, 260.9, 706.7]
|
||||
Appearance stream (/N): 14 0 R
|
||||
Appearance stream (/N, /3): null
|
||||
Appearance stream (/N, /3): 14 0 R
|
||||
Annotation: 16 0 R
|
||||
Field: 16 0 R
|
||||
Subtype: /Widget
|
||||
@ -242,5 +242,5 @@ Page: 35 0 R
|
||||
Subtype: /Widget
|
||||
Rect: [113.6, 378.5, 351.3, 396.3]
|
||||
Appearance stream (/N): 36 0 R
|
||||
Appearance stream (/N, /3): null
|
||||
Appearance stream (/N, /3): 36 0 R
|
||||
test 43 done
|
||||
|
@ -166,7 +166,7 @@ Page: 11 0 R
|
||||
Subtype: /Widget
|
||||
Rect: [123.4, 692.1, 260.9, 706.7]
|
||||
Appearance stream (/N): 14 0 R
|
||||
Appearance stream (/N, /3): null
|
||||
Appearance stream (/N, /3): 14 0 R
|
||||
Annotation: 16 0 R
|
||||
Field: 16 0 R
|
||||
Subtype: /Widget
|
||||
@ -237,5 +237,5 @@ Page: 35 0 R
|
||||
Subtype: /Widget
|
||||
Rect: [113.6, 378.5, 351.3, 396.3]
|
||||
Appearance stream (/N): 36 0 R
|
||||
Appearance stream (/N, /3): null
|
||||
Appearance stream (/N, /3): 36 0 R
|
||||
test 43 done
|
||||
|
Loading…
Reference in New Issue
Block a user