Commit 3dbbf9f240d952758c5af3e407e3cc8efb9eadbe

Authored by Jay Berkenbilt
1 parent 3b8ce4f1

TODO

Showing 1 changed file with 87 additions and 55 deletions
@@ -3,66 +3,48 @@ Current @@ -3,66 +3,48 @@ Current
3 ======= 3 =======
4 4
5 * open bugs 5 * open bugs
6 -  
7 - * form features  
8 - * flatten  
9 - * include in json at document and page level  
10 - * values  
11 - * names  
12 - * other stuff?  
13 - * preserve when merging and splitting; functionality should be  
14 - similar to outlines.  
15 - * set value?  
16 - * maybe basic appearance generation for values within pdf doc  
17 - encoding that don't use subsetted fonts  
18 -  
19 - * replace mode: --replace-object, --replace-stream-raw,  
20 - --replace-stream-filtered  
21 - * update first paragraph of QPDF JSON in the manual to mention this  
22 - * object numbers are not stable  
23 - * you don't have to specify length for streams  
24 - * you only have to specify filtering for streams if providing raw data 6 + * Important but non-trivial
  7 + #240 -- invalid indirect references
  8 + #209, #231 -- assert in linearization checks
  9 + * Security
  10 + #263 -- segv
  11 + * Performance
  12 + #243 -- very slow processing of something
  13 + * Easy
  14 + #266 -- get final PDF version from QPDFWriter
  15 + #259 -- page collation
  16 +
  17 + * Generate appearance streams. QPDFAcroFormDocumentHelper.hh:
  18 +
  19 + // If /NeedAppearances is true, generate appearance streams for
  20 + // all widget annotations. Note that qpdf's abilitiy to generate
  21 + // appearance streams is quite limited. We can only generate
  22 + // appearance streams for streams of type variable text, and even
  23 + // then, the appearance stream just uses the default parameters
  24 + // specified to substitute the form field's value into the
  25 + // provided appearance stream. This means that appearance streams
  26 + // will likely not look right for any form field values that
  27 + // contain characters outside the range of PDF Doc Encoding. Also,
  28 + // quadding is ignored.
  29 + QPDF_DLL
  30 + void generateAppearancesIfNeeded();
  31 +
  32 + See need-appearances.pdf, which is based on form-field-types.pdf
  33 + and can be modified as needed. Search for it in qpdf.test
  34 +
  35 + Close #72 when done.
  36 +
  37 + * form field inclusion in json at document and page level
  38 + * values
  39 + * names
  40 + * other stuff?
25 41
26 * special mode for compressing images with DCT 42 * special mode for compressing images with DCT
27 - * allow specifying a single image, all images, images based on  
28 - size, specific images 43 + * allow specifying a minimum width, height, or pixel area with
  44 + sensible defaults
29 * never replace an image if the replacement is not smaller than the 45 * never replace an image if the replacement is not smaller than the
30 original 46 original
31 47
32 - * bookmarks (outlines) 12.3.3  
33 - * support bookmarks when merging  
34 - * prune bookmarks that don't point to a surviving page when merging  
35 - or splitting  
36 - * make sure conflicting named destinations work possibly test by  
37 - including the same file by two paths in a merge  
38 -  
39 - When pruning outlines, keep all outlines in the hierarchy that are  
40 - above an outline for a page we care about. If one of the ancestor  
41 - outlines points to a non-existent page, clear its dest. If an  
42 - outline does not have any children that point to pages in the  
43 - document, just omit it.  
44 -  
45 - Possible strategy:  
46 - * resolve all named destinations to explicit destinations  
47 - * concatenate top-level outlines  
48 - * prune outlines whose dests don't point to a valid page  
49 - * recompute all /Count fields  
50 -  
51 - Test files  
52 - * page-labels-and-outlines.pdf: old file with both page labels and  
53 - outlines. All destinations are explicit destinations. Each page  
54 - has Potato and a number. All titles are feline names.  
55 - * outlines-with-actions.pdf: mixture of explicit destinations,  
56 - named destinations, goto actions with explicit destinations, and  
57 - goto actions with named destinations; uses /Dests key in names  
58 - dictionary. Each page has Salad and a number. All titles are  
59 - silly words. One destination is an indirect object.  
60 - * outlines-with-old-root-dests.pdf: like outlines-with-actions  
61 - except it uses the PDF-1.1 /Dests dictionary for named  
62 - destinations, and each page has Soup and a number. Also pages are  
63 - numbered with upper-case Roman numerals starting with 0. All  
64 - titles are silly words preceded by a bullet.  
65 -  
66 Soon 48 Soon
67 ==== 49 ====
68 50
@@ -138,6 +120,42 @@ Page splitting/merging @@ -138,6 +120,42 @@ Page splitting/merging
138 Subramanyam provided a test file; see ../misc/article-threads.pdf. 120 Subramanyam provided a test file; see ../misc/article-threads.pdf.
139 Email Q-Count: 431864 from 2009-11-03. 121 Email Q-Count: 431864 from 2009-11-03.
140 122
  123 + * bookmarks (outlines) 12.3.3
  124 + * support bookmarks when merging
  125 + * prune bookmarks that don't point to a surviving page when merging
  126 + or splitting
  127 + * make sure conflicting named destinations work possibly test by
  128 + including the same file by two paths in a merge
  129 +
  130 + When pruning outlines, keep all outlines in the hierarchy that are
  131 + above an outline for a page we care about. If one of the ancestor
  132 + outlines points to a non-existent page, clear its dest. If an
  133 + outline does not have any children that point to pages in the
  134 + document, just omit it.
  135 +
  136 + Possible strategy:
  137 + * resolve all named destinations to explicit destinations
  138 + * concatenate top-level outlines
  139 + * prune outlines whose dests don't point to a valid page
  140 + * recompute all /Count fields
  141 +
  142 + Test files
  143 + * page-labels-and-outlines.pdf: old file with both page labels and
  144 + outlines. All destinations are explicit destinations. Each page
  145 + has Potato and a number. All titles are feline names.
  146 + * outlines-with-actions.pdf: mixture of explicit destinations,
  147 + named destinations, goto actions with explicit destinations, and
  148 + goto actions with named destinations; uses /Dests key in names
  149 + dictionary. Each page has Salad and a number. All titles are
  150 + silly words. One destination is an indirect object.
  151 + * outlines-with-old-root-dests.pdf: like outlines-with-actions
  152 + except it uses the PDF-1.1 /Dests dictionary for named
  153 + destinations, and each page has Soup and a number. Also pages are
  154 + numbered with upper-case Roman numerals starting with 0. All
  155 + titles are silly words preceded by a bullet.
  156 +
  157 + * Form fields: should be similar to outlines.
  158 +
141 General 159 General
142 ======= 160 =======
143 161
@@ -146,8 +164,22 @@ directory or that are otherwise not publicly accessible. This includes @@ -146,8 +164,22 @@ directory or that are otherwise not publicly accessible. This includes
146 things sent to me by email that are specifically not public. Even so, 164 things sent to me by email that are specifically not public. Even so,
147 I find it useful to make reference to them in this list 165 I find it useful to make reference to them in this list
148 166
  167 + * Additional form features
  168 + * set value from CLI? Specify title, and provide way to
  169 + disambiguate, probably by giving objgen of field
  170 +
  171 + * replace mode: --replace-object, --replace-stream-raw,
  172 + --replace-stream-filtered
  173 + * update first paragraph of QPDF JSON in the manual to mention this
  174 + * object numbers are not preserved by write, so object ID lookup
  175 + has to be done separately for each invocation
  176 + * you don't have to specify length for streams
  177 + * you only have to specify filtering for streams if providing raw data
  178 +
149 * Pl_TIFFPredictor is pretty slow. 179 * Pl_TIFFPredictor is pretty slow.
150 180
  181 + * Maybe disambiguate resources when flattening annotations
  182 +
151 * Some test cases on bad fails fail because qpdf is unable to find 183 * Some test cases on bad fails fail because qpdf is unable to find
152 the root dictionary when it fails to read the trailer. Recovery 184 the root dictionary when it fails to read the trailer. Recovery
153 could find the root dictionary and even the info dictionary in 185 could find the root dictionary and even the info dictionary in