diff --git a/libqpdf/QPDFJob.cc b/libqpdf/QPDFJob.cc index 621e693..55bebdc 100644 --- a/libqpdf/QPDFJob.cc +++ b/libqpdf/QPDFJob.cc @@ -1188,6 +1188,12 @@ QPDFJob::doJSONQpdf(Pipeline* p, bool& first, QPDF& pdf) p, first_qpdf, "jsonversion", JSON::makeInt(this->m->json_version), 1); JSON::writeDictionaryItem( p, first_qpdf, "pdfversion", JSON::makeString(pdf.getPDFVersion()), 1); + JSON::writeDictionaryItem( + p, + first_qpdf, + "maxobjectid", + JSON::makeInt(QIntC::to_longlong(pdf.getObjectCount())), + 1); JSON::writeDictionaryKey(p, first_qpdf, "objects", 1); bool first_object = true; JSON::writeDictionaryOpen(p, first_object, 2); @@ -1613,6 +1619,7 @@ QPDFJob::json_schema(int json_version, std::set* keys) schema.addDictionaryMember("qpdf", JSON::parse(R"({ "jsonversion": "qpdf json output version", "pdfversion": "PDF version from PDF header", + "maxobjectid": "Highest object ID; needed for adding new objects", "objects": { "": "json representation of object" } diff --git a/qpdf/qtest/qpdf/direct-pages-json-objects.out b/qpdf/qtest/qpdf/direct-pages-json-objects.out index 773a0a4..0746a92 100644 --- a/qpdf/qtest/qpdf/direct-pages-json-objects.out +++ b/qpdf/qtest/qpdf/direct-pages-json-objects.out @@ -6,6 +6,7 @@ "qpdf": { "jsonversion": 2, "pdfversion": "1.3", + "maxobjectid": 6, "objects": { "obj:1 0 R": { "value": { diff --git a/qpdf/qtest/qpdf/direct-pages-json-pages.out b/qpdf/qtest/qpdf/direct-pages-json-pages.out index 5cd2b2c..9f9e41f 100644 --- a/qpdf/qtest/qpdf/direct-pages-json-pages.out +++ b/qpdf/qtest/qpdf/direct-pages-json-pages.out @@ -28,6 +28,7 @@ "qpdf": { "jsonversion": 2, "pdfversion": "1.3", + "maxobjectid": 8, "objects": { "obj:1 0 R": { "value": { diff --git a/qpdf/qtest/qpdf/image-streams-small-to-json.out b/qpdf/qtest/qpdf/image-streams-small-to-json.out index fa4929f..3fd3e14 100644 --- a/qpdf/qtest/qpdf/image-streams-small-to-json.out +++ b/qpdf/qtest/qpdf/image-streams-small-to-json.out @@ -6,6 +6,7 @@ "qpdf": { "jsonversion": 2, "pdfversion": "1.3", + "maxobjectid": 30, "objects": { "obj:1 0 R": { "value": { diff --git a/qpdf/qtest/qpdf/json-bad-data-json-file-v2.out b/qpdf/qtest/qpdf/json-bad-data-json-file-v2.out index 147dc37..79e739e 100644 --- a/qpdf/qtest/qpdf/json-bad-data-json-file-v2.out +++ b/qpdf/qtest/qpdf/json-bad-data-json-file-v2.out @@ -53,6 +53,7 @@ "qpdf": { "jsonversion": 2, "pdfversion": "1.3", + "maxobjectid": 6, "objects": { "obj:1 0 R": { "value": { diff --git a/qpdf/qtest/qpdf/json-bad-data-json-inline-v2.out b/qpdf/qtest/qpdf/json-bad-data-json-inline-v2.out index bfd7ad3..8c65e1c 100644 --- a/qpdf/qtest/qpdf/json-bad-data-json-inline-v2.out +++ b/qpdf/qtest/qpdf/json-bad-data-json-inline-v2.out @@ -53,6 +53,7 @@ "qpdf": { "jsonversion": 2, "pdfversion": "1.3", + "maxobjectid": 6, "objects": { "obj:1 0 R": { "value": { diff --git a/qpdf/qtest/qpdf/json-field-types---show-encryption-key-v2.out b/qpdf/qtest/qpdf/json-field-types---show-encryption-key-v2.out index c3158fa..d494860 100644 --- a/qpdf/qtest/qpdf/json-field-types---show-encryption-key-v2.out +++ b/qpdf/qtest/qpdf/json-field-types---show-encryption-key-v2.out @@ -434,6 +434,7 @@ "qpdf": { "jsonversion": 2, "pdfversion": "1.5", + "maxobjectid": 196, "objects": { "obj:1 0 R": { "value": { diff --git a/qpdf/qtest/qpdf/json-field-types-v2.out b/qpdf/qtest/qpdf/json-field-types-v2.out index c3158fa..d494860 100644 --- a/qpdf/qtest/qpdf/json-field-types-v2.out +++ b/qpdf/qtest/qpdf/json-field-types-v2.out @@ -434,6 +434,7 @@ "qpdf": { "jsonversion": 2, "pdfversion": "1.5", + "maxobjectid": 196, "objects": { "obj:1 0 R": { "value": { diff --git a/qpdf/qtest/qpdf/json-image-streams-all-file-v2.out b/qpdf/qtest/qpdf/json-image-streams-all-file-v2.out index 9848651..728f404 100644 --- a/qpdf/qtest/qpdf/json-image-streams-all-file-v2.out +++ b/qpdf/qtest/qpdf/json-image-streams-all-file-v2.out @@ -6,6 +6,7 @@ "qpdf": { "jsonversion": 2, "pdfversion": "1.3", + "maxobjectid": 30, "objects": { "obj:12 0 R": { "stream": { diff --git a/qpdf/qtest/qpdf/json-image-streams-all-v2.out b/qpdf/qtest/qpdf/json-image-streams-all-v2.out index 6ba1541..423103a 100644 --- a/qpdf/qtest/qpdf/json-image-streams-all-v2.out +++ b/qpdf/qtest/qpdf/json-image-streams-all-v2.out @@ -277,6 +277,7 @@ "qpdf": { "jsonversion": 2, "pdfversion": "1.3", + "maxobjectid": 30, "objects": { "obj:1 0 R": { "value": { diff --git a/qpdf/qtest/qpdf/json-image-streams-generalized-file-v2.out b/qpdf/qtest/qpdf/json-image-streams-generalized-file-v2.out index 00e5e8a..51258ec 100644 --- a/qpdf/qtest/qpdf/json-image-streams-generalized-file-v2.out +++ b/qpdf/qtest/qpdf/json-image-streams-generalized-file-v2.out @@ -6,6 +6,7 @@ "qpdf": { "jsonversion": 2, "pdfversion": "1.3", + "maxobjectid": 30, "objects": { "obj:12 0 R": { "stream": { diff --git a/qpdf/qtest/qpdf/json-image-streams-generalized-inline-v2.out b/qpdf/qtest/qpdf/json-image-streams-generalized-inline-v2.out index f84e478..1f28df1 100644 --- a/qpdf/qtest/qpdf/json-image-streams-generalized-inline-v2.out +++ b/qpdf/qtest/qpdf/json-image-streams-generalized-inline-v2.out @@ -277,6 +277,7 @@ "qpdf": { "jsonversion": 2, "pdfversion": "1.3", + "maxobjectid": 30, "objects": { "obj:1 0 R": { "value": { diff --git a/qpdf/qtest/qpdf/json-image-streams-none-file-v2.out b/qpdf/qtest/qpdf/json-image-streams-none-file-v2.out index ce9ccda..d1b4090 100644 --- a/qpdf/qtest/qpdf/json-image-streams-none-file-v2.out +++ b/qpdf/qtest/qpdf/json-image-streams-none-file-v2.out @@ -6,6 +6,7 @@ "qpdf": { "jsonversion": 2, "pdfversion": "1.3", + "maxobjectid": 30, "objects": { "obj:12 0 R": { "stream": { diff --git a/qpdf/qtest/qpdf/json-image-streams-none-inline-v2.out b/qpdf/qtest/qpdf/json-image-streams-none-inline-v2.out index d275ed0..7559e5c 100644 --- a/qpdf/qtest/qpdf/json-image-streams-none-inline-v2.out +++ b/qpdf/qtest/qpdf/json-image-streams-none-inline-v2.out @@ -277,6 +277,7 @@ "qpdf": { "jsonversion": 2, "pdfversion": "1.3", + "maxobjectid": 30, "objects": { "obj:1 0 R": { "value": { diff --git a/qpdf/qtest/qpdf/json-image-streams-small-v2.out b/qpdf/qtest/qpdf/json-image-streams-small-v2.out index f7556d3..8b0232a 100644 --- a/qpdf/qtest/qpdf/json-image-streams-small-v2.out +++ b/qpdf/qtest/qpdf/json-image-streams-small-v2.out @@ -277,6 +277,7 @@ "qpdf": { "jsonversion": 2, "pdfversion": "1.3", + "maxobjectid": 30, "objects": { "obj:1 0 R": { "value": { diff --git a/qpdf/qtest/qpdf/json-image-streams-specialized-file-v2.out b/qpdf/qtest/qpdf/json-image-streams-specialized-file-v2.out index e086527..dcf1d47 100644 --- a/qpdf/qtest/qpdf/json-image-streams-specialized-file-v2.out +++ b/qpdf/qtest/qpdf/json-image-streams-specialized-file-v2.out @@ -6,6 +6,7 @@ "qpdf": { "jsonversion": 2, "pdfversion": "1.3", + "maxobjectid": 30, "objects": { "obj:12 0 R": { "stream": { diff --git a/qpdf/qtest/qpdf/json-image-streams-specialized-inline-v2.out b/qpdf/qtest/qpdf/json-image-streams-specialized-inline-v2.out index 082743d..451ca08 100644 --- a/qpdf/qtest/qpdf/json-image-streams-specialized-inline-v2.out +++ b/qpdf/qtest/qpdf/json-image-streams-specialized-inline-v2.out @@ -277,6 +277,7 @@ "qpdf": { "jsonversion": 2, "pdfversion": "1.3", + "maxobjectid": 30, "objects": { "obj:1 0 R": { "value": { diff --git a/qpdf/qtest/qpdf/json-image-streams-specialized-v2.out b/qpdf/qtest/qpdf/json-image-streams-specialized-v2.out index 3e3f699..987d62c 100644 --- a/qpdf/qtest/qpdf/json-image-streams-specialized-v2.out +++ b/qpdf/qtest/qpdf/json-image-streams-specialized-v2.out @@ -277,6 +277,7 @@ "qpdf": { "jsonversion": 2, "pdfversion": "1.3", + "maxobjectid": 30, "objects": { "obj:1 0 R": { "value": { diff --git a/qpdf/qtest/qpdf/json-image-streams-v2.out b/qpdf/qtest/qpdf/json-image-streams-v2.out index 6a49225..64fc4cb 100644 --- a/qpdf/qtest/qpdf/json-image-streams-v2.out +++ b/qpdf/qtest/qpdf/json-image-streams-v2.out @@ -277,6 +277,7 @@ "qpdf": { "jsonversion": 2, "pdfversion": "1.3", + "maxobjectid": 30, "objects": { "obj:1 0 R": { "value": { diff --git a/qpdf/qtest/qpdf/json-outlines-with-actions-v2.out b/qpdf/qtest/qpdf/json-outlines-with-actions-v2.out index feffede..4adc6a3 100644 --- a/qpdf/qtest/qpdf/json-outlines-with-actions-v2.out +++ b/qpdf/qtest/qpdf/json-outlines-with-actions-v2.out @@ -622,6 +622,7 @@ "qpdf": { "jsonversion": 2, "pdfversion": "1.3", + "maxobjectid": 108, "objects": { "obj:1 0 R": { "value": { diff --git a/qpdf/qtest/qpdf/json-outlines-with-old-root-dests-v2.out b/qpdf/qtest/qpdf/json-outlines-with-old-root-dests-v2.out index 6ce3b54..8e97c09 100644 --- a/qpdf/qtest/qpdf/json-outlines-with-old-root-dests-v2.out +++ b/qpdf/qtest/qpdf/json-outlines-with-old-root-dests-v2.out @@ -727,6 +727,7 @@ "qpdf": { "jsonversion": 2, "pdfversion": "1.3", + "maxobjectid": 107, "objects": { "obj:1 0 R": { "value": { diff --git a/qpdf/qtest/qpdf/json-page-labels-and-outlines-qpdf-trailer-2-v2.out b/qpdf/qtest/qpdf/json-page-labels-and-outlines-qpdf-trailer-2-v2.out index 814579f..867f5b9 100644 --- a/qpdf/qtest/qpdf/json-page-labels-and-outlines-qpdf-trailer-2-v2.out +++ b/qpdf/qtest/qpdf/json-page-labels-and-outlines-qpdf-trailer-2-v2.out @@ -6,6 +6,7 @@ "qpdf": { "jsonversion": 2, "pdfversion": "1.3", + "maxobjectid": 106, "objects": { "obj:2 0 R": { "value": { diff --git a/qpdf/qtest/qpdf/json-page-labels-and-outlines-qpdf-trailer-v2.out b/qpdf/qtest/qpdf/json-page-labels-and-outlines-qpdf-trailer-v2.out index 63596e8..6a4969d 100644 --- a/qpdf/qtest/qpdf/json-page-labels-and-outlines-qpdf-trailer-v2.out +++ b/qpdf/qtest/qpdf/json-page-labels-and-outlines-qpdf-trailer-v2.out @@ -6,6 +6,7 @@ "qpdf": { "jsonversion": 2, "pdfversion": "1.3", + "maxobjectid": 106, "objects": { "trailer": { "value": { diff --git a/qpdf/qtest/qpdf/json-page-labels-and-outlines-qpdf-v2.out b/qpdf/qtest/qpdf/json-page-labels-and-outlines-qpdf-v2.out index 3d8a2d6..9c8e5b5 100644 --- a/qpdf/qtest/qpdf/json-page-labels-and-outlines-qpdf-v2.out +++ b/qpdf/qtest/qpdf/json-page-labels-and-outlines-qpdf-v2.out @@ -6,6 +6,7 @@ "qpdf": { "jsonversion": 2, "pdfversion": "1.3", + "maxobjectid": 106, "objects": { "obj:1 0 R": { "value": { diff --git a/qpdf/qtest/qpdf/json-page-labels-and-outlines-v2.out b/qpdf/qtest/qpdf/json-page-labels-and-outlines-v2.out index 349b8b6..81f7441 100644 --- a/qpdf/qtest/qpdf/json-page-labels-and-outlines-v2.out +++ b/qpdf/qtest/qpdf/json-page-labels-and-outlines-v2.out @@ -797,6 +797,7 @@ "qpdf": { "jsonversion": 2, "pdfversion": "1.3", + "maxobjectid": 106, "objects": { "obj:1 0 R": { "value": { diff --git a/qpdf/qtest/qpdf/json-page-labels-num-tree-v2.out b/qpdf/qtest/qpdf/json-page-labels-num-tree-v2.out index acff306..e7ea1ed 100644 --- a/qpdf/qtest/qpdf/json-page-labels-num-tree-v2.out +++ b/qpdf/qtest/qpdf/json-page-labels-num-tree-v2.out @@ -540,6 +540,7 @@ "qpdf": { "jsonversion": 2, "pdfversion": "1.3", + "maxobjectid": 99, "objects": { "obj:1 0 R": { "value": { diff --git a/qpdf/qtest/qpdf/page_api_2-json-objects.out b/qpdf/qtest/qpdf/page_api_2-json-objects.out index b686d14..42d4712 100644 --- a/qpdf/qtest/qpdf/page_api_2-json-objects.out +++ b/qpdf/qtest/qpdf/page_api_2-json-objects.out @@ -6,6 +6,7 @@ "qpdf": { "jsonversion": 2, "pdfversion": "1.3", + "maxobjectid": 10, "objects": { "obj:1 0 R": { "value": { diff --git a/qpdf/qtest/qpdf/page_api_2-json-pages.out b/qpdf/qtest/qpdf/page_api_2-json-pages.out index 8e6f94b..372a14f 100644 --- a/qpdf/qtest/qpdf/page_api_2-json-pages.out +++ b/qpdf/qtest/qpdf/page_api_2-json-pages.out @@ -38,6 +38,7 @@ "qpdf": { "jsonversion": 2, "pdfversion": "1.3", + "maxobjectid": 11, "objects": { "obj:1 0 R": { "value": {