Commit 3dbbf9f240d952758c5af3e407e3cc8efb9eadbe
1 parent
3b8ce4f1
TODO
Showing
1 changed file
with
87 additions
and
55 deletions
TODO
| ... | ... | @@ -3,66 +3,48 @@ Current |
| 3 | 3 | ======= |
| 4 | 4 | |
| 5 | 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 | 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 | 45 | * never replace an image if the replacement is not smaller than the |
| 30 | 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 | 48 | Soon |
| 67 | 49 | ==== |
| 68 | 50 | |
| ... | ... | @@ -138,6 +120,42 @@ Page splitting/merging |
| 138 | 120 | Subramanyam provided a test file; see ../misc/article-threads.pdf. |
| 139 | 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 | 159 | General |
| 142 | 160 | ======= |
| 143 | 161 | |
| ... | ... | @@ -146,8 +164,22 @@ directory or that are otherwise not publicly accessible. This includes |
| 146 | 164 | things sent to me by email that are specifically not public. Even so, |
| 147 | 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 | 179 | * Pl_TIFFPredictor is pretty slow. |
| 150 | 180 | |
| 181 | + * Maybe disambiguate resources when flattening annotations | |
| 182 | + | |
| 151 | 183 | * Some test cases on bad fails fail because qpdf is unable to find |
| 152 | 184 | the root dictionary when it fails to read the trailer. Recovery |
| 153 | 185 | could find the root dictionary and even the info dictionary in | ... | ... |