Major rework -- see long comments

* Replace --create-from-json=file with --json-input, which causes the
  regular input to be treated as json.
* Eliminate --to-json
* In --json=2, bring back "objects" and eliminate "objectinfo". Stream
  data is never present.
* In --json-output=2, write "qpdf-v2" with "objects" and include
  stream data.
This commit is contained in:
Jay Berkenbilt 2022-05-18 18:22:57 -04:00
parent 23fc6756f1
commit 6f43bf8de3
89 changed files with 13633 additions and 15368 deletions

73
TODO
View File

@ -54,6 +54,10 @@ Soon: Break ground on "Document-level work"
Output JSON v2
==============
Some of this documentation has drifted from the actual implementation.
Make sure pages tree repair generates warnings.
* Reread from perspective of update
* Test all ignore cases with QTC
* Test case of correct file with dict before data/datafile
@ -62,6 +66,7 @@ Output JSON v2
after creation.
* Test invalid data, invalid data file
* Tests: round-trip through json, round-trip through qpdf --qdf
* Test to see if we get CR/NL on Windows, which is okay
Try to never flatten pages tree. Make sure we do something reasonable
with pages tree repair. The problem is that if pages tree repair is
@ -75,6 +80,9 @@ General things to remember:
* Make sure all the information from --check and other informational
options (--show-linearization, --show-encryption, --show-xref,
--list-attachments, --show-npages) is available in the json output.
Consider having --check, --show-encryption, etc., just select the
right keys when in json mode. I don't think I want check on by
default, so that might be different.
* Consider changing the contract to allow fields to be absent even
when present in the schema. It's reasonable for people to check for
@ -95,41 +103,32 @@ General things to remember:
JSON to PDF:
Have --create-from-json and --update-from-json. With
--create-from-json, the json file must be complete, meaning all stream
data, the trailer, and the PDF version must be present. In
--update-from-json, an object explicitly set to null (not "value":
null) is deleted. For streams with no stream data, the dictionary is
updated but the data is left untouched. Other things that are omitted
are left alone. Make sure document that, when writing a PDF file from
QPDF, there is no expectation of object numbers being preserved. As
such, --update-from-json can only be used to update the exact file
that the json was created from. You can put multiple objects in the
update file, but you can't use a json from one file to update the
output of a previous update since the object numbers will have
changed. Note that, when creating from a JSON, object numbers are
preserved in the resulting QPDF object but still modified by
QPDFWriter for the output. This would be visible by combining
--to-json and --create-from-json. Also using --qdf with
--create-from-json would show original object IDs in comments. It will
be important to capture this in the documentation.
Have --json-input and --update-from-json. With --json-input, the json
file must be complete, meaning all stream data, the trailer, and the
PDF version must be present. In --update-from-json, an object
explicitly set to null (not "value": null) is deleted. For streams
with no stream data, the dictionary is updated but the data is left
untouched. Other things that are omitted are left alone. Make sure
document that, when writing a PDF file from QPDF, there is no
expectation of object numbers being preserved. As such,
--update-from-json can only be used to update the exact file that the
json was created from. You can put multiple objects in the update
file, but you can't use a json from one file to update the output of a
previous update since the object numbers will have changed. Note that,
when creating from a JSON, object numbers are preserved in the
resulting QPDF object but still modified by QPDFWriter for the output.
This would be visible by combining --json-output and --json-input.
Also using --qdf with --create-from-json would show original object
IDs in comments. It will be important to capture this in the
documentation.
When reading a JSON string, any string that doesn't look like a name
or indirect object or start with "b:" or "u:" should be considered an
error. Just use newUnicodeString on "u:" strings. For "b:" strings,
decode the bytes with hex_decode and use newString.
For going back from JSON to PDF, we can have
QPDF::createFromJSON(std::shared_ptr<InputSource>)
which will have logic similar to copyForeignObject. Note that this
InputSource is not going to be this->file. We have to keep it
separately. There's also non-static QPDF::updateFromJSON. Both
createFromJSON and updateFromJSON will call the same internal method
with different options. That method will use a reactor that is a
private QPDF class that just proxies to private QPDF methods.
Test case: combine --create-from-json and --to-json to preservation of
object numbers. QPDFWriter won't show that although --qdf with the
Test case: combine --json-input and --json-output to show preservation
of object numbers. QPDFWriter won't show that although --qdf with the
original object ID comments would.
The backing input source for createFromJSON is this memory block:
@ -145,8 +144,7 @@ startxref
%%EOF
```
* Ignore all keys except .qpdf.
* Verify that .qpdf.jsonVersion is 2
* Ignore all keys except .qpdf-v2.
* Set this->m->pdf_version based on the .qpdf.pdfVersion key
* For each object in .qpdf.objects:
* Walk through the object detecting any indirect objects. For each
@ -170,15 +168,14 @@ Documentation:
Serialized PDF:
The JSON output will have a "qpdf" key containing
* jsonversion
The JSON output will have a "qpdf-v2" key containing
* pdfversion
* maxobjectid
* objects
The "qpdf" key replaces "objects" and "objectinfo" in v1 JSON.
In regular json mode, "objectinfo" is gone.
Within .qpdf.objects, the key is "obj:o g R" or "trailer", and the
Within .objects, the key is "obj:o g R" or "trailer", and the
value is a dictionary with exactly one of "value" or "stream" as its
single key.
@ -222,11 +219,11 @@ for when the file is read back in.
CLI:
Example workflow:
* qpdf in.pdf --to-json > pdf.json
* qpdf in.pdf --json-output=2 pdf.json
* edit pdf.json
* qpdf --create-from-json=pdf.json out.pdf
* qpdf --json-input pdf.json out.pdf
* qpdf in.pdf --to-json > pdf.json
* qpdf in.pdf --json-output=2 pdf.json
* edit pdf.json keeping only objects that need to be changed
* qpdf in.pdf --update-from-json=pdf.json out.pdf

View File

@ -111,23 +111,38 @@ class QPDF
processInputSource(std::shared_ptr<InputSource>, char const* password = 0);
// Create a PDF from an input source that contains JSON as written
// by qpdf --json (version 2 or higher). The JSON must be a
// complete representation of a PDF. See "QPDF JSON Format" in the
// manual for details.
// by writeJSON (or qpdf --json-output, version 2 or higher). The
// JSON must be a complete representation of a PDF. See "QPDF JSON
// Format" in the manual for details.
QPDF_DLL
void createFromJSON(std::string const& json_file);
QPDF_DLL
void createFromJSON(std::shared_ptr<InputSource>);
// Update a PDF from an input source that contains JSON in the
// same format as is written by qpdf --json (version 2 or higher).
// Objects in the PDF and not in the JSON are not modified. See
// "QPDF JSON Format" in the manual for details.
// same format as is written by writeJSON (or qpdf --json-output,
// version 2 or higher). Objects in the PDF and not in the JSON
// are not modified. See "QPDF JSON Format" in the manual for
// details.
QPDF_DLL
void updateFromJSON(std::string const& json_file);
QPDF_DLL
void updateFromJSON(std::shared_ptr<InputSource>);
// Write qpdf json format. The only supported version is 2. If
// wanted_objects is empty, write all objects. Otherwise, write
// only objects whose keys are in wanted_objects. Keys may be
// either "trailer" or of the form "obj:n n R". Invalid keys are
// ignored.
QPDF_DLL
void writeJSON(
int version,
Pipeline*,
qpdf_stream_decode_level_e,
qpdf_json_stream_data_e,
std::string const& file_prefix,
std::set<std::string> wanted_objects);
// Close or otherwise release the input source. Once this has been
// called, no other methods of qpdf can be called safely except
// for getWarnings and anyWarnings(). After this has been called,
@ -1040,7 +1055,6 @@ class QPDF
bool parse_error;
bool saw_qpdf;
bool saw_objects;
bool saw_json_version;
bool saw_pdf_version;
bool saw_trailer;
state_e state;
@ -1571,6 +1585,23 @@ class QPDF
// JSON import
void importJSON(std::shared_ptr<InputSource>, bool must_be_complete);
// JSON write
void writeJSONStream(
int version,
Pipeline* p,
bool& first,
std::string const& key,
QPDFObjectHandle&,
qpdf_stream_decode_level_e,
qpdf_json_stream_data_e,
std::string const& file_prefix);
void writeJSONObject(
int version,
Pipeline* p,
bool& first,
std::string const& key,
QPDFObjectHandle&);
// Type conversion helper methods
template <typename T>
static qpdf_offset_t

View File

@ -323,8 +323,6 @@ class QPDFJob
Config* outputFile(std::string const& filename);
QPDF_DLL
Config* replaceInput();
QPDF_DLL
Config* createFromJson(std::string const& filename);
QPDF_DLL
std::shared_ptr<CopyAttConfig> copyAttachmentsFrom();
@ -455,7 +453,10 @@ class QPDFJob
// Basic file processing
std::shared_ptr<QPDF> processFile(
char const* filename, char const* password, bool used_for_input);
char const* filename,
char const* password,
bool used_for_input,
bool main_input);
std::shared_ptr<QPDF> processInputSource(
std::shared_ptr<InputSource> is,
char const* password,
@ -464,12 +465,14 @@ class QPDFJob
std::function<void(QPDF*, char const*)> fn,
char const* password,
bool empty,
bool used_for_input);
bool used_for_input,
bool main_input);
std::shared_ptr<QPDF> doProcessOnce(
std::function<void(QPDF*, char const*)> fn,
char const* password,
bool empty,
bool used_for_input);
bool used_for_input,
bool main_input);
// Transformations
void setQPDFOptions(QPDF& pdf);
@ -511,31 +514,21 @@ class QPDFJob
void setEncryptionOptions(QPDF&, QPDFWriter&);
void maybeFixWritePassword(int R, std::string& password);
void writeOutfile(QPDF& pdf);
void writeJSON(QPDF& pdf);
// JSON
void doJSON(QPDF& pdf, Pipeline*);
std::set<QPDFObjGen> getWantedJSONObjects();
void doJSONObject(
Pipeline* p, bool& first, std::string const& key, QPDFObjectHandle&);
void doJSONObjects(Pipeline* p, bool& first, QPDF& pdf);
void doJSONObjectinfo(Pipeline* p, bool& first, QPDF& pdf);
void doJSONQpdf(Pipeline* p, bool& first, QPDF& pdf);
void doJSONPages(Pipeline* p, bool& first, QPDF& pdf);
void doJSONPageLabels(Pipeline* p, bool& first, QPDF& pdf);
void doJSONOutlines(Pipeline* p, bool& first, QPDF& pdf);
void doJSONAcroform(Pipeline* p, bool& first, QPDF& pdf);
void doJSONEncrypt(Pipeline* p, bool& first, QPDF& pdf);
void doJSONAttachments(Pipeline* p, bool& first, QPDF& pdf);
void doJSONStream(
Pipeline* p,
bool& first,
QPDF& pdf,
QPDFObjectHandle& obj,
std::string const& file_prefix);
void doJSONObject(
Pipeline* p,
bool& first,
QPDF& pdf,
std::string const& key,
QPDFObjectHandle& obj);
void addOutlinesToJson(
std::vector<QPDFOutlineObjectHelper> outlines,
JSON& j,
@ -654,6 +647,7 @@ class QPDFJob
std::set<std::string> json_keys;
std::set<std::string> json_objects;
qpdf_json_stream_data_e json_stream_data;
bool json_stream_data_set;
std::string json_stream_prefix;
bool test_json_schema;
bool check;
@ -676,7 +670,8 @@ class QPDFJob
bool check_requires_password;
std::shared_ptr<char> infilename;
std::shared_ptr<char> outfilename;
std::string create_from_json;
bool json_input;
int json_output;
std::string update_from_json;
};
std::shared_ptr<Members> m;

View File

@ -17,6 +17,7 @@ QPDF_DLL Config* flattenRotation();
QPDF_DLL Config* generateAppearances();
QPDF_DLL Config* ignoreXrefStreams();
QPDF_DLL Config* isEncrypted();
QPDF_DLL Config* jsonInput();
QPDF_DLL Config* keepInlineImages();
QPDF_DLL Config* linearize();
QPDF_DLL Config* listAttachments();
@ -44,7 +45,6 @@ QPDF_DLL Config* staticId();
QPDF_DLL Config* suppressPasswordRecovery();
QPDF_DLL Config* suppressRecovery();
QPDF_DLL Config* testJsonSchema();
QPDF_DLL Config* toJson();
QPDF_DLL Config* verbose();
QPDF_DLL Config* warningExit0();
QPDF_DLL Config* withImages();
@ -77,12 +77,13 @@ QPDF_DLL Config* compressStreams(std::string const& parameter);
QPDF_DLL Config* decodeLevel(std::string const& parameter);
QPDF_DLL Config* flattenAnnotations(std::string const& parameter);
QPDF_DLL Config* jsonKey(std::string const& parameter);
QPDF_DLL Config* jsonOutput(std::string const& parameter);
QPDF_DLL Config* jsonStreamData(std::string const& parameter);
QPDF_DLL Config* keepFilesOpen(std::string const& parameter);
QPDF_DLL Config* normalizeContent(std::string const& parameter);
QPDF_DLL Config* objectStreams(std::string const& parameter);
QPDF_DLL Config* passwordMode(std::string const& parameter);
QPDF_DLL Config* removeUnreferencedResources(std::string const& parameter);
QPDF_DLL Config* streamData(std::string const& parameter);
QPDF_DLL Config* jsonStreamData(std::string const& parameter);
QPDF_DLL Config* json(std::string const& parameter);
QPDF_DLL Config* json();

View File

@ -3,15 +3,15 @@ generate_auto_job 0514289f2deb3bf7c1a6e85ef7d99ad120321ef5a6fe49d76c5274c6a658d3
include/qpdf/auto_job_c_att.hh 4c2b171ea00531db54720bf49a43f8b34481586ae7fb6cbf225099ee42bc5bb4
include/qpdf/auto_job_c_copy_att.hh 50609012bff14fd82f0649185940d617d05d530cdc522185c7f3920a561ccb42
include/qpdf/auto_job_c_enc.hh 28446f3c32153a52afa239ea40503e6cc8ac2c026813526a349e0cd4ae17ddd5
include/qpdf/auto_job_c_main.hh 178a0c98c80d53036910ec67165dbc3902aa8da857de8a0df52911f005918c54
include/qpdf/auto_job_c_main.hh c21395ba79b98b3054f6d73266285d216b77568ea55ca7149d3e6a157604d682
include/qpdf/auto_job_c_pages.hh b3cc0f21029f6d89efa043dcdbfa183cb59325b6506001c18911614fe8e568ec
include/qpdf/auto_job_c_uo.hh ae21b69a1efa9333050f4833d465f6daff87e5b38e5106e49bbef5d4132e4ed1
job.yml a95b2446066293f409b36032a0ee411dbe570a7a94f5fd295048d009215f993f
libqpdf/qpdf/auto_job_decl.hh 833bde9c1f8fc17b914f16498e26d9d1315361645b4ac5c50c1f830a76618ca7
libqpdf/qpdf/auto_job_help.hh 38bf89067ca7dc244e4e697c598ba0ba8a827600a78b9195fc69f0ac1663f3a2
libqpdf/qpdf/auto_job_init.hh f0ffab312430b232a7288b8443382ed859021e6ad6ed2c8c9a4dbbd2b33e2aa7
libqpdf/qpdf/auto_job_json_decl.hh 81d09d4b82b2e042a64246ed1d7a187bdc83b671b45e7b8ee60ad37c0c11e9a7
libqpdf/qpdf/auto_job_json_init.hh 2fcdae08365abe351d2dfb6a823e2b3af27a6510632de23cabef6cefa5dfb199
libqpdf/qpdf/auto_job_schema.hh 1a80be3b8d97e9b5a55b8aa45a4b312668b1687eab6f038c4ee5f4662ab71997
job.yml feae32412cc75f84fb9ff7521121466f9582e85547f45613c3a7083a929f01e6
libqpdf/qpdf/auto_job_decl.hh 74df4d7fdbdf51ecd0d58ce1e9844bb5525b9adac5a45f7c9a787ecdda2868df
libqpdf/qpdf/auto_job_help.hh 5ca1d2b73f6a70f1ef47896b49553ae8ded4a6459bbb1f6697947e2cc598d799
libqpdf/qpdf/auto_job_init.hh 3acc779ff96bde839c8c95a844145df830c53ee58fbf61b8ce056a1751bc11f2
libqpdf/qpdf/auto_job_json_decl.hh 06caa46eaf71db8a50c046f91866baa8087745a9474319fb7c86d92634cc8297
libqpdf/qpdf/auto_job_json_init.hh 0441fd710ded1512a84976b542910fec16e8b9ab665e5efb5b37c5a29fd8654f
libqpdf/qpdf/auto_job_schema.hh 9d543cd4a43eafffc2c4b8a6fee29e399c271c52cb6f7d417ae5497b3c1127dc
manual/_ext/qpdf.py 6add6321666031d55ed4aedf7c00e5662bba856dfcd66ccb526563bffefbb580
manual/cli.rst 4550dd1b459721d8ef9affa7c9c07f351a06379498ec1291f702f1a5994b6d84
manual/cli.rst 3d133669f2b1f845bbc09e51e5b6fff6dd8803282b71aff0db2c55878b1ec508

25
job.yml
View File

@ -36,10 +36,6 @@ choices:
- all
- print
- screen
json_version:
- 1
- 2
- latest
json_key:
# The list of selectable top-level keys id duplicated in the
# following places: job.yml, QPDFJob::json_schema, and
@ -48,15 +44,21 @@ choices:
- attachments
- encrypt
- objectinfo # only v1
- objects # only v1
- objects
- outlines
- pagelabels
- pages
- qpdf # only v2
json_output:
- 2
- latest
json_stream_data:
- none
- inline
- file
json_version:
- 1
- 2
- latest
print128:
- full
- low
@ -86,7 +88,6 @@ options:
- underlay
- empty
- replace-input
- create-from-json
positional: true
bare:
- add-attachment
@ -105,6 +106,7 @@ options:
- generate-appearances
- ignore-xref-streams
- is-encrypted
- json-input
- keep-inline-images
- linearize
- list-attachments
@ -135,7 +137,6 @@ options:
- suppress-password-recovery
- suppress-recovery
- test-json-schema
- to-json
- underlay
- verbose
- warning-exit-0
@ -164,20 +165,20 @@ options:
show-attachment: attachment
show-object: trailer
json-stream-prefix: stream-file-prefix
create-from-json: qpdf-json file
update-from-json: qpdf-json file
required_choices:
compress-streams: yn
decode-level: decode_level
flatten-annotations: flatten
json-key: json_key
json-output: json_output
json-stream-data: json_stream_data
keep-files-open: yn
normalize-content: yn
object-streams: object_streams
password-mode: password_mode
remove-unreferenced-resources: remove_unref
stream-data: stream_data
json-stream-data: json_stream_data
optional_choices:
json: json_version
- table: pages
@ -281,7 +282,7 @@ json:
main.password:
password-file:
empty:
create-from-json:
json-input:
# output
_outputFile: "output filename"
replace-input:
@ -308,6 +309,7 @@ json:
force-version:
progress:
split-pages:
json-output:
encrypt:
_user-password: "user password"
_owner-password: "owner password"
@ -362,7 +364,6 @@ json:
- null
json-stream-data:
json-stream-prefix:
to-json:
# other options
update-from-json:
allow-weak-crypto:

View File

@ -402,6 +402,7 @@ QPDFJob::Members::Members() :
list_attachments(false),
json_version(0),
json_stream_data(qpdf_sj_none),
json_stream_data_set(false),
test_json_schema(false),
check(false),
optimize_images(false),
@ -418,7 +419,9 @@ QPDFJob::Members::Members() :
require_outfile(true),
replace_input(false),
check_is_encrypted(false),
check_requires_password(false)
check_requires_password(false),
json_input(false),
json_output(0)
{
}
@ -533,7 +536,8 @@ QPDFJob::run()
checkConfiguration();
std::shared_ptr<QPDF> pdf_ph;
try {
pdf_ph = processFile(m->infilename.get(), m->password.get(), true);
pdf_ph =
processFile(m->infilename.get(), m->password.get(), true, true);
} catch (QPDFExc& e) {
if ((e.getErrorCode() == qpdf_e_password) &&
(m->check_is_encrypted || m->check_requires_password)) {
@ -704,15 +708,8 @@ QPDFJob::checkConfiguration()
" overwrite the input file");
}
if (m->json_version == 1) {
if (m->json_keys.count("qpdf")) {
usage("json key \"qpdf\" is not valid for json version 1");
}
} else {
if (m->json_keys.count("objects") || m->json_keys.count("objectinfo")) {
usage("json keys \"objects\" and \"objectinfo\" are only valid for "
"json version 1");
}
if (m->json_keys.count("objectinfo")) {
usage("json key \"objectinfo\" is only valid for json version 1");
}
}
@ -1060,6 +1057,26 @@ QPDFJob::getWantedJSONObjects()
return wanted_og;
}
void
QPDFJob::doJSONObject(
Pipeline* p, bool& first, std::string const& key, QPDFObjectHandle& obj)
{
if (this->m->json_version == 1) {
JSON::writeDictionaryItem(p, first, key, obj.getJSON(1, true), 1);
} else {
auto j = JSON::makeDictionary();
if (obj.isStream()) {
j.addDictionaryMember("stream", JSON::makeDictionary())
.addDictionaryMember(
"dict", obj.getDict().getJSON(this->m->json_version, true));
} else {
j.addDictionaryMember(
"value", obj.getJSON(this->m->json_version, true));
}
JSON::writeDictionaryItem(p, first, key, j, 1);
}
}
void
QPDFJob::doJSONObjects(Pipeline* p, bool& first, QPDF& pdf)
{
@ -1070,22 +1087,17 @@ QPDFJob::doJSONObjects(Pipeline* p, bool& first, QPDF& pdf)
std::set<QPDFObjGen> wanted_og = getWantedJSONObjects();
std::vector<QPDFObjectHandle> objects = pdf.getAllObjects();
for (auto& obj: objects) {
std::string key = obj.unparse();
if (this->m->json_version > 1) {
key = "obj:" + key;
}
if (all_objects || wanted_og.count(obj.getObjGen())) {
JSON::writeDictionaryItem(
p,
first_object,
obj.unparse(),
obj.getJSON(this->m->json_version, true),
1);
doJSONObject(p, first_object, key, obj);
}
}
if (all_objects || m->json_objects.count("trailer")) {
JSON::writeDictionaryItem(
p,
first_object,
"trailer",
pdf.getTrailer().getJSON(this->m->json_version, true),
1);
auto trailer = pdf.getTrailer();
doJSONObject(p, first_object, "trailer", trailer);
}
JSON::writeDictionaryClose(p, first_object, 1);
}
@ -1122,108 +1134,6 @@ QPDFJob::doJSONObjectinfo(Pipeline* p, bool& first, QPDF& pdf)
JSON::writeDictionaryClose(p, first_object, 1);
}
void
QPDFJob::doJSONStream(
Pipeline* p,
bool& first,
QPDF& pdf,
QPDFObjectHandle& obj,
std::string const& file_prefix)
{
Pipeline* stream_p = nullptr;
FILE* f = nullptr;
std::shared_ptr<Pl_StdioFile> f_pl;
std::string filename;
if (this->m->json_stream_data == qpdf_sj_file) {
filename = file_prefix + "-" + QUtil::int_to_string(obj.getObjectID());
f = QUtil::safe_fopen(filename.c_str(), "wb");
f_pl = std::make_shared<Pl_StdioFile>("stream data", f);
stream_p = f_pl.get();
}
auto j = JSON::makeDictionary();
j.addDictionaryMember(
"stream",
obj.getStreamJSON(
this->m->json_version,
this->m->json_stream_data,
this->m->decode_level,
stream_p,
filename));
JSON::writeDictionaryItem(p, first, "obj:" + obj.unparse(), j, 2);
if (f) {
f_pl->finish();
f_pl = nullptr;
fclose(f);
}
}
void
QPDFJob::doJSONObject(
Pipeline* p,
bool& first,
QPDF& pdf,
std::string const& key,
QPDFObjectHandle& obj)
{
auto j = JSON::makeDictionary();
j.addDictionaryMember("value", obj.getJSON(this->m->json_version, true));
JSON::writeDictionaryItem(p, first, key, j, 2);
}
void
QPDFJob::doJSONQpdf(Pipeline* p, bool& first, QPDF& pdf)
{
std::string file_prefix = this->m->json_stream_prefix;
if (this->m->json_stream_data == qpdf_sj_file) {
if (file_prefix.empty()) {
if (this->m->infilename.get()) {
file_prefix = this->m->infilename.get();
}
if (file_prefix.empty()) {
usage(
"please specify --json-stream-prefix since the input file "
"name is unknown");
}
}
}
JSON::writeDictionaryKey(p, first, "qpdf", 0);
bool first_qpdf = true;
JSON::writeDictionaryOpen(p, first_qpdf, 1);
JSON::writeDictionaryItem(
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);
bool all_objects = m->json_objects.empty();
std::set<QPDFObjGen> wanted_og = getWantedJSONObjects();
std::vector<QPDFObjectHandle> objects = pdf.getAllObjects();
for (auto& obj: objects) {
if (all_objects || wanted_og.count(obj.getObjGen())) {
if (obj.isStream()) {
doJSONStream(p, first_object, pdf, obj, file_prefix);
} else {
doJSONObject(p, first_object, pdf, "obj:" + obj.unparse(), obj);
}
}
}
if (all_objects || m->json_objects.count("trailer")) {
auto trailer = pdf.getTrailer();
doJSONObject(p, first_object, pdf, "trailer", trailer);
}
JSON::writeDictionaryClose(p, first_object, 2);
JSON::writeDictionaryClose(p, first_qpdf, 1);
}
void
QPDFJob::doJSONPages(Pipeline* p, bool& first, QPDF& pdf)
{
@ -1603,12 +1513,12 @@ QPDFJob::json_schema(int json_version, std::set<std::string>* keys)
// The list of selectable top-level keys id duplicated in the
// following places: job.yml, QPDFJob::json_schema, and
// QPDFJob::doJSON.
if (json_version == 1) {
if (all_keys || keys->count("objects")) {
schema.addDictionaryMember("objects", JSON::parse(R"({
if (all_keys || keys->count("objects")) {
schema.addDictionaryMember("objects", JSON::parse(R"({
"<n n R|trailer>": "json representation of object"
})"));
}
}
if (json_version == 1) {
if (all_keys || keys->count("objectinfo")) {
JSON objectinfo =
schema.addDictionaryMember("objectinfo", JSON::parse(R"({
@ -1619,17 +1529,6 @@ QPDFJob::json_schema(int json_version, std::set<std::string>* keys)
"length": "if stream, its length, otherwise null"
}
}
})"));
}
} else {
if (all_keys || keys->count("qpdf")) {
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": {
"<obj:n n R|trailer>": "json representation of object"
}
})"));
}
}
@ -1843,17 +1742,15 @@ QPDFJob::doJSON(QPDF& pdf, Pipeline* p)
// repairing the page tree. To see the original file with any page
// tree problems and the page tree not flattened, select
// objects/objectinfo without other keys.
if (all_keys || m->json_keys.count("objects")) {
doJSONObjects(p, first, pdf);
}
if (this->m->json_version == 1) {
if (all_keys || m->json_keys.count("objects")) {
doJSONObjects(p, first, pdf);
}
// "objectinfo" is not needed for version >1 since you can
// tell streams from other objects in "objects".
if (all_keys || m->json_keys.count("objectinfo")) {
doJSONObjectinfo(p, first, pdf);
}
} else {
if (all_keys || m->json_keys.count("qpdf")) {
doJSONQpdf(p, first, pdf);
}
}
JSON::writeDictionaryClose(p, first, 0);
@ -1939,16 +1836,15 @@ QPDFJob::doProcessOnce(
std::function<void(QPDF*, char const*)> fn,
char const* password,
bool empty,
bool used_for_input)
bool used_for_input,
bool main_input)
{
auto pdf = std::make_shared<QPDF>();
setQPDFOptions(*pdf);
if (empty) {
if (!this->m->create_from_json.empty()) {
pdf->createFromJSON(this->m->create_from_json);
} else {
pdf->emptyPDF();
}
pdf->emptyPDF();
} else if (main_input && this->m->json_input) {
pdf->createFromJSON(this->m->infilename.get());
} else {
fn(pdf.get(), password);
}
@ -1964,7 +1860,8 @@ QPDFJob::doProcess(
std::function<void(QPDF*, char const*)> fn,
char const* password,
bool empty,
bool used_for_input)
bool used_for_input,
bool main_input)
{
// If a password has been specified but doesn't work, try other
// passwords that are equivalent in different character encodings.
@ -1990,7 +1887,7 @@ QPDFJob::doProcess(
m->suppress_password_recovery) {
// There is no password, or we're not doing recovery, so just
// do the normal processing with the supplied password.
return doProcessOnce(fn, password, empty, used_for_input);
return doProcessOnce(fn, password, empty, used_for_input, main_input);
}
// Get a list of otherwise encoded strings. Keep in scope for this
@ -2018,7 +1915,7 @@ QPDFJob::doProcess(
bool warned = false;
for (auto iter = passwords.begin(); iter != passwords.end(); ++iter) {
try {
return doProcessOnce(fn, *iter, empty, used_for_input);
return doProcessOnce(fn, *iter, empty, used_for_input, main_input);
} catch (QPDFExc& e) {
auto next = iter;
++next;
@ -2042,12 +1939,16 @@ QPDFJob::doProcess(
std::shared_ptr<QPDF>
QPDFJob::processFile(
char const* filename, char const* password, bool used_for_input)
char const* filename,
char const* password,
bool used_for_input,
bool main_input)
{
auto f1 = std::mem_fn<void(char const*, char const*)>(&QPDF::processFile);
auto fn =
std::bind(f1, std::placeholders::_1, filename, std::placeholders::_2);
return doProcess(fn, password, strcmp(filename, "") == 0, used_for_input);
return doProcess(
fn, password, strcmp(filename, "") == 0, used_for_input, main_input);
}
std::shared_ptr<QPDF>
@ -2056,7 +1957,7 @@ QPDFJob::processInputSource(
{
auto f1 = std::mem_fn(&QPDF::processInputSource);
auto fn = std::bind(f1, std::placeholders::_1, is, std::placeholders::_2);
return doProcess(fn, password, false, used_for_input);
return doProcess(fn, password, false, used_for_input, false);
}
void
@ -2067,7 +1968,8 @@ QPDFJob::validateUnderOverlay(QPDF& pdf, UnderOverlay* uo)
}
QPDFPageDocumentHelper main_pdh(pdf);
int main_npages = QIntC::to_int(main_pdh.getAllPages().size());
uo->pdf = processFile(uo->filename.c_str(), uo->password.get(), true);
uo->pdf =
processFile(uo->filename.c_str(), uo->password.get(), true, false);
QPDFPageDocumentHelper uo_pdh(*(uo->pdf));
int uo_npages = QIntC::to_int(uo_pdh.getAllPages().size());
try {
@ -2324,8 +2226,8 @@ QPDFJob::copyAttachments(QPDF& pdf)
cout << prefix << ": copying attachments from " << to_copy.path
<< std::endl;
});
auto other =
processFile(to_copy.path.c_str(), to_copy.password.c_str(), false);
auto other = processFile(
to_copy.path.c_str(), to_copy.password.c_str(), false, false);
QPDFEmbeddedFileDocumentHelper other_efdh(*other);
auto other_attachments = other_efdh.getEmbeddedFiles();
for (auto const& iter: other_attachments) {
@ -3176,6 +3078,7 @@ QPDFJob::setWriterOptions(QPDF& pdf, QPDFWriter& w)
std::shared_ptr<QPDF> encryption_pdf = processFile(
m->encryption_file.c_str(),
m->encryption_file_password.get(),
false,
false);
w.copyEncryptionParameters(*encryption_pdf);
}
@ -3332,10 +3235,13 @@ QPDFJob::writeOutfile(QPDF& pdf)
// goes out of scope.
m->outfilename = temp_out;
} else if (strcmp(m->outfilename.get(), "-") == 0) {
m->outfilename = 0;
m->outfilename = nullptr;
}
{
// Private scope so QPDFWriter will close the output file
if (this->m->json_output) {
writeJSON(pdf);
} else {
// QPDFWriter must have block scope so the output file will be
// closed after write() finishes.
QPDFWriter w(pdf, m->outfilename.get());
setWriterOptions(pdf, w);
w.write();
@ -3375,3 +3281,47 @@ QPDFJob::writeOutfile(QPDF& pdf)
}
}
}
void
QPDFJob::writeJSON(QPDF& pdf)
{
// File pipeline must have block scope so it will be closed
// after write.
std::shared_ptr<QUtil::FileCloser> fc;
std::shared_ptr<Pipeline> fp;
std::string file_prefix = this->m->json_stream_prefix;
if (m->outfilename.get()) {
QTC::TC("qpdf", "QPDFJob write json to file");
if (file_prefix.empty()) {
file_prefix = this->m->outfilename.get();
}
fc = std::make_shared<QUtil::FileCloser>(
QUtil::safe_fopen(this->m->outfilename.get(), "w"));
fp = std::make_shared<Pl_StdioFile>("json output", fc->f);
} else if (
(this->m->json_stream_data == qpdf_sj_file) && file_prefix.empty()) {
QTC::TC("qpdf", "QPDFJob need json-stream-prefix for stdout");
usage("please specify --json-stream-prefix since the input file "
"name is unknown");
} else {
QTC::TC("qpdf", "QPDFJob write json to stdout");
fp = std::make_shared<Pl_OStream>("json output", *this->m->cout);
}
std::set<std::string> json_objects;
if (this->m->json_objects.count("trailer")) {
json_objects.insert("trailer");
}
auto wanted = getWantedJSONObjects();
for (auto const& og: wanted) {
std::ostringstream s;
s << "obj:" << og.getObj() << " " << og.getGen() << " R";
json_objects.insert(s.str());
}
pdf.writeJSON(
this->m->json_output,
fp.get(),
this->m->decode_level,
this->m->json_stream_data,
file_prefix,
json_objects);
}

View File

@ -100,13 +100,6 @@ ArgParser::argReplaceInput()
this->gave_output = true;
}
void
ArgParser::argCreateFromJson(std::string const& arg)
{
c_main->createFromJson(arg);
this->gave_input = true;
}
void
ArgParser::argVersion()
{

View File

@ -27,8 +27,7 @@ QPDFJob::Config::emptyInput()
// Various places in QPDFJob.cc know that the empty string for
// infile means empty. We set it to something other than a
// null pointer as an indication that some input source has
// been specified. The --create-from-json option also sets
// infilename to empty. This approach means that passing "" as
// been specified. This approach means that passing "" as
// the argument to inputFile in job JSON, or equivalently
// using "" as a positional command-line argument would be the
// same as --empty. This probably isn't worth blocking or
@ -265,6 +264,7 @@ QPDFJob::Config::jsonObject(std::string const& parameter)
QPDFJob::Config*
QPDFJob::Config::jsonStreamData(std::string const& parameter)
{
o.m->json_stream_data_set = true;
if (parameter == "none") {
o.m->json_stream_data = qpdf_sj_none;
} else if (parameter == "inline") {
@ -286,22 +286,28 @@ QPDFJob::Config::jsonStreamPrefix(std::string const& parameter)
}
QPDFJob::Config*
QPDFJob::Config::toJson()
QPDFJob::Config::jsonInput()
{
json("latest");
jsonStreamData("inline");
jsonKey("qpdf");
decodeLevel("none");
o.m->json_input = true;
return this;
}
QPDFJob::Config*
QPDFJob::Config::createFromJson(std::string const& parameter)
QPDFJob::Config::jsonOutput(std::string const& parameter)
{
// See comments in emptyInput() about setting infilename to the
// empty string.
o.m->infilename = QUtil::make_shared_cstr("");
o.m->create_from_json = parameter;
std::string v = parameter;
if (parameter == "latest") {
v = "2";
}
if (v != "2") {
usage("only version 2 is supported for --json-output");
}
o.m->json_output = QUtil::string_to_int(v.c_str());
if (!o.m->json_stream_data_set) {
// No need to set json_stream_data_set -- that indicates
// explicit use of --json-stream-data.
o.m->json_stream_data = qpdf_sj_inline;
}
return this;
}

View File

@ -250,12 +250,6 @@ Handlers::setupEmpty()
addBare([this]() { c_main->emptyInput(); });
}
void
Handlers::setupCreateFromJson()
{
addParameter([this](char const* p) { c_main->createFromJson(p); });
}
void
Handlers::setupOutputFile()
{

View File

@ -2,6 +2,7 @@
#include <qpdf/FileInputSource.hh>
#include <qpdf/Pl_Base64.hh>
#include <qpdf/Pl_StdioFile.hh>
#include <qpdf/QIntC.hh>
#include <qpdf/QTC.hh>
#include <qpdf/QUtil.hh>
@ -13,7 +14,7 @@
// | st_initial
// { | -> st_top
// "qpdf": { | -> st_qpdf
// "qpdf-v2": { | -> st_qpdf
// "objects": { | -> st_objects
// "obj:1 0 R": { | -> st_object_top
// "value": { | -> st_object
@ -93,7 +94,6 @@ QPDF::JSONReactor::JSONReactor(
parse_error(false),
saw_qpdf(false),
saw_objects(false),
saw_json_version(false),
saw_pdf_version(false),
saw_trailer(false),
state(st_initial),
@ -154,21 +154,17 @@ QPDF::JSONReactor::containerEnd(JSON const& value)
QTC::TC("qpdf", "QPDF_json missing qpdf");
error(0, "\"qpdf\" object was not seen");
} else {
if (!this->saw_json_version) {
QTC::TC("qpdf", "QPDF_json missing json version");
error(0, "\"qpdf.jsonversion\" was not seen");
}
if (must_be_complete && !this->saw_pdf_version) {
QTC::TC("qpdf", "QPDF_json missing pdf version");
error(0, "\"qpdf.pdfversion\" was not seen");
error(0, "\"qpdf-v2.pdfversion\" was not seen");
}
if (!this->saw_objects) {
QTC::TC("qpdf", "QPDF_json missing objects");
error(0, "\"qpdf.objects\" was not seen");
error(0, "\"qpdf-v2.objects\" was not seen");
} else {
if (must_be_complete && !this->saw_trailer) {
QTC::TC("qpdf", "QPDF_json missing trailer");
error(0, "\"qpdf.objects.trailer\" was not seen");
error(0, "\"qpdf-v2.objects.trailer\" was not seen");
}
}
}
@ -279,7 +275,7 @@ QPDF::JSONReactor::dictionaryItem(std::string const& key, JSON const& value)
QTC::TC("qpdf", "QPDF_json ignoring in st_ignore");
// ignore
} else if (state == st_top) {
if (key == "qpdf") {
if (key == "qpdf-v2") {
this->saw_qpdf = true;
nestedState(key, value, st_qpdf);
} else {
@ -289,14 +285,7 @@ QPDF::JSONReactor::dictionaryItem(std::string const& key, JSON const& value)
next_state = st_ignore;
}
} else if (state == st_qpdf) {
if (key == "jsonversion") {
this->saw_json_version = true;
std::string v;
if (!(value.getNumber(v) && (v == "2"))) {
QTC::TC("qpdf", "QPDF_json bad json version");
error(value.getStart(), "only JSON version 2 is supported");
}
} else if (key == "pdfversion") {
if (key == "pdfversion") {
this->saw_pdf_version = true;
bool version_okay = false;
std::string v;
@ -567,3 +556,110 @@ QPDF::importJSON(std::shared_ptr<InputSource> is, bool must_be_complete)
// std::cout << oh.unparseResolved() << std::endl;
// }
}
void
QPDF::writeJSONStream(
int version,
Pipeline* p,
bool& first,
std::string const& key,
QPDFObjectHandle& obj,
qpdf_stream_decode_level_e decode_level,
qpdf_json_stream_data_e json_stream_data,
std::string const& file_prefix)
{
Pipeline* stream_p = nullptr;
FILE* f = nullptr;
std::shared_ptr<Pl_StdioFile> f_pl;
std::string filename;
if (json_stream_data == qpdf_sj_file) {
filename = file_prefix + "-" + QUtil::int_to_string(obj.getObjectID());
f = QUtil::safe_fopen(filename.c_str(), "wb");
f_pl = std::make_shared<Pl_StdioFile>("stream data", f);
stream_p = f_pl.get();
}
auto j = JSON::makeDictionary();
j.addDictionaryMember(
"stream",
obj.getStreamJSON(
version, json_stream_data, decode_level, stream_p, filename));
JSON::writeDictionaryItem(p, first, key, j, 2);
if (f) {
f_pl->finish();
f_pl = nullptr;
fclose(f);
}
}
void
QPDF::writeJSONObject(
int version,
Pipeline* p,
bool& first,
std::string const& key,
QPDFObjectHandle& obj)
{
auto j = JSON::makeDictionary();
j.addDictionaryMember("value", obj.getJSON(version, true));
JSON::writeDictionaryItem(p, first, key, j, 2);
}
void
QPDF::writeJSON(
int version,
Pipeline* p,
qpdf_stream_decode_level_e decode_level,
qpdf_json_stream_data_e json_stream_data,
std::string const& file_prefix,
std::set<std::string> wanted_objects)
{
if (version != 2) {
throw std::runtime_error(
"QPDF::writeJSON: only version 2 is supported");
}
bool first = true;
JSON::writeDictionaryOpen(p, first, 0);
JSON::writeDictionaryKey(p, first, "qpdf-v2", 0);
bool first_qpdf = true;
JSON::writeDictionaryOpen(p, first_qpdf, 1);
JSON::writeDictionaryItem(
p, first_qpdf, "pdfversion", JSON::makeString(getPDFVersion()), 1);
JSON::writeDictionaryItem(
p,
first_qpdf,
"maxobjectid",
JSON::makeInt(QIntC::to_longlong(getObjectCount())),
1);
JSON::writeDictionaryKey(p, first_qpdf, "objects", 1);
bool first_object = true;
JSON::writeDictionaryOpen(p, first_object, 2);
bool all_objects = wanted_objects.empty();
std::vector<QPDFObjectHandle> objects = getAllObjects();
for (auto& obj: objects) {
std::string key = "obj:" + obj.unparse();
if (all_objects || wanted_objects.count(key)) {
if (obj.isStream()) {
writeJSONStream(
version,
p,
first_object,
key,
obj,
decode_level,
json_stream_data,
file_prefix);
} else {
writeJSONObject(version, p, first_object, key, obj);
}
}
}
if (all_objects || wanted_objects.count("trailer")) {
auto trailer = getTrailer();
writeJSONObject(version, p, first_object, "trailer", trailer);
}
JSON::writeDictionaryClose(p, first_object, 2);
JSON::writeDictionaryClose(p, first_qpdf, 1);
JSON::writeDictionaryClose(p, first, 0);
*p << "\n";
}

View File

@ -28,7 +28,6 @@ void argOverlay();
void argPages();
void argReplaceInput();
void argUnderlay();
void argCreateFromJson(std::string const&);
void argPagesPositional(std::string const&);
void argPagesPassword(std::string const&);
void argEndPages();

View File

@ -798,10 +798,6 @@ depth in the JSON section of the manual. "version" may be a
specific version or "latest". Run qpdf --json-help for a
description of the generated JSON object.
)");
ap.addOptionHelp("--to-json", "json", "serialize to JSON", R"(Shortcut for options useful for serializing PDF to JSON:
--json=latest --json-stream-data=inline
--json-key=qpdf --decode-level=none
)");
ap.addOptionHelp("--json-help", "json", "show format of JSON output", R"(Describe the format of the JSON output by writing to standard
output a JSON object with the same keys and with values
containing descriptive text.
@ -836,11 +832,16 @@ name as the prefix for stream data files. Whatever is given here
will be appended with -nnn to create the name of the file that
will contain the data for the stream stream in object nnn.
)");
ap.addOptionHelp("--create-from-json", "json", "create PDF from qpdf JSON", R"(--create-from-json=qpdf-json-file
ap.addOptionHelp("--json-output", "json", "serialize to JSON", R"(--json-output=version
Create a PDF file from the prior output of qpdf --json. See the
"QPDF JSON Format" section of the manual for information about
how to use this option.
The output file will be qpdf JSON format at the given version.
Only version 2 is supported. See also --json-stream-data
and --json-stream-prefix
)");
ap.addOptionHelp("--json-input", "json", "input file is qpdf JSON", R"(Treat the input file as a JSON file in qpdf JSON format as
written by qpdf --json-output. See the "QPDF JSON Format"
section of the manual for information about how to use this
option.
)");
ap.addOptionHelp("--update-from-json", "json", "update a PDF from qpdf JSON", R"(--update-from-json=qpdf-json-file

View File

@ -19,9 +19,10 @@ static char const* decode_level_choices[] = {"none", "generalized", "specialized
static char const* object_streams_choices[] = {"disable", "preserve", "generate", 0};
static char const* remove_unref_choices[] = {"auto", "yes", "no", 0};
static char const* flatten_choices[] = {"all", "print", "screen", 0};
static char const* json_version_choices[] = {"1", "2", "latest", 0};
static char const* json_key_choices[] = {"acroform", "attachments", "encrypt", "objectinfo", "objects", "outlines", "pagelabels", "pages", "qpdf", 0};
static char const* json_key_choices[] = {"acroform", "attachments", "encrypt", "objectinfo", "objects", "outlines", "pagelabels", "pages", 0};
static char const* json_output_choices[] = {"2", "latest", 0};
static char const* json_stream_data_choices[] = {"none", "inline", "file", 0};
static char const* json_version_choices[] = {"1", "2", "latest", 0};
static char const* print128_choices[] = {"full", "low", "none", 0};
static char const* modify128_choices[] = {"all", "annotate", "form", "assembly", "none", 0};
@ -49,6 +50,7 @@ this->ap.addBare("flatten-rotation", [this](){c_main->flattenRotation();});
this->ap.addBare("generate-appearances", [this](){c_main->generateAppearances();});
this->ap.addBare("ignore-xref-streams", [this](){c_main->ignoreXrefStreams();});
this->ap.addBare("is-encrypted", [this](){c_main->isEncrypted();});
this->ap.addBare("json-input", [this](){c_main->jsonInput();});
this->ap.addBare("keep-inline-images", [this](){c_main->keepInlineImages();});
this->ap.addBare("linearize", [this](){c_main->linearize();});
this->ap.addBare("list-attachments", [this](){c_main->listAttachments();});
@ -79,7 +81,6 @@ this->ap.addBare("static-id", [this](){c_main->staticId();});
this->ap.addBare("suppress-password-recovery", [this](){c_main->suppressPasswordRecovery();});
this->ap.addBare("suppress-recovery", [this](){c_main->suppressRecovery();});
this->ap.addBare("test-json-schema", [this](){c_main->testJsonSchema();});
this->ap.addBare("to-json", [this](){c_main->toJson();});
this->ap.addBare("underlay", b(&ArgParser::argUnderlay));
this->ap.addBare("verbose", [this](){c_main->verbose();});
this->ap.addBare("warning-exit-0", [this](){c_main->warningExit0();});
@ -104,7 +105,6 @@ this->ap.addRequiredParameter("rotate", [this](std::string const& x){c_main->rot
this->ap.addRequiredParameter("show-attachment", [this](std::string const& x){c_main->showAttachment(x);}, "attachment");
this->ap.addRequiredParameter("show-object", [this](std::string const& x){c_main->showObject(x);}, "trailer");
this->ap.addRequiredParameter("json-stream-prefix", [this](std::string const& x){c_main->jsonStreamPrefix(x);}, "stream-file-prefix");
this->ap.addRequiredParameter("create-from-json", p(&ArgParser::argCreateFromJson), "qpdf-json file");
this->ap.addRequiredParameter("update-from-json", [this](std::string const& x){c_main->updateFromJson(x);}, "qpdf-json file");
this->ap.addOptionalParameter("collate", [this](std::string const& x){c_main->collate(x);});
this->ap.addOptionalParameter("split-pages", [this](std::string const& x){c_main->splitPages(x);});
@ -112,13 +112,14 @@ this->ap.addChoices("compress-streams", [this](std::string const& x){c_main->com
this->ap.addChoices("decode-level", [this](std::string const& x){c_main->decodeLevel(x);}, true, decode_level_choices);
this->ap.addChoices("flatten-annotations", [this](std::string const& x){c_main->flattenAnnotations(x);}, true, flatten_choices);
this->ap.addChoices("json-key", [this](std::string const& x){c_main->jsonKey(x);}, true, json_key_choices);
this->ap.addChoices("json-output", [this](std::string const& x){c_main->jsonOutput(x);}, true, json_output_choices);
this->ap.addChoices("json-stream-data", [this](std::string const& x){c_main->jsonStreamData(x);}, true, json_stream_data_choices);
this->ap.addChoices("keep-files-open", [this](std::string const& x){c_main->keepFilesOpen(x);}, true, yn_choices);
this->ap.addChoices("normalize-content", [this](std::string const& x){c_main->normalizeContent(x);}, true, yn_choices);
this->ap.addChoices("object-streams", [this](std::string const& x){c_main->objectStreams(x);}, true, object_streams_choices);
this->ap.addChoices("password-mode", [this](std::string const& x){c_main->passwordMode(x);}, true, password_mode_choices);
this->ap.addChoices("remove-unreferenced-resources", [this](std::string const& x){c_main->removeUnreferencedResources(x);}, true, remove_unref_choices);
this->ap.addChoices("stream-data", [this](std::string const& x){c_main->streamData(x);}, true, stream_data_choices);
this->ap.addChoices("json-stream-data", [this](std::string const& x){c_main->jsonStreamData(x);}, true, json_stream_data_choices);
this->ap.addChoices("json", [this](std::string const& x){c_main->json(x);}, false, json_version_choices);
this->ap.registerOptionTable("pages", b(&ArgParser::argEndPages));
this->ap.addPositional(p(&ArgParser::argPagesPositional));

View File

@ -8,7 +8,6 @@
void setupInputFile();
void setupPassword();
void setupEmpty();
void setupCreateFromJson();
void setupOutputFile();
void setupReplaceInput();
void beginEncrypt(JSON);

View File

@ -12,9 +12,10 @@ static char const* decode_level_choices[] = {"none", "generalized", "specialized
static char const* object_streams_choices[] = {"disable", "preserve", "generate", 0};
static char const* remove_unref_choices[] = {"auto", "yes", "no", 0};
static char const* flatten_choices[] = {"all", "print", "screen", 0};
static char const* json_version_choices[] = {"1", "2", "latest", 0};
static char const* json_key_choices[] = {"acroform", "attachments", "encrypt", "objectinfo", "objects", "outlines", "pagelabels", "pages", "qpdf", 0};
static char const* json_key_choices[] = {"acroform", "attachments", "encrypt", "objectinfo", "objects", "outlines", "pagelabels", "pages", 0};
static char const* json_output_choices[] = {"2", "latest", 0};
static char const* json_stream_data_choices[] = {"none", "inline", "file", 0};
static char const* json_version_choices[] = {"1", "2", "latest", 0};
static char const* print128_choices[] = {"full", "low", "none", 0};
static char const* modify128_choices[] = {"all", "annotate", "form", "assembly", "none", 0};
@ -30,9 +31,9 @@ popHandler(); // key: passwordFile
pushKey("empty");
setupEmpty();
popHandler(); // key: empty
pushKey("createFromJson");
setupCreateFromJson();
popHandler(); // key: createFromJson
pushKey("jsonInput");
addBare([this]() { c_main->jsonInput(); });
popHandler(); // key: jsonInput
pushKey("outputFile");
setupOutputFile();
popHandler(); // key: outputFile
@ -105,6 +106,9 @@ popHandler(); // key: progress
pushKey("splitPages");
addParameter([this](std::string const& p) { c_main->splitPages(p); });
popHandler(); // key: splitPages
pushKey("jsonOutput");
addChoices(json_output_choices, true, [this](std::string const& p) { c_main->jsonOutput(p); });
popHandler(); // key: jsonOutput
pushKey("encrypt");
beginDict(bindJSON(&Handlers::beginEncrypt), bindBare(&Handlers::endEncrypt)); // .encrypt
pushKey("userPassword");
@ -262,9 +266,6 @@ popHandler(); // key: jsonStreamData
pushKey("jsonStreamPrefix");
addParameter([this](std::string const& p) { c_main->jsonStreamPrefix(p); });
popHandler(); // key: jsonStreamPrefix
pushKey("toJson");
addBare([this]() { c_main->toJson(); });
popHandler(); // key: toJson
pushKey("updateFromJson");
addParameter([this](std::string const& p) { c_main->updateFromJson(p); });
popHandler(); // key: updateFromJson

View File

@ -3,7 +3,7 @@ static constexpr char const* JOB_SCHEMA_DATA = R"({
"password": "password for encrypted file",
"passwordFile": "read password from a file",
"empty": "use empty file as input",
"createFromJson": "create PDF from qpdf JSON",
"jsonInput": "input file is qpdf JSON",
"outputFile": "output filename",
"replaceInput": "overwrite input with output",
"qdf": "enable viewing PDF code in a text editor",
@ -28,6 +28,7 @@ static constexpr char const* JOB_SCHEMA_DATA = R"({
"forceVersion": "set output PDF version",
"progress": "show progress when writing",
"splitPages": "write pages to separate files",
"jsonOutput": "serialize to JSON",
"encrypt": {
"userPassword": "user password",
"ownerPassword": "owner password",
@ -87,7 +88,6 @@ static constexpr char const* JOB_SCHEMA_DATA = R"({
],
"jsonStreamData": "how to handle streams in json output",
"jsonStreamPrefix": "prefix for json stream data files",
"toJson": "serialize to JSON",
"updateFromJson": "update a PDF from qpdf JSON",
"allowWeakCrypto": "allow insecure cryptographic algorithms",
"keepFilesOpen": "manage keeping multiple files open",

View File

@ -3174,20 +3174,6 @@ Related Options
:qpdf:ref:`--json-help` option to get a description of the JSON
object.
.. qpdf:option:: --to-json
.. help: serialize to JSON
Shortcut for options useful for serializing PDF to JSON:
--json=latest --json-stream-data=inline
--json-key=qpdf --decode-level=none
This option is a shorthand for
``--json=latest --json-stream-data=inline --json-key=qpdf --decode-level=none``.
These are good options for serializing a PDF to JSON in manner that
allows qpdf to read it back in. You can override any of these
options by specifying other options after them.
.. qpdf:option:: --json-help
.. help: show format of JSON output
@ -3253,7 +3239,8 @@ Related Options
inline (base64-encoded) or written to a file. If ``file`` is
chosen, the file will be the name of the input file appended with
:samp:`-{nnn}` where :samp:`{nnn}` is the object number. The prefix
can be overridden with :qpdf:ref:`--json-stream-prefix`.
can be overridden with :qpdf:ref:`--json-stream-prefix`. This
option only applies when used with :qpdf:ref:`--json-output`.
.. qpdf:option:: --json-stream-prefix=file-prefix
@ -3268,20 +3255,34 @@ Related Options
``file``, override the input file name as the prefix for stream
data files. Whatever is given here will be appended with
:samp:`-{nnn}` to create the name of the file that will contain the
data for the stream stream in object :samp:`{nnn}`.
data for the stream stream in object :samp:`{nnn}`. This
option only applies when used with :qpdf:ref:`--json-output`.
.. qpdf:option:: --create-from-json=qpdf-json-file
.. qpdf:option:: --json-output=version
.. help: create PDF from qpdf JSON
.. help: serialize to JSON
Create a PDF file from the prior output of qpdf --json. See the
"QPDF JSON Format" section of the manual for information about
how to use this option.
The output file will be qpdf JSON format at the given version.
Only version 2 is supported. See also --json-stream-data
and --json-stream-prefix
This option creates a PDF file from the previous output of ``qpdf
--json`` that includes stream data and information about all
objects. For information about converting between PDF and JSON,
please see :ref:`qpdf-json`.
The output file will be qpdf JSON format at the given version. Only
version 2 is supported. See also :qpdf:ref:`--json-stream-data` and
:qpdf:ref:`--json-stream-prefix`.
.. qpdf:option:: --json-input
.. help: input file is qpdf JSON
Treat the input file as a JSON file in qpdf JSON format as
written by qpdf --json-output. See the "QPDF JSON Format"
section of the manual for information about how to use this
option.
Treat the input file as a JSON file in qpdf JSON format as written
by ``qpdf --json-output``. The input file must be complete and
include all stream data. For information about converting between
PDF and JSON, please see :ref:`qpdf-json`.
.. qpdf:option:: --update-from-json=qpdf-json-file

View File

@ -651,10 +651,8 @@ QPDFJob json encrypt missing password 0
QPDFJob json pages no file 0
qpdf-c called qpdf_empty_pdf 0
QPDF_json missing qpdf 0
QPDF_json missing json version 0
QPDF_json missing pdf version 0
QPDF_json top-level scalar 0
QPDF_json bad json version 0
QPDF_json bad pdf version 0
QPDF_json top-level array 0
QPDF_json bad object key 0
@ -668,3 +666,6 @@ QPDF_json data datafile both or neither 0
QPDF_json stream no dict 0
QPDF_json trailer no value 0
QPDF_json value stream both or neither 0
QPDFJob need json-stream-prefix for stdout 0
QPDFJob write json to stdout 0
QPDFJob write json to file 0

View File

@ -26,16 +26,16 @@ my @json_files = (
['field-types', ['--show-encryption-key']],
['image-streams', ['--decode-level=all']],
['image-streams', ['--decode-level=specialized']],
['page-labels-and-outlines', ['--json-key=qpdf']],
['page-labels-and-outlines', ['--json-key=objects']],
['page-labels-and-outlines', ['--json-key=pages']],
['page-labels-and-outlines', ['--json-key=pagelabels']],
['page-labels-and-outlines', ['--json-key=outlines']],
['page-labels-and-outlines',
['--json-key=outlines', '--json-key=pages']],
['page-labels-and-outlines',
['--json-key=qpdf', '--json-object=trailer']],
['--json-key=objects', '--json-object=trailer']],
['page-labels-and-outlines',
['--json-key=qpdf', '--json-object=trailer', '--json-object=2 0 R']],
['--json-key=objects', '--json-object=trailer', '--json-object=2 0 R']],
['field-types', ['--json-key=acroform']],
['need-appearances', ['--json-key=acroform']],
['V4-aes', ['--json-key=encrypt']],
@ -46,27 +46,18 @@ foreach my $d (@json_files)
{
my ($file, $xargs) = @$d;
my $out = "json-$file";
my @v1_xargs = ();
foreach my $x (@$xargs)
{
my $y = $x;
$y =~ s/^.*=//;
$y =~ s/\s.*//;
$out .= "-$y";
if ($x eq '--json-key=qpdf')
{
push(@v1_xargs, '--json-key=objects');
}
else
{
push(@v1_xargs, $x);
}
}
my $in = "$file.pdf";
$td->runtest("json v1 $out",
{$td->COMMAND =>
['qpdf', '--json=1', '--test-json-schema',
@v1_xargs, $in]},
@$xargs, $in]},
{$td->FILE => "$out-v1.out", $td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
$td->runtest("json v2 $out",
@ -78,8 +69,8 @@ foreach my $d (@json_files)
$td->runtest("bad json stream data (inline)",
{$td->COMMAND =>
"qpdf --json=2 --test-json-schema" .
" --json-stream-data=inline bad-data.pdf > a.json"},
"qpdf --json-output=2" .
" --json-stream-data=inline bad-data.pdf a.json"},
{$td->FILE => "bad-data-json.out", $td->EXIT_STATUS => 3},
$td->NORMALIZE_NEWLINES);
$td->runtest("check (inline)",
@ -88,9 +79,9 @@ $td->runtest("check (inline)",
$td->NORMALIZE_NEWLINES);
$td->runtest("bad json stream data (file)",
{$td->COMMAND =>
"qpdf --json=2 --test-json-schema" .
"qpdf --json-output=2 " .
" --json-stream-data=file --json-stream-prefix=auto" .
" bad-data.pdf > a.json"},
" bad-data.pdf a.json"},
{$td->FILE => "bad-data-json.out", $td->EXIT_STATUS => 3},
$td->NORMALIZE_NEWLINES);
$td->runtest("check (file)",
@ -110,7 +101,7 @@ foreach my $l (qw(none generalized specialized all))
# library is use.
$td->runtest("image-streams json inline: $l",
{$td->COMMAND =>
"qpdf image-streams-small.pdf --json=2" .
"qpdf image-streams-small.pdf - --json-output=2" .
" --decode-level=$l --json-stream-data=inline"},
{$td->FILE => "json-image-streams-$l-inline-v2.out",
$td->EXIT_STATUS => 0},
@ -118,9 +109,9 @@ foreach my $l (qw(none generalized specialized all))
}
$td->runtest("image-streams json file: $l",
{$td->COMMAND =>
"qpdf image-streams-small.pdf --json=2" .
"qpdf image-streams-small.pdf - --json-output=2" .
" --decode-level=$l --json-stream-data=file" .
" --json-stream-prefix=auto --json-key=qpdf" .
" --json-stream-prefix=auto" .
" --json-object=12 --json-object=16 --json-object=18"},
{$td->FILE => "json-image-streams-$l-file-v2.out",
$td->EXIT_STATUS => 0},
@ -159,10 +150,12 @@ foreach my $l (qw(none generalized specialized all))
}
}
$td->runtest("use --to-json option",
{$td->COMMAND => "qpdf --to-json image-streams-small.pdf"},
{$td->FILE => "image-streams-small-to-json.out",
$td->EXIT_STATUS => 0},
$td->runtest("file to stdout without prefix",
{$td->COMMAND =>
"qpdf image-streams-small.pdf - --json-output=2" .
" -json-stream-data=file"},
{$td->FILE => "file-stdout-needs-prefix.out",
$td->EXIT_STATUS => 2},
$td->NORMALIZE_NEWLINES);
cleanup();

View File

@ -50,19 +50,19 @@ $td->runtest("show direct pages",
# Json mode for direct and duplicated pages illustrates that the
# "objects" section the original objects before correction when
# "pages" is not output but after correct when it is.# numbers.
# "pages" is not output but after correct when it is.
foreach my $f (qw(page_api_2 direct-pages))
{
$td->runtest("json for $f (objects only)",
{$td->COMMAND =>
"qpdf --json=latest $f.pdf" .
" --json-key=qpdf"},
" --json-key=objects"},
{$td->FILE => "$f-json-objects.out", $td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
$td->runtest("json for $f (with pages)",
{$td->COMMAND =>
"qpdf --json=latest $f.pdf" .
" --json-key=qpdf --json-key=pages"},
" --json-key=objects --json-key=pages"},
{$td->FILE => "$f-json-pages.out", $td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
}

View File

@ -1,3 +1,3 @@
WARNING: bad-data.pdf (offset 319): error decoding stream data for object 4 0: LZWDecoder: bad code received
WARNING: bad-data.pdf (offset 319): stream will be re-processed without filtering to avoid data loss
qpdf: operation succeeded with warnings
qpdf: operation succeeded with warnings; resulting file may have some problems

View File

@ -3,93 +3,88 @@
"parameters": {
"decodelevel": "generalized"
},
"qpdf": {
"jsonversion": 2,
"pdfversion": "1.3",
"maxobjectid": 6,
"objects": {
"obj:1 0 R": {
"value": {
"/Pages": "2 0 R",
"/Type": "/Catalog"
}
},
"obj:2 0 R": {
"value": {
"/Count": 2,
"/Kids": [
{
"/Contents": "3 0 R",
"/MediaBox": [
0,
0,
612,
792
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "5 0 R"
},
"/ProcSet": "6 0 R"
"objects": {
"obj:1 0 R": {
"value": {
"/Pages": "2 0 R",
"/Type": "/Catalog"
}
},
"obj:2 0 R": {
"value": {
"/Count": 2,
"/Kids": [
{
"/Contents": "3 0 R",
"/MediaBox": [
0,
0,
612,
792
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "5 0 R"
},
"/Type": "/Page"
"/ProcSet": "6 0 R"
},
{
"/Contents": "3 0 R",
"/MediaBox": [
0,
0,
612,
792
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "5 0 R"
},
"/ProcSet": "6 0 R"
"/Type": "/Page"
},
{
"/Contents": "3 0 R",
"/MediaBox": [
0,
0,
612,
792
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "5 0 R"
},
"/Type": "/Page"
}
],
"/Type": "/Pages"
}
},
"obj:3 0 R": {
"stream": {
"dict": {
"/Length": "4 0 R"
"/ProcSet": "6 0 R"
},
"/Type": "/Page"
}
],
"/Type": "/Pages"
}
},
"obj:3 0 R": {
"stream": {
"dict": {
"/Length": "4 0 R"
}
},
"obj:4 0 R": {
"value": 44
},
"obj:5 0 R": {
"value": {
"/BaseFont": "/Helvetica",
"/Encoding": "/WinAnsiEncoding",
"/Name": "/F1",
"/Subtype": "/Type1",
"/Type": "/Font"
}
},
"obj:6 0 R": {
"value": [
"/PDF",
"/Text"
]
},
"trailer": {
"value": {
"/ID": [
"b:1323a5937c577a66735583a93698ce3c",
"b:372cbf44f6db88ab60d9263c0f0bd26a"
],
"/Root": "1 0 R",
"/Size": 7
}
}
},
"obj:4 0 R": {
"value": 44
},
"obj:5 0 R": {
"value": {
"/BaseFont": "/Helvetica",
"/Encoding": "/WinAnsiEncoding",
"/Name": "/F1",
"/Subtype": "/Type1",
"/Type": "/Font"
}
},
"obj:6 0 R": {
"value": [
"/PDF",
"/Text"
]
},
"trailer": {
"value": {
"/ID": [
"b:1323a5937c577a66735583a93698ce3c",
"b:372cbf44f6db88ab60d9263c0f0bd26a"
],
"/Root": "1 0 R",
"/Size": 7
}
}
}

View File

@ -25,99 +25,94 @@
"pageposfrom1": 2
}
],
"qpdf": {
"jsonversion": 2,
"pdfversion": "1.3",
"maxobjectid": 8,
"objects": {
"obj:1 0 R": {
"value": {
"/Pages": "2 0 R",
"/Type": "/Catalog"
"objects": {
"obj:1 0 R": {
"value": {
"/Pages": "2 0 R",
"/Type": "/Catalog"
}
},
"obj:2 0 R": {
"value": {
"/Count": 2,
"/Kids": [
"7 0 R",
"8 0 R"
],
"/Type": "/Pages"
}
},
"obj:3 0 R": {
"stream": {
"dict": {
"/Length": "4 0 R"
}
},
"obj:2 0 R": {
"value": {
"/Count": 2,
"/Kids": [
"7 0 R",
"8 0 R"
],
"/Type": "/Pages"
}
},
"obj:3 0 R": {
"stream": {
"dict": {
"/Length": "4 0 R"
}
}
},
"obj:4 0 R": {
"value": 44
},
"obj:5 0 R": {
"value": {
"/BaseFont": "/Helvetica",
"/Encoding": "/WinAnsiEncoding",
"/Name": "/F1",
"/Subtype": "/Type1",
"/Type": "/Font"
}
},
"obj:6 0 R": {
"value": [
"/PDF",
"/Text"
]
},
"obj:7 0 R": {
"value": {
"/Contents": "3 0 R",
"/MediaBox": [
0,
0,
612,
792
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "5 0 R"
},
"/ProcSet": "6 0 R"
}
},
"obj:4 0 R": {
"value": 44
},
"obj:5 0 R": {
"value": {
"/BaseFont": "/Helvetica",
"/Encoding": "/WinAnsiEncoding",
"/Name": "/F1",
"/Subtype": "/Type1",
"/Type": "/Font"
}
},
"obj:6 0 R": {
"value": [
"/PDF",
"/Text"
]
},
"obj:7 0 R": {
"value": {
"/Contents": "3 0 R",
"/MediaBox": [
0,
0,
612,
792
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "5 0 R"
},
"/Type": "/Page"
}
},
"obj:8 0 R": {
"value": {
"/Contents": "3 0 R",
"/MediaBox": [
0,
0,
612,
792
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "5 0 R"
},
"/ProcSet": "6 0 R"
"/ProcSet": "6 0 R"
},
"/Type": "/Page"
}
},
"obj:8 0 R": {
"value": {
"/Contents": "3 0 R",
"/MediaBox": [
0,
0,
612,
792
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "5 0 R"
},
"/Type": "/Page"
}
},
"trailer": {
"value": {
"/ID": [
"b:1323a5937c577a66735583a93698ce3c",
"b:372cbf44f6db88ab60d9263c0f0bd26a"
],
"/Root": "1 0 R",
"/Size": 7
}
"/ProcSet": "6 0 R"
},
"/Type": "/Page"
}
},
"trailer": {
"value": {
"/ID": [
"b:1323a5937c577a66735583a93698ce3c",
"b:372cbf44f6db88ab60d9263c0f0bd26a"
],
"/Root": "1 0 R",
"/Size": 7
}
}
}

View File

@ -0,0 +1,9 @@
qpdf: please specify --json-stream-prefix since the input file name is unknown
For help:
qpdf --help=usage usage information
qpdf --help=topic help on a topic
qpdf --help=--option help on an option
qpdf --help general help and a topic list

File diff suppressed because one or more lines are too long

View File

@ -1,57 +1,5 @@
{
"version": 2,
"parameters": {
"decodelevel": "generalized"
},
"pages": [
{
"contents": [
"4 0 R"
],
"images": [],
"label": null,
"object": "3 0 R",
"outlines": [],
"pageposfrom1": 1
}
],
"pagelabels": [],
"acroform": {
"fields": [],
"hasacroform": false,
"needappearances": false
},
"attachments": {},
"encrypt": {
"capabilities": {
"accessibility": true,
"extract": true,
"modify": true,
"modifyannotations": true,
"modifyassembly": true,
"modifyforms": true,
"modifyother": true,
"printhigh": true,
"printlow": true
},
"encrypted": false,
"ownerpasswordmatched": false,
"parameters": {
"P": 0,
"R": 0,
"V": 0,
"bits": 0,
"filemethod": "none",
"key": null,
"method": "none",
"streammethod": "none",
"stringmethod": "none"
},
"userpasswordmatched": false
},
"outlines": [],
"qpdf": {
"jsonversion": 2,
"qpdf-v2": {
"pdfversion": "1.3",
"maxobjectid": 6,
"objects": {

View File

@ -1,57 +1,5 @@
{
"version": 2,
"parameters": {
"decodelevel": "generalized"
},
"pages": [
{
"contents": [
"4 0 R"
],
"images": [],
"label": null,
"object": "3 0 R",
"outlines": [],
"pageposfrom1": 1
}
],
"pagelabels": [],
"acroform": {
"fields": [],
"hasacroform": false,
"needappearances": false
},
"attachments": {},
"encrypt": {
"capabilities": {
"accessibility": true,
"extract": true,
"modify": true,
"modifyannotations": true,
"modifyassembly": true,
"modifyforms": true,
"modifyother": true,
"printhigh": true,
"printlow": true
},
"encrypted": false,
"ownerpasswordmatched": false,
"parameters": {
"P": 0,
"R": 0,
"V": 0,
"bits": 0,
"filemethod": "none",
"key": null,
"method": "none",
"streammethod": "none",
"stringmethod": "none"
},
"userpasswordmatched": false
},
"outlines": [],
"qpdf": {
"jsonversion": 2,
"qpdf-v2": {
"pdfversion": "1.3",
"maxobjectid": 6,
"objects": {

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,5 @@
{
"version": 2,
"parameters": {
"decodelevel": "all"
},
"qpdf": {
"jsonversion": 2,
"qpdf-v2": {
"pdfversion": "1.3",
"maxobjectid": 30,
"objects": {

View File

@ -274,473 +274,468 @@
"userpasswordmatched": false
},
"outlines": [],
"qpdf": {
"jsonversion": 2,
"pdfversion": "1.3",
"maxobjectid": 30,
"objects": {
"obj:1 0 R": {
"value": {
"/Pages": "2 0 R",
"/Type": "/Catalog"
}
},
"obj:2 0 R": {
"value": {
"/Count": 9,
"/Kids": [
"3 0 R",
"4 0 R",
"5 0 R",
"6 0 R",
"7 0 R",
"8 0 R",
"9 0 R",
"10 0 R",
"11 0 R"
],
"/Type": "/Pages"
}
},
"obj:3 0 R": {
"value": {
"/Contents": "12 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "14 0 R"
}
"objects": {
"obj:1 0 R": {
"value": {
"/Pages": "2 0 R",
"/Type": "/Catalog"
}
},
"obj:2 0 R": {
"value": {
"/Count": 9,
"/Kids": [
"3 0 R",
"4 0 R",
"5 0 R",
"6 0 R",
"7 0 R",
"8 0 R",
"9 0 R",
"10 0 R",
"11 0 R"
],
"/Type": "/Pages"
}
},
"obj:3 0 R": {
"value": {
"/Contents": "12 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:4 0 R": {
"value": {
"/Contents": "15 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "16 0 R"
}
"/XObject": {
"/Im1": "14 0 R"
}
},
"/Type": "/Page"
}
},
"obj:4 0 R": {
"value": {
"/Contents": "15 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:5 0 R": {
"value": {
"/Contents": "17 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "18 0 R"
}
"/XObject": {
"/Im1": "16 0 R"
}
},
"/Type": "/Page"
}
},
"obj:5 0 R": {
"value": {
"/Contents": "17 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:6 0 R": {
"value": {
"/Contents": "19 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "20 0 R"
}
"/XObject": {
"/Im1": "18 0 R"
}
},
"/Type": "/Page"
}
},
"obj:6 0 R": {
"value": {
"/Contents": "19 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:7 0 R": {
"value": {
"/Contents": "21 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "22 0 R"
}
"/XObject": {
"/Im1": "20 0 R"
}
},
"/Type": "/Page"
}
},
"obj:7 0 R": {
"value": {
"/Contents": "21 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:8 0 R": {
"value": {
"/Contents": "23 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "24 0 R"
}
"/XObject": {
"/Im1": "22 0 R"
}
},
"/Type": "/Page"
}
},
"obj:8 0 R": {
"value": {
"/Contents": "23 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:9 0 R": {
"value": {
"/Contents": "25 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "26 0 R"
}
"/XObject": {
"/Im1": "24 0 R"
}
},
"/Type": "/Page"
}
},
"obj:9 0 R": {
"value": {
"/Contents": "25 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:10 0 R": {
"value": {
"/Contents": "27 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "28 0 R"
}
"/XObject": {
"/Im1": "26 0 R"
}
},
"/Type": "/Page"
}
},
"obj:10 0 R": {
"value": {
"/Contents": "27 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:11 0 R": {
"value": {
"/Contents": "29 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "30 0 R"
}
"/XObject": {
"/Im1": "28 0 R"
}
},
"/Type": "/Page"
}
},
"obj:11 0 R": {
"value": {
"/Contents": "29 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:12 0 R": {
"stream": {
"dict": {
"/Length": 95
}
}
},
"obj:13 0 R": {
"value": {
"/BaseFont": "/Helvetica",
"/Encoding": "/WinAnsiEncoding",
"/Name": "/F1",
"/Subtype": "/Type1",
"/Type": "/Font"
}
},
"obj:14 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceCMYK",
"/Height": 480,
"/Length": 768000,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:15 0 R": {
"stream": {
"dict": {
"/Length": 101
}
}
},
"obj:16 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceCMYK",
"/Filter": "/DCTDecode",
"/Height": 480,
"/Length": 9364,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:17 0 R": {
"stream": {
"dict": {
"/Length": 107
}
}
},
"obj:18 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceCMYK",
"/Filter": "/RunLengthDecode",
"/Height": 480,
"/Length": 768998,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:19 0 R": {
"stream": {
"dict": {
"/Length": 94
}
}
},
"obj:20 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceRGB",
"/Height": 480,
"/Length": 576000,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:21 0 R": {
"stream": {
"dict": {
"/Length": 100
}
}
},
"obj:22 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceRGB",
"/Filter": "/DCTDecode",
"/Height": 480,
"/Length": 3650,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:23 0 R": {
"stream": {
"dict": {
"/Length": 106
}
}
},
"obj:24 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceRGB",
"/Filter": "/RunLengthDecode",
"/Height": 480,
"/Length": 641497,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:25 0 R": {
"stream": {
"dict": {
"/Length": 95
}
}
},
"obj:26 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceGray",
"/Height": 480,
"/Length": 192000,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:27 0 R": {
"stream": {
"dict": {
"/Length": 101
}
}
},
"obj:28 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceGray",
"/Filter": "/DCTDecode",
"/Height": 480,
"/Length": 2587,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:29 0 R": {
"stream": {
"dict": {
"/Length": 107
}
}
},
"obj:30 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceGray",
"/Filter": "/RunLengthDecode",
"/Height": 480,
"/Length": 3001,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"trailer": {
"value": {
"/ID": [
"b:53b6958e9beef00ea2ac077d5f2912b6",
"b:272b8d8ba45632ab505020e7606d221d"
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Root": "1 0 R",
"/Size": 31
"/XObject": {
"/Im1": "30 0 R"
}
},
"/Type": "/Page"
}
},
"obj:12 0 R": {
"stream": {
"dict": {
"/Length": 95
}
}
},
"obj:13 0 R": {
"value": {
"/BaseFont": "/Helvetica",
"/Encoding": "/WinAnsiEncoding",
"/Name": "/F1",
"/Subtype": "/Type1",
"/Type": "/Font"
}
},
"obj:14 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceCMYK",
"/Height": 480,
"/Length": 768000,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:15 0 R": {
"stream": {
"dict": {
"/Length": 101
}
}
},
"obj:16 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceCMYK",
"/Filter": "/DCTDecode",
"/Height": 480,
"/Length": 9364,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:17 0 R": {
"stream": {
"dict": {
"/Length": 107
}
}
},
"obj:18 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceCMYK",
"/Filter": "/RunLengthDecode",
"/Height": 480,
"/Length": 768998,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:19 0 R": {
"stream": {
"dict": {
"/Length": 94
}
}
},
"obj:20 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceRGB",
"/Height": 480,
"/Length": 576000,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:21 0 R": {
"stream": {
"dict": {
"/Length": 100
}
}
},
"obj:22 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceRGB",
"/Filter": "/DCTDecode",
"/Height": 480,
"/Length": 3650,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:23 0 R": {
"stream": {
"dict": {
"/Length": 106
}
}
},
"obj:24 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceRGB",
"/Filter": "/RunLengthDecode",
"/Height": 480,
"/Length": 641497,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:25 0 R": {
"stream": {
"dict": {
"/Length": 95
}
}
},
"obj:26 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceGray",
"/Height": 480,
"/Length": 192000,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:27 0 R": {
"stream": {
"dict": {
"/Length": 101
}
}
},
"obj:28 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceGray",
"/Filter": "/DCTDecode",
"/Height": 480,
"/Length": 2587,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:29 0 R": {
"stream": {
"dict": {
"/Length": 107
}
}
},
"obj:30 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceGray",
"/Filter": "/RunLengthDecode",
"/Height": 480,
"/Length": 3001,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"trailer": {
"value": {
"/ID": [
"b:53b6958e9beef00ea2ac077d5f2912b6",
"b:272b8d8ba45632ab505020e7606d221d"
],
"/Root": "1 0 R",
"/Size": 31
}
}
}
}

View File

@ -1,10 +1,5 @@
{
"version": 2,
"parameters": {
"decodelevel": "generalized"
},
"qpdf": {
"jsonversion": 2,
"qpdf-v2": {
"pdfversion": "1.3",
"maxobjectid": 30,
"objects": {

View File

@ -1,281 +1,5 @@
{
"version": 2,
"parameters": {
"decodelevel": "generalized"
},
"pages": [
{
"contents": [
"12 0 R"
],
"images": [
{
"bitspercomponent": 8,
"colorspace": "/DeviceCMYK",
"decodeparms": [
null
],
"filter": [
"/FlateDecode"
],
"filterable": true,
"height": 48,
"name": "/Im1",
"object": "14 0 R",
"width": 40
}
],
"label": null,
"object": "3 0 R",
"outlines": [],
"pageposfrom1": 1
},
{
"contents": [
"15 0 R"
],
"images": [
{
"bitspercomponent": 8,
"colorspace": "/DeviceCMYK",
"decodeparms": [
null
],
"filter": [
"/DCTDecode"
],
"filterable": false,
"height": 48,
"name": "/Im1",
"object": "16 0 R",
"width": 40
}
],
"label": null,
"object": "4 0 R",
"outlines": [],
"pageposfrom1": 2
},
{
"contents": [
"17 0 R"
],
"images": [
{
"bitspercomponent": 8,
"colorspace": "/DeviceCMYK",
"decodeparms": [
null
],
"filter": [
"/RunLengthDecode"
],
"filterable": false,
"height": 48,
"name": "/Im1",
"object": "18 0 R",
"width": 40
}
],
"label": null,
"object": "5 0 R",
"outlines": [],
"pageposfrom1": 3
},
{
"contents": [
"19 0 R"
],
"images": [
{
"bitspercomponent": 8,
"colorspace": "/DeviceRGB",
"decodeparms": [
null
],
"filter": [
"/FlateDecode"
],
"filterable": true,
"height": 48,
"name": "/Im1",
"object": "20 0 R",
"width": 40
}
],
"label": null,
"object": "6 0 R",
"outlines": [],
"pageposfrom1": 4
},
{
"contents": [
"21 0 R"
],
"images": [
{
"bitspercomponent": 8,
"colorspace": "/DeviceRGB",
"decodeparms": [
null
],
"filter": [
"/DCTDecode"
],
"filterable": false,
"height": 48,
"name": "/Im1",
"object": "22 0 R",
"width": 40
}
],
"label": null,
"object": "7 0 R",
"outlines": [],
"pageposfrom1": 5
},
{
"contents": [
"23 0 R"
],
"images": [
{
"bitspercomponent": 8,
"colorspace": "/DeviceRGB",
"decodeparms": [
null
],
"filter": [
"/RunLengthDecode"
],
"filterable": false,
"height": 48,
"name": "/Im1",
"object": "24 0 R",
"width": 40
}
],
"label": null,
"object": "8 0 R",
"outlines": [],
"pageposfrom1": 6
},
{
"contents": [
"25 0 R"
],
"images": [
{
"bitspercomponent": 8,
"colorspace": "/DeviceGray",
"decodeparms": [
null
],
"filter": [
"/FlateDecode"
],
"filterable": true,
"height": 48,
"name": "/Im1",
"object": "26 0 R",
"width": 40
}
],
"label": null,
"object": "9 0 R",
"outlines": [],
"pageposfrom1": 7
},
{
"contents": [
"27 0 R"
],
"images": [
{
"bitspercomponent": 8,
"colorspace": "/DeviceGray",
"decodeparms": [
null
],
"filter": [
"/DCTDecode"
],
"filterable": false,
"height": 48,
"name": "/Im1",
"object": "28 0 R",
"width": 40
}
],
"label": null,
"object": "10 0 R",
"outlines": [],
"pageposfrom1": 8
},
{
"contents": [
"29 0 R"
],
"images": [
{
"bitspercomponent": 8,
"colorspace": "/DeviceGray",
"decodeparms": [
null
],
"filter": [
"/RunLengthDecode"
],
"filterable": false,
"height": 48,
"name": "/Im1",
"object": "30 0 R",
"width": 40
}
],
"label": null,
"object": "11 0 R",
"outlines": [],
"pageposfrom1": 9
}
],
"pagelabels": [],
"acroform": {
"fields": [],
"hasacroform": false,
"needappearances": false
},
"attachments": {},
"encrypt": {
"capabilities": {
"accessibility": true,
"extract": true,
"modify": true,
"modifyannotations": true,
"modifyassembly": true,
"modifyforms": true,
"modifyother": true,
"printhigh": true,
"printlow": true
},
"encrypted": false,
"ownerpasswordmatched": false,
"parameters": {
"P": 0,
"R": 0,
"V": 0,
"bits": 0,
"filemethod": "none",
"key": null,
"method": "none",
"streammethod": "none",
"stringmethod": "none"
},
"userpasswordmatched": false
},
"outlines": [],
"qpdf": {
"jsonversion": 2,
"qpdf-v2": {
"pdfversion": "1.3",
"maxobjectid": 30,
"objects": {

View File

@ -1,10 +1,5 @@
{
"version": 2,
"parameters": {
"decodelevel": "none"
},
"qpdf": {
"jsonversion": 2,
"qpdf-v2": {
"pdfversion": "1.3",
"maxobjectid": 30,
"objects": {

View File

@ -1,281 +1,5 @@
{
"version": 2,
"parameters": {
"decodelevel": "none"
},
"pages": [
{
"contents": [
"12 0 R"
],
"images": [
{
"bitspercomponent": 8,
"colorspace": "/DeviceCMYK",
"decodeparms": [
null
],
"filter": [
"/FlateDecode"
],
"filterable": false,
"height": 48,
"name": "/Im1",
"object": "14 0 R",
"width": 40
}
],
"label": null,
"object": "3 0 R",
"outlines": [],
"pageposfrom1": 1
},
{
"contents": [
"15 0 R"
],
"images": [
{
"bitspercomponent": 8,
"colorspace": "/DeviceCMYK",
"decodeparms": [
null
],
"filter": [
"/DCTDecode"
],
"filterable": false,
"height": 48,
"name": "/Im1",
"object": "16 0 R",
"width": 40
}
],
"label": null,
"object": "4 0 R",
"outlines": [],
"pageposfrom1": 2
},
{
"contents": [
"17 0 R"
],
"images": [
{
"bitspercomponent": 8,
"colorspace": "/DeviceCMYK",
"decodeparms": [
null
],
"filter": [
"/RunLengthDecode"
],
"filterable": false,
"height": 48,
"name": "/Im1",
"object": "18 0 R",
"width": 40
}
],
"label": null,
"object": "5 0 R",
"outlines": [],
"pageposfrom1": 3
},
{
"contents": [
"19 0 R"
],
"images": [
{
"bitspercomponent": 8,
"colorspace": "/DeviceRGB",
"decodeparms": [
null
],
"filter": [
"/FlateDecode"
],
"filterable": false,
"height": 48,
"name": "/Im1",
"object": "20 0 R",
"width": 40
}
],
"label": null,
"object": "6 0 R",
"outlines": [],
"pageposfrom1": 4
},
{
"contents": [
"21 0 R"
],
"images": [
{
"bitspercomponent": 8,
"colorspace": "/DeviceRGB",
"decodeparms": [
null
],
"filter": [
"/DCTDecode"
],
"filterable": false,
"height": 48,
"name": "/Im1",
"object": "22 0 R",
"width": 40
}
],
"label": null,
"object": "7 0 R",
"outlines": [],
"pageposfrom1": 5
},
{
"contents": [
"23 0 R"
],
"images": [
{
"bitspercomponent": 8,
"colorspace": "/DeviceRGB",
"decodeparms": [
null
],
"filter": [
"/RunLengthDecode"
],
"filterable": false,
"height": 48,
"name": "/Im1",
"object": "24 0 R",
"width": 40
}
],
"label": null,
"object": "8 0 R",
"outlines": [],
"pageposfrom1": 6
},
{
"contents": [
"25 0 R"
],
"images": [
{
"bitspercomponent": 8,
"colorspace": "/DeviceGray",
"decodeparms": [
null
],
"filter": [
"/FlateDecode"
],
"filterable": false,
"height": 48,
"name": "/Im1",
"object": "26 0 R",
"width": 40
}
],
"label": null,
"object": "9 0 R",
"outlines": [],
"pageposfrom1": 7
},
{
"contents": [
"27 0 R"
],
"images": [
{
"bitspercomponent": 8,
"colorspace": "/DeviceGray",
"decodeparms": [
null
],
"filter": [
"/DCTDecode"
],
"filterable": false,
"height": 48,
"name": "/Im1",
"object": "28 0 R",
"width": 40
}
],
"label": null,
"object": "10 0 R",
"outlines": [],
"pageposfrom1": 8
},
{
"contents": [
"29 0 R"
],
"images": [
{
"bitspercomponent": 8,
"colorspace": "/DeviceGray",
"decodeparms": [
null
],
"filter": [
"/RunLengthDecode"
],
"filterable": false,
"height": 48,
"name": "/Im1",
"object": "30 0 R",
"width": 40
}
],
"label": null,
"object": "11 0 R",
"outlines": [],
"pageposfrom1": 9
}
],
"pagelabels": [],
"acroform": {
"fields": [],
"hasacroform": false,
"needappearances": false
},
"attachments": {},
"encrypt": {
"capabilities": {
"accessibility": true,
"extract": true,
"modify": true,
"modifyannotations": true,
"modifyassembly": true,
"modifyforms": true,
"modifyother": true,
"printhigh": true,
"printlow": true
},
"encrypted": false,
"ownerpasswordmatched": false,
"parameters": {
"P": 0,
"R": 0,
"V": 0,
"bits": 0,
"filemethod": "none",
"key": null,
"method": "none",
"streammethod": "none",
"stringmethod": "none"
},
"userpasswordmatched": false
},
"outlines": [],
"qpdf": {
"jsonversion": 2,
"qpdf-v2": {
"pdfversion": "1.3",
"maxobjectid": 30,
"objects": {

View File

@ -274,485 +274,480 @@
"userpasswordmatched": false
},
"outlines": [],
"qpdf": {
"jsonversion": 2,
"pdfversion": "1.3",
"maxobjectid": 30,
"objects": {
"obj:1 0 R": {
"value": {
"/Pages": "2 0 R",
"/Type": "/Catalog"
}
},
"obj:2 0 R": {
"value": {
"/Count": 9,
"/Kids": [
"3 0 R",
"4 0 R",
"5 0 R",
"6 0 R",
"7 0 R",
"8 0 R",
"9 0 R",
"10 0 R",
"11 0 R"
],
"/Type": "/Pages"
}
},
"obj:3 0 R": {
"value": {
"/Contents": "12 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "14 0 R"
}
"objects": {
"obj:1 0 R": {
"value": {
"/Pages": "2 0 R",
"/Type": "/Catalog"
}
},
"obj:2 0 R": {
"value": {
"/Count": 9,
"/Kids": [
"3 0 R",
"4 0 R",
"5 0 R",
"6 0 R",
"7 0 R",
"8 0 R",
"9 0 R",
"10 0 R",
"11 0 R"
],
"/Type": "/Pages"
}
},
"obj:3 0 R": {
"value": {
"/Contents": "12 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:4 0 R": {
"value": {
"/Contents": "15 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "16 0 R"
}
"/XObject": {
"/Im1": "14 0 R"
}
},
"/Type": "/Page"
}
},
"obj:4 0 R": {
"value": {
"/Contents": "15 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:5 0 R": {
"value": {
"/Contents": "17 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "18 0 R"
}
"/XObject": {
"/Im1": "16 0 R"
}
},
"/Type": "/Page"
}
},
"obj:5 0 R": {
"value": {
"/Contents": "17 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:6 0 R": {
"value": {
"/Contents": "19 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "20 0 R"
}
"/XObject": {
"/Im1": "18 0 R"
}
},
"/Type": "/Page"
}
},
"obj:6 0 R": {
"value": {
"/Contents": "19 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:7 0 R": {
"value": {
"/Contents": "21 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "22 0 R"
}
"/XObject": {
"/Im1": "20 0 R"
}
},
"/Type": "/Page"
}
},
"obj:7 0 R": {
"value": {
"/Contents": "21 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:8 0 R": {
"value": {
"/Contents": "23 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "24 0 R"
}
"/XObject": {
"/Im1": "22 0 R"
}
},
"/Type": "/Page"
}
},
"obj:8 0 R": {
"value": {
"/Contents": "23 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:9 0 R": {
"value": {
"/Contents": "25 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "26 0 R"
}
"/XObject": {
"/Im1": "24 0 R"
}
},
"/Type": "/Page"
}
},
"obj:9 0 R": {
"value": {
"/Contents": "25 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:10 0 R": {
"value": {
"/Contents": "27 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "28 0 R"
}
"/XObject": {
"/Im1": "26 0 R"
}
},
"/Type": "/Page"
}
},
"obj:10 0 R": {
"value": {
"/Contents": "27 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:11 0 R": {
"value": {
"/Contents": "29 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "30 0 R"
}
"/XObject": {
"/Im1": "28 0 R"
}
},
"/Type": "/Page"
}
},
"obj:11 0 R": {
"value": {
"/Contents": "29 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:12 0 R": {
"stream": {
"dict": {
"/Filter": "/FlateDecode",
"/Length": 97
}
}
},
"obj:13 0 R": {
"value": {
"/BaseFont": "/Helvetica",
"/Encoding": "/WinAnsiEncoding",
"/Name": "/F1",
"/Subtype": "/Type1",
"/Type": "/Font"
}
},
"obj:14 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceCMYK",
"/Filter": "/FlateDecode",
"/Height": 48,
"/Length": 51,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 40
}
}
},
"obj:15 0 R": {
"stream": {
"dict": {
"/Filter": "/FlateDecode",
"/Length": 102
}
}
},
"obj:16 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceCMYK",
"/Filter": "/DCTDecode",
"/Height": 48,
"/Length": 454,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 40
}
}
},
"obj:17 0 R": {
"stream": {
"dict": {
"/Filter": "/FlateDecode",
"/Length": 108
}
}
},
"obj:18 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceCMYK",
"/Filter": "/RunLengthDecode",
"/Height": 48,
"/Length": 7688,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 40
}
}
},
"obj:19 0 R": {
"stream": {
"dict": {
"/Filter": "/FlateDecode",
"/Length": 96
}
}
},
"obj:20 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceRGB",
"/Filter": "/FlateDecode",
"/Height": 48,
"/Length": 46,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 40
}
}
},
"obj:21 0 R": {
"stream": {
"dict": {
"/Filter": "/FlateDecode",
"/Length": 99
}
}
},
"obj:22 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceRGB",
"/Filter": "/DCTDecode",
"/Height": 48,
"/Length": 849,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 40
}
}
},
"obj:23 0 R": {
"stream": {
"dict": {
"/Filter": "/FlateDecode",
"/Length": 106
}
}
},
"obj:24 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceRGB",
"/Filter": "/RunLengthDecode",
"/Height": 48,
"/Length": 6411,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 40
}
}
},
"obj:25 0 R": {
"stream": {
"dict": {
"/Filter": "/FlateDecode",
"/Length": 97
}
}
},
"obj:26 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceGray",
"/Filter": "/FlateDecode",
"/Height": 48,
"/Length": 36,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 40
}
}
},
"obj:27 0 R": {
"stream": {
"dict": {
"/Filter": "/FlateDecode",
"/Length": 101
}
}
},
"obj:28 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceGray",
"/Filter": "/DCTDecode",
"/Height": 48,
"/Length": 359,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 40
}
}
},
"obj:29 0 R": {
"stream": {
"dict": {
"/Filter": "/FlateDecode",
"/Length": 108
}
}
},
"obj:30 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceGray",
"/Filter": "/RunLengthDecode",
"/Height": 48,
"/Length": 37,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 40
}
}
},
"trailer": {
"value": {
"/ID": [
"b:5aa7af805079bb907e9034361d9a11a2",
"b:5aa7af805079bb907e9034361d9a11a2"
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Root": "1 0 R",
"/Size": 31
"/XObject": {
"/Im1": "30 0 R"
}
},
"/Type": "/Page"
}
},
"obj:12 0 R": {
"stream": {
"dict": {
"/Filter": "/FlateDecode",
"/Length": 97
}
}
},
"obj:13 0 R": {
"value": {
"/BaseFont": "/Helvetica",
"/Encoding": "/WinAnsiEncoding",
"/Name": "/F1",
"/Subtype": "/Type1",
"/Type": "/Font"
}
},
"obj:14 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceCMYK",
"/Filter": "/FlateDecode",
"/Height": 48,
"/Length": 51,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 40
}
}
},
"obj:15 0 R": {
"stream": {
"dict": {
"/Filter": "/FlateDecode",
"/Length": 102
}
}
},
"obj:16 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceCMYK",
"/Filter": "/DCTDecode",
"/Height": 48,
"/Length": 454,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 40
}
}
},
"obj:17 0 R": {
"stream": {
"dict": {
"/Filter": "/FlateDecode",
"/Length": 108
}
}
},
"obj:18 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceCMYK",
"/Filter": "/RunLengthDecode",
"/Height": 48,
"/Length": 7688,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 40
}
}
},
"obj:19 0 R": {
"stream": {
"dict": {
"/Filter": "/FlateDecode",
"/Length": 96
}
}
},
"obj:20 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceRGB",
"/Filter": "/FlateDecode",
"/Height": 48,
"/Length": 46,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 40
}
}
},
"obj:21 0 R": {
"stream": {
"dict": {
"/Filter": "/FlateDecode",
"/Length": 99
}
}
},
"obj:22 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceRGB",
"/Filter": "/DCTDecode",
"/Height": 48,
"/Length": 849,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 40
}
}
},
"obj:23 0 R": {
"stream": {
"dict": {
"/Filter": "/FlateDecode",
"/Length": 106
}
}
},
"obj:24 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceRGB",
"/Filter": "/RunLengthDecode",
"/Height": 48,
"/Length": 6411,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 40
}
}
},
"obj:25 0 R": {
"stream": {
"dict": {
"/Filter": "/FlateDecode",
"/Length": 97
}
}
},
"obj:26 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceGray",
"/Filter": "/FlateDecode",
"/Height": 48,
"/Length": 36,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 40
}
}
},
"obj:27 0 R": {
"stream": {
"dict": {
"/Filter": "/FlateDecode",
"/Length": 101
}
}
},
"obj:28 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceGray",
"/Filter": "/DCTDecode",
"/Height": 48,
"/Length": 359,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 40
}
}
},
"obj:29 0 R": {
"stream": {
"dict": {
"/Filter": "/FlateDecode",
"/Length": 108
}
}
},
"obj:30 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceGray",
"/Filter": "/RunLengthDecode",
"/Height": 48,
"/Length": 37,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 40
}
}
},
"trailer": {
"value": {
"/ID": [
"b:5aa7af805079bb907e9034361d9a11a2",
"b:5aa7af805079bb907e9034361d9a11a2"
],
"/Root": "1 0 R",
"/Size": 31
}
}
}
}

View File

@ -1,10 +1,5 @@
{
"version": 2,
"parameters": {
"decodelevel": "specialized"
},
"qpdf": {
"jsonversion": 2,
"qpdf-v2": {
"pdfversion": "1.3",
"maxobjectid": 30,
"objects": {

View File

@ -1,281 +1,5 @@
{
"version": 2,
"parameters": {
"decodelevel": "specialized"
},
"pages": [
{
"contents": [
"12 0 R"
],
"images": [
{
"bitspercomponent": 8,
"colorspace": "/DeviceCMYK",
"decodeparms": [
null
],
"filter": [
"/FlateDecode"
],
"filterable": true,
"height": 48,
"name": "/Im1",
"object": "14 0 R",
"width": 40
}
],
"label": null,
"object": "3 0 R",
"outlines": [],
"pageposfrom1": 1
},
{
"contents": [
"15 0 R"
],
"images": [
{
"bitspercomponent": 8,
"colorspace": "/DeviceCMYK",
"decodeparms": [
null
],
"filter": [
"/DCTDecode"
],
"filterable": false,
"height": 48,
"name": "/Im1",
"object": "16 0 R",
"width": 40
}
],
"label": null,
"object": "4 0 R",
"outlines": [],
"pageposfrom1": 2
},
{
"contents": [
"17 0 R"
],
"images": [
{
"bitspercomponent": 8,
"colorspace": "/DeviceCMYK",
"decodeparms": [
null
],
"filter": [
"/RunLengthDecode"
],
"filterable": true,
"height": 48,
"name": "/Im1",
"object": "18 0 R",
"width": 40
}
],
"label": null,
"object": "5 0 R",
"outlines": [],
"pageposfrom1": 3
},
{
"contents": [
"19 0 R"
],
"images": [
{
"bitspercomponent": 8,
"colorspace": "/DeviceRGB",
"decodeparms": [
null
],
"filter": [
"/FlateDecode"
],
"filterable": true,
"height": 48,
"name": "/Im1",
"object": "20 0 R",
"width": 40
}
],
"label": null,
"object": "6 0 R",
"outlines": [],
"pageposfrom1": 4
},
{
"contents": [
"21 0 R"
],
"images": [
{
"bitspercomponent": 8,
"colorspace": "/DeviceRGB",
"decodeparms": [
null
],
"filter": [
"/DCTDecode"
],
"filterable": false,
"height": 48,
"name": "/Im1",
"object": "22 0 R",
"width": 40
}
],
"label": null,
"object": "7 0 R",
"outlines": [],
"pageposfrom1": 5
},
{
"contents": [
"23 0 R"
],
"images": [
{
"bitspercomponent": 8,
"colorspace": "/DeviceRGB",
"decodeparms": [
null
],
"filter": [
"/RunLengthDecode"
],
"filterable": true,
"height": 48,
"name": "/Im1",
"object": "24 0 R",
"width": 40
}
],
"label": null,
"object": "8 0 R",
"outlines": [],
"pageposfrom1": 6
},
{
"contents": [
"25 0 R"
],
"images": [
{
"bitspercomponent": 8,
"colorspace": "/DeviceGray",
"decodeparms": [
null
],
"filter": [
"/FlateDecode"
],
"filterable": true,
"height": 48,
"name": "/Im1",
"object": "26 0 R",
"width": 40
}
],
"label": null,
"object": "9 0 R",
"outlines": [],
"pageposfrom1": 7
},
{
"contents": [
"27 0 R"
],
"images": [
{
"bitspercomponent": 8,
"colorspace": "/DeviceGray",
"decodeparms": [
null
],
"filter": [
"/DCTDecode"
],
"filterable": false,
"height": 48,
"name": "/Im1",
"object": "28 0 R",
"width": 40
}
],
"label": null,
"object": "10 0 R",
"outlines": [],
"pageposfrom1": 8
},
{
"contents": [
"29 0 R"
],
"images": [
{
"bitspercomponent": 8,
"colorspace": "/DeviceGray",
"decodeparms": [
null
],
"filter": [
"/RunLengthDecode"
],
"filterable": true,
"height": 48,
"name": "/Im1",
"object": "30 0 R",
"width": 40
}
],
"label": null,
"object": "11 0 R",
"outlines": [],
"pageposfrom1": 9
}
],
"pagelabels": [],
"acroform": {
"fields": [],
"hasacroform": false,
"needappearances": false
},
"attachments": {},
"encrypt": {
"capabilities": {
"accessibility": true,
"extract": true,
"modify": true,
"modifyannotations": true,
"modifyassembly": true,
"modifyforms": true,
"modifyother": true,
"printhigh": true,
"printlow": true
},
"encrypted": false,
"ownerpasswordmatched": false,
"parameters": {
"P": 0,
"R": 0,
"V": 0,
"bits": 0,
"filemethod": "none",
"key": null,
"method": "none",
"streammethod": "none",
"stringmethod": "none"
},
"userpasswordmatched": false
},
"outlines": [],
"qpdf": {
"jsonversion": 2,
"qpdf-v2": {
"pdfversion": "1.3",
"maxobjectid": 30,
"objects": {

View File

@ -274,473 +274,468 @@
"userpasswordmatched": false
},
"outlines": [],
"qpdf": {
"jsonversion": 2,
"pdfversion": "1.3",
"maxobjectid": 30,
"objects": {
"obj:1 0 R": {
"value": {
"/Pages": "2 0 R",
"/Type": "/Catalog"
}
},
"obj:2 0 R": {
"value": {
"/Count": 9,
"/Kids": [
"3 0 R",
"4 0 R",
"5 0 R",
"6 0 R",
"7 0 R",
"8 0 R",
"9 0 R",
"10 0 R",
"11 0 R"
],
"/Type": "/Pages"
}
},
"obj:3 0 R": {
"value": {
"/Contents": "12 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "14 0 R"
}
"objects": {
"obj:1 0 R": {
"value": {
"/Pages": "2 0 R",
"/Type": "/Catalog"
}
},
"obj:2 0 R": {
"value": {
"/Count": 9,
"/Kids": [
"3 0 R",
"4 0 R",
"5 0 R",
"6 0 R",
"7 0 R",
"8 0 R",
"9 0 R",
"10 0 R",
"11 0 R"
],
"/Type": "/Pages"
}
},
"obj:3 0 R": {
"value": {
"/Contents": "12 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:4 0 R": {
"value": {
"/Contents": "15 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "16 0 R"
}
"/XObject": {
"/Im1": "14 0 R"
}
},
"/Type": "/Page"
}
},
"obj:4 0 R": {
"value": {
"/Contents": "15 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:5 0 R": {
"value": {
"/Contents": "17 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "18 0 R"
}
"/XObject": {
"/Im1": "16 0 R"
}
},
"/Type": "/Page"
}
},
"obj:5 0 R": {
"value": {
"/Contents": "17 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:6 0 R": {
"value": {
"/Contents": "19 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "20 0 R"
}
"/XObject": {
"/Im1": "18 0 R"
}
},
"/Type": "/Page"
}
},
"obj:6 0 R": {
"value": {
"/Contents": "19 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:7 0 R": {
"value": {
"/Contents": "21 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "22 0 R"
}
"/XObject": {
"/Im1": "20 0 R"
}
},
"/Type": "/Page"
}
},
"obj:7 0 R": {
"value": {
"/Contents": "21 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:8 0 R": {
"value": {
"/Contents": "23 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "24 0 R"
}
"/XObject": {
"/Im1": "22 0 R"
}
},
"/Type": "/Page"
}
},
"obj:8 0 R": {
"value": {
"/Contents": "23 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:9 0 R": {
"value": {
"/Contents": "25 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "26 0 R"
}
"/XObject": {
"/Im1": "24 0 R"
}
},
"/Type": "/Page"
}
},
"obj:9 0 R": {
"value": {
"/Contents": "25 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:10 0 R": {
"value": {
"/Contents": "27 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "28 0 R"
}
"/XObject": {
"/Im1": "26 0 R"
}
},
"/Type": "/Page"
}
},
"obj:10 0 R": {
"value": {
"/Contents": "27 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:11 0 R": {
"value": {
"/Contents": "29 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "30 0 R"
}
"/XObject": {
"/Im1": "28 0 R"
}
},
"/Type": "/Page"
}
},
"obj:11 0 R": {
"value": {
"/Contents": "29 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:12 0 R": {
"stream": {
"dict": {
"/Length": 95
}
}
},
"obj:13 0 R": {
"value": {
"/BaseFont": "/Helvetica",
"/Encoding": "/WinAnsiEncoding",
"/Name": "/F1",
"/Subtype": "/Type1",
"/Type": "/Font"
}
},
"obj:14 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceCMYK",
"/Height": 480,
"/Length": 768000,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:15 0 R": {
"stream": {
"dict": {
"/Length": 101
}
}
},
"obj:16 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceCMYK",
"/Filter": "/DCTDecode",
"/Height": 480,
"/Length": 9364,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:17 0 R": {
"stream": {
"dict": {
"/Length": 107
}
}
},
"obj:18 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceCMYK",
"/Filter": "/RunLengthDecode",
"/Height": 480,
"/Length": 768998,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:19 0 R": {
"stream": {
"dict": {
"/Length": 94
}
}
},
"obj:20 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceRGB",
"/Height": 480,
"/Length": 576000,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:21 0 R": {
"stream": {
"dict": {
"/Length": 100
}
}
},
"obj:22 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceRGB",
"/Filter": "/DCTDecode",
"/Height": 480,
"/Length": 3650,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:23 0 R": {
"stream": {
"dict": {
"/Length": 106
}
}
},
"obj:24 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceRGB",
"/Filter": "/RunLengthDecode",
"/Height": 480,
"/Length": 641497,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:25 0 R": {
"stream": {
"dict": {
"/Length": 95
}
}
},
"obj:26 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceGray",
"/Height": 480,
"/Length": 192000,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:27 0 R": {
"stream": {
"dict": {
"/Length": 101
}
}
},
"obj:28 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceGray",
"/Filter": "/DCTDecode",
"/Height": 480,
"/Length": 2587,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:29 0 R": {
"stream": {
"dict": {
"/Length": 107
}
}
},
"obj:30 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceGray",
"/Filter": "/RunLengthDecode",
"/Height": 480,
"/Length": 3001,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"trailer": {
"value": {
"/ID": [
"b:53b6958e9beef00ea2ac077d5f2912b6",
"b:272b8d8ba45632ab505020e7606d221d"
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Root": "1 0 R",
"/Size": 31
"/XObject": {
"/Im1": "30 0 R"
}
},
"/Type": "/Page"
}
},
"obj:12 0 R": {
"stream": {
"dict": {
"/Length": 95
}
}
},
"obj:13 0 R": {
"value": {
"/BaseFont": "/Helvetica",
"/Encoding": "/WinAnsiEncoding",
"/Name": "/F1",
"/Subtype": "/Type1",
"/Type": "/Font"
}
},
"obj:14 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceCMYK",
"/Height": 480,
"/Length": 768000,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:15 0 R": {
"stream": {
"dict": {
"/Length": 101
}
}
},
"obj:16 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceCMYK",
"/Filter": "/DCTDecode",
"/Height": 480,
"/Length": 9364,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:17 0 R": {
"stream": {
"dict": {
"/Length": 107
}
}
},
"obj:18 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceCMYK",
"/Filter": "/RunLengthDecode",
"/Height": 480,
"/Length": 768998,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:19 0 R": {
"stream": {
"dict": {
"/Length": 94
}
}
},
"obj:20 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceRGB",
"/Height": 480,
"/Length": 576000,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:21 0 R": {
"stream": {
"dict": {
"/Length": 100
}
}
},
"obj:22 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceRGB",
"/Filter": "/DCTDecode",
"/Height": 480,
"/Length": 3650,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:23 0 R": {
"stream": {
"dict": {
"/Length": 106
}
}
},
"obj:24 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceRGB",
"/Filter": "/RunLengthDecode",
"/Height": 480,
"/Length": 641497,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:25 0 R": {
"stream": {
"dict": {
"/Length": 95
}
}
},
"obj:26 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceGray",
"/Height": 480,
"/Length": 192000,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:27 0 R": {
"stream": {
"dict": {
"/Length": 101
}
}
},
"obj:28 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceGray",
"/Filter": "/DCTDecode",
"/Height": 480,
"/Length": 2587,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:29 0 R": {
"stream": {
"dict": {
"/Length": 107
}
}
},
"obj:30 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceGray",
"/Filter": "/RunLengthDecode",
"/Height": 480,
"/Length": 3001,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"trailer": {
"value": {
"/ID": [
"b:53b6958e9beef00ea2ac077d5f2912b6",
"b:272b8d8ba45632ab505020e7606d221d"
],
"/Root": "1 0 R",
"/Size": 31
}
}
}
}

View File

@ -274,473 +274,468 @@
"userpasswordmatched": false
},
"outlines": [],
"qpdf": {
"jsonversion": 2,
"pdfversion": "1.3",
"maxobjectid": 30,
"objects": {
"obj:1 0 R": {
"value": {
"/Pages": "2 0 R",
"/Type": "/Catalog"
}
},
"obj:2 0 R": {
"value": {
"/Count": 9,
"/Kids": [
"3 0 R",
"4 0 R",
"5 0 R",
"6 0 R",
"7 0 R",
"8 0 R",
"9 0 R",
"10 0 R",
"11 0 R"
],
"/Type": "/Pages"
}
},
"obj:3 0 R": {
"value": {
"/Contents": "12 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "14 0 R"
}
"objects": {
"obj:1 0 R": {
"value": {
"/Pages": "2 0 R",
"/Type": "/Catalog"
}
},
"obj:2 0 R": {
"value": {
"/Count": 9,
"/Kids": [
"3 0 R",
"4 0 R",
"5 0 R",
"6 0 R",
"7 0 R",
"8 0 R",
"9 0 R",
"10 0 R",
"11 0 R"
],
"/Type": "/Pages"
}
},
"obj:3 0 R": {
"value": {
"/Contents": "12 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:4 0 R": {
"value": {
"/Contents": "15 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "16 0 R"
}
"/XObject": {
"/Im1": "14 0 R"
}
},
"/Type": "/Page"
}
},
"obj:4 0 R": {
"value": {
"/Contents": "15 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:5 0 R": {
"value": {
"/Contents": "17 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "18 0 R"
}
"/XObject": {
"/Im1": "16 0 R"
}
},
"/Type": "/Page"
}
},
"obj:5 0 R": {
"value": {
"/Contents": "17 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:6 0 R": {
"value": {
"/Contents": "19 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "20 0 R"
}
"/XObject": {
"/Im1": "18 0 R"
}
},
"/Type": "/Page"
}
},
"obj:6 0 R": {
"value": {
"/Contents": "19 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:7 0 R": {
"value": {
"/Contents": "21 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "22 0 R"
}
"/XObject": {
"/Im1": "20 0 R"
}
},
"/Type": "/Page"
}
},
"obj:7 0 R": {
"value": {
"/Contents": "21 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:8 0 R": {
"value": {
"/Contents": "23 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "24 0 R"
}
"/XObject": {
"/Im1": "22 0 R"
}
},
"/Type": "/Page"
}
},
"obj:8 0 R": {
"value": {
"/Contents": "23 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:9 0 R": {
"value": {
"/Contents": "25 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "26 0 R"
}
"/XObject": {
"/Im1": "24 0 R"
}
},
"/Type": "/Page"
}
},
"obj:9 0 R": {
"value": {
"/Contents": "25 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:10 0 R": {
"value": {
"/Contents": "27 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "28 0 R"
}
"/XObject": {
"/Im1": "26 0 R"
}
},
"/Type": "/Page"
}
},
"obj:10 0 R": {
"value": {
"/Contents": "27 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:11 0 R": {
"value": {
"/Contents": "29 0 R",
"/MediaBox": [
0,
0,
612,
392
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/XObject": {
"/Im1": "30 0 R"
}
"/XObject": {
"/Im1": "28 0 R"
}
},
"/Type": "/Page"
}
},
"obj:11 0 R": {
"value": {
"/Contents": "29 0 R",
"/MediaBox": [
0,
0,
612,
392
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "13 0 R"
},
"/Type": "/Page"
}
},
"obj:12 0 R": {
"stream": {
"dict": {
"/Length": 95
}
}
},
"obj:13 0 R": {
"value": {
"/BaseFont": "/Helvetica",
"/Encoding": "/WinAnsiEncoding",
"/Name": "/F1",
"/Subtype": "/Type1",
"/Type": "/Font"
}
},
"obj:14 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceCMYK",
"/Height": 480,
"/Length": 768000,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:15 0 R": {
"stream": {
"dict": {
"/Length": 101
}
}
},
"obj:16 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceCMYK",
"/Filter": "/DCTDecode",
"/Height": 480,
"/Length": 9364,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:17 0 R": {
"stream": {
"dict": {
"/Length": 107
}
}
},
"obj:18 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceCMYK",
"/Filter": "/RunLengthDecode",
"/Height": 480,
"/Length": 768998,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:19 0 R": {
"stream": {
"dict": {
"/Length": 94
}
}
},
"obj:20 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceRGB",
"/Height": 480,
"/Length": 576000,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:21 0 R": {
"stream": {
"dict": {
"/Length": 100
}
}
},
"obj:22 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceRGB",
"/Filter": "/DCTDecode",
"/Height": 480,
"/Length": 3650,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:23 0 R": {
"stream": {
"dict": {
"/Length": 106
}
}
},
"obj:24 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceRGB",
"/Filter": "/RunLengthDecode",
"/Height": 480,
"/Length": 641497,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:25 0 R": {
"stream": {
"dict": {
"/Length": 95
}
}
},
"obj:26 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceGray",
"/Height": 480,
"/Length": 192000,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:27 0 R": {
"stream": {
"dict": {
"/Length": 101
}
}
},
"obj:28 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceGray",
"/Filter": "/DCTDecode",
"/Height": 480,
"/Length": 2587,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:29 0 R": {
"stream": {
"dict": {
"/Length": 107
}
}
},
"obj:30 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceGray",
"/Filter": "/RunLengthDecode",
"/Height": 480,
"/Length": 3001,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"trailer": {
"value": {
"/ID": [
"b:53b6958e9beef00ea2ac077d5f2912b6",
"b:272b8d8ba45632ab505020e7606d221d"
"/ProcSet": [
"/PDF",
"/Text",
"/ImageC"
],
"/Root": "1 0 R",
"/Size": 31
"/XObject": {
"/Im1": "30 0 R"
}
},
"/Type": "/Page"
}
},
"obj:12 0 R": {
"stream": {
"dict": {
"/Length": 95
}
}
},
"obj:13 0 R": {
"value": {
"/BaseFont": "/Helvetica",
"/Encoding": "/WinAnsiEncoding",
"/Name": "/F1",
"/Subtype": "/Type1",
"/Type": "/Font"
}
},
"obj:14 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceCMYK",
"/Height": 480,
"/Length": 768000,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:15 0 R": {
"stream": {
"dict": {
"/Length": 101
}
}
},
"obj:16 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceCMYK",
"/Filter": "/DCTDecode",
"/Height": 480,
"/Length": 9364,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:17 0 R": {
"stream": {
"dict": {
"/Length": 107
}
}
},
"obj:18 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceCMYK",
"/Filter": "/RunLengthDecode",
"/Height": 480,
"/Length": 768998,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:19 0 R": {
"stream": {
"dict": {
"/Length": 94
}
}
},
"obj:20 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceRGB",
"/Height": 480,
"/Length": 576000,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:21 0 R": {
"stream": {
"dict": {
"/Length": 100
}
}
},
"obj:22 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceRGB",
"/Filter": "/DCTDecode",
"/Height": 480,
"/Length": 3650,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:23 0 R": {
"stream": {
"dict": {
"/Length": 106
}
}
},
"obj:24 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceRGB",
"/Filter": "/RunLengthDecode",
"/Height": 480,
"/Length": 641497,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:25 0 R": {
"stream": {
"dict": {
"/Length": 95
}
}
},
"obj:26 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceGray",
"/Height": 480,
"/Length": 192000,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:27 0 R": {
"stream": {
"dict": {
"/Length": 101
}
}
},
"obj:28 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceGray",
"/Filter": "/DCTDecode",
"/Height": 480,
"/Length": 2587,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"obj:29 0 R": {
"stream": {
"dict": {
"/Length": 107
}
}
},
"obj:30 0 R": {
"stream": {
"dict": {
"/BitsPerComponent": 8,
"/ColorSpace": "/DeviceGray",
"/Filter": "/RunLengthDecode",
"/Height": 480,
"/Length": 3001,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 400
}
}
},
"trailer": {
"value": {
"/ID": [
"b:53b6958e9beef00ea2ac077d5f2912b6",
"b:272b8d8ba45632ab505020e7606d221d"
],
"/Root": "1 0 R",
"/Size": 31
}
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,52 @@
{
"version": 2,
"parameters": {
"decodelevel": "generalized"
},
"objects": {
"obj:2 0 R": {
"value": {
"/Count": 30,
"/Kids": [
"3 0 R",
"4 0 R",
"5 0 R",
"6 0 R",
"7 0 R",
"8 0 R",
"9 0 R",
"10 0 R",
"11 0 R",
"12 0 R",
"13 0 R",
"14 0 R",
"15 0 R",
"16 0 R",
"17 0 R",
"18 0 R",
"19 0 R",
"20 0 R",
"21 0 R",
"22 0 R",
"23 0 R",
"24 0 R",
"25 0 R",
"26 0 R",
"27 0 R",
"28 0 R",
"29 0 R",
"30 0 R",
"31 0 R",
"32 0 R"
],
"/Type": "/Pages"
}
},
"trailer": {
"value": {
"/Root": "1 0 R",
"/Size": 107
}
}
}
}

View File

@ -0,0 +1,14 @@
{
"version": 2,
"parameters": {
"decodelevel": "generalized"
},
"objects": {
"trailer": {
"value": {
"/Root": "1 0 R",
"/Size": 107
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,57 +0,0 @@
{
"version": 2,
"parameters": {
"decodelevel": "generalized"
},
"qpdf": {
"jsonversion": 2,
"pdfversion": "1.3",
"maxobjectid": 106,
"objects": {
"obj:2 0 R": {
"value": {
"/Count": 30,
"/Kids": [
"3 0 R",
"4 0 R",
"5 0 R",
"6 0 R",
"7 0 R",
"8 0 R",
"9 0 R",
"10 0 R",
"11 0 R",
"12 0 R",
"13 0 R",
"14 0 R",
"15 0 R",
"16 0 R",
"17 0 R",
"18 0 R",
"19 0 R",
"20 0 R",
"21 0 R",
"22 0 R",
"23 0 R",
"24 0 R",
"25 0 R",
"26 0 R",
"27 0 R",
"28 0 R",
"29 0 R",
"30 0 R",
"31 0 R",
"32 0 R"
],
"/Type": "/Pages"
}
},
"trailer": {
"value": {
"/Root": "1 0 R",
"/Size": 107
}
}
}
}
}

View File

@ -1,19 +0,0 @@
{
"version": 2,
"parameters": {
"decodelevel": "generalized"
},
"qpdf": {
"jsonversion": 2,
"pdfversion": "1.3",
"maxobjectid": 106,
"objects": {
"trailer": {
"value": {
"/Root": "1 0 R",
"/Size": 107
}
}
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -3,117 +3,112 @@
"parameters": {
"decodelevel": "generalized"
},
"qpdf": {
"jsonversion": 2,
"pdfversion": "1.3",
"maxobjectid": 10,
"objects": {
"obj:1 0 R": {
"value": {
"/Pages": "3 0 R",
"/Type": "/Catalog"
}
},
"obj:2 0 R": {
"value": {
"/CreationDate": "u:D:20120621124041",
"/Producer": "u:Apex PDFWriter"
}
},
"obj:3 0 R": {
"value": {
"/Count": 3,
"/Kids": [
"4 0 R",
"4 0 R",
"5 0 R"
],
"/Type": "/Pages"
}
},
"obj:4 0 R": {
"value": {
"/Contents": "6 0 R",
"/MediaBox": [
0,
0,
612,
792
],
"/Parent": "3 0 R",
"/Resources": {
"/Font": {
"/F1": "8 0 R"
},
"/ProcSet": [
"/PDF",
"/Text"
]
"objects": {
"obj:1 0 R": {
"value": {
"/Pages": "3 0 R",
"/Type": "/Catalog"
}
},
"obj:2 0 R": {
"value": {
"/CreationDate": "u:D:20120621124041",
"/Producer": "u:Apex PDFWriter"
}
},
"obj:3 0 R": {
"value": {
"/Count": 3,
"/Kids": [
"4 0 R",
"4 0 R",
"5 0 R"
],
"/Type": "/Pages"
}
},
"obj:4 0 R": {
"value": {
"/Contents": "6 0 R",
"/MediaBox": [
0,
0,
612,
792
],
"/Parent": "3 0 R",
"/Resources": {
"/Font": {
"/F1": "8 0 R"
},
"/Type": "/Page"
}
},
"obj:5 0 R": {
"value": {
"/Contents": "9 0 R",
"/MediaBox": [
0,
0,
612,
792
],
"/Parent": "3 0 R",
"/Resources": {
"/Font": {
"/F1": "8 0 R"
},
"/ProcSet": [
"/PDF",
"/Text"
]
"/ProcSet": [
"/PDF",
"/Text"
]
},
"/Type": "/Page"
}
},
"obj:5 0 R": {
"value": {
"/Contents": "9 0 R",
"/MediaBox": [
0,
0,
612,
792
],
"/Parent": "3 0 R",
"/Resources": {
"/Font": {
"/F1": "8 0 R"
},
"/Type": "/Page"
"/ProcSet": [
"/PDF",
"/Text"
]
},
"/Type": "/Page"
}
},
"obj:6 0 R": {
"stream": {
"dict": {
"/Length": "7 0 R"
}
},
"obj:6 0 R": {
"stream": {
"dict": {
"/Length": "7 0 R"
}
}
},
"obj:7 0 R": {
"value": 47
},
"obj:8 0 R": {
"value": {
"/BaseFont": "/Times-Roman",
"/Encoding": "/WinAnsiEncoding",
"/Subtype": "/Type1",
"/Type": "/Font"
}
},
"obj:9 0 R": {
"stream": {
"dict": {
"/Length": "10 0 R"
}
}
},
"obj:10 0 R": {
"value": 47
},
"trailer": {
"value": {
"/ID": [
"b:fb18b786ff7b358705da8a532aba8f6f",
"b:f7179eb35159bfd4c00f128abcfd1f02"
],
"/Info": "2 0 R",
"/Root": "1 0 R",
"/Size": 11
}
},
"obj:7 0 R": {
"value": 47
},
"obj:8 0 R": {
"value": {
"/BaseFont": "/Times-Roman",
"/Encoding": "/WinAnsiEncoding",
"/Subtype": "/Type1",
"/Type": "/Font"
}
},
"obj:9 0 R": {
"stream": {
"dict": {
"/Length": "10 0 R"
}
}
},
"obj:10 0 R": {
"value": 47
},
"trailer": {
"value": {
"/ID": [
"b:fb18b786ff7b358705da8a532aba8f6f",
"b:f7179eb35159bfd4c00f128abcfd1f02"
],
"/Info": "2 0 R",
"/Root": "1 0 R",
"/Size": 11
}
}
}
}

View File

@ -35,138 +35,133 @@
"pageposfrom1": 3
}
],
"qpdf": {
"jsonversion": 2,
"pdfversion": "1.3",
"maxobjectid": 11,
"objects": {
"obj:1 0 R": {
"value": {
"/Pages": "3 0 R",
"/Type": "/Catalog"
}
},
"obj:2 0 R": {
"value": {
"/CreationDate": "u:D:20120621124041",
"/Producer": "u:Apex PDFWriter"
}
},
"obj:3 0 R": {
"value": {
"/Count": 3,
"/Kids": [
"4 0 R",
"11 0 R",
"5 0 R"
],
"/Type": "/Pages"
}
},
"obj:4 0 R": {
"value": {
"/Contents": "6 0 R",
"/MediaBox": [
0,
0,
612,
792
],
"/Parent": "3 0 R",
"/Resources": {
"/Font": {
"/F1": "8 0 R"
},
"/ProcSet": [
"/PDF",
"/Text"
]
"objects": {
"obj:1 0 R": {
"value": {
"/Pages": "3 0 R",
"/Type": "/Catalog"
}
},
"obj:2 0 R": {
"value": {
"/CreationDate": "u:D:20120621124041",
"/Producer": "u:Apex PDFWriter"
}
},
"obj:3 0 R": {
"value": {
"/Count": 3,
"/Kids": [
"4 0 R",
"11 0 R",
"5 0 R"
],
"/Type": "/Pages"
}
},
"obj:4 0 R": {
"value": {
"/Contents": "6 0 R",
"/MediaBox": [
0,
0,
612,
792
],
"/Parent": "3 0 R",
"/Resources": {
"/Font": {
"/F1": "8 0 R"
},
"/Type": "/Page"
}
},
"obj:5 0 R": {
"value": {
"/Contents": "9 0 R",
"/MediaBox": [
0,
0,
612,
792
],
"/Parent": "3 0 R",
"/Resources": {
"/Font": {
"/F1": "8 0 R"
},
"/ProcSet": [
"/PDF",
"/Text"
]
"/ProcSet": [
"/PDF",
"/Text"
]
},
"/Type": "/Page"
}
},
"obj:5 0 R": {
"value": {
"/Contents": "9 0 R",
"/MediaBox": [
0,
0,
612,
792
],
"/Parent": "3 0 R",
"/Resources": {
"/Font": {
"/F1": "8 0 R"
},
"/Type": "/Page"
"/ProcSet": [
"/PDF",
"/Text"
]
},
"/Type": "/Page"
}
},
"obj:6 0 R": {
"stream": {
"dict": {
"/Length": "7 0 R"
}
},
"obj:6 0 R": {
"stream": {
"dict": {
"/Length": "7 0 R"
}
}
},
"obj:7 0 R": {
"value": 47
},
"obj:8 0 R": {
"value": {
"/BaseFont": "/Times-Roman",
"/Encoding": "/WinAnsiEncoding",
"/Subtype": "/Type1",
"/Type": "/Font"
}
},
"obj:9 0 R": {
"stream": {
"dict": {
"/Length": "10 0 R"
}
},
"obj:7 0 R": {
"value": 47
},
"obj:8 0 R": {
"value": {
"/BaseFont": "/Times-Roman",
"/Encoding": "/WinAnsiEncoding",
"/Subtype": "/Type1",
"/Type": "/Font"
}
},
"obj:9 0 R": {
"stream": {
"dict": {
"/Length": "10 0 R"
}
}
},
"obj:10 0 R": {
"value": 47
},
"obj:11 0 R": {
"value": {
"/Contents": "6 0 R",
"/MediaBox": [
0,
0,
612,
792
],
"/Parent": "3 0 R",
"/Resources": {
"/Font": {
"/F1": "8 0 R"
},
"/ProcSet": [
"/PDF",
"/Text"
]
}
},
"obj:10 0 R": {
"value": 47
},
"obj:11 0 R": {
"value": {
"/Contents": "6 0 R",
"/MediaBox": [
0,
0,
612,
792
],
"/Parent": "3 0 R",
"/Resources": {
"/Font": {
"/F1": "8 0 R"
},
"/Type": "/Page"
}
},
"trailer": {
"value": {
"/ID": [
"b:fb18b786ff7b358705da8a532aba8f6f",
"b:f7179eb35159bfd4c00f128abcfd1f02"
],
"/Info": "2 0 R",
"/Root": "1 0 R",
"/Size": 11
}
"/ProcSet": [
"/PDF",
"/Text"
]
},
"/Type": "/Page"
}
},
"trailer": {
"value": {
"/ID": [
"b:fb18b786ff7b358705da8a532aba8f6f",
"b:f7179eb35159bfd4c00f128abcfd1f02"
],
"/Info": "2 0 R",
"/Root": "1 0 R",
"/Size": 11
}
}
}

View File

@ -1,73 +0,0 @@
{
"version": 2,
"parameters": {
"decodelevel": "none"
},
"qpdf": {
"jsonversion": 16059,
"pdfversion": "1.3",
"maxobjectid": 6,
"objects": {
"obj:1 0 R": {
"value": {
"/Pages": "2 0 R",
"/Type": "/Catalog"
}
},
"obj:2 0 R": {
"value": {
"/Count": 1,
"/Kids": [
"3 0 R"
],
"/Type": "/Pages"
}
},
"obj:3 0 R": {
"value": {
"/Contents": "4 0 R",
"/MediaBox": [
0,
0,
612,
792
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "6 0 R"
},
"/ProcSet": "5 0 R"
},
"/Type": "/Page"
}
},
"obj:4 0 R": {
"stream": {
"data": "QlQKICAvRjEgMjQgVGYKICA3MiA3MjAgVGQKICAoUG90YXRvKSBUagpFVAo=",
"dict": {}
}
},
"obj:5 0 R": {
"value": [
"/PDF",
"/Text"
]
},
"obj:6 0 R": {
"value": {
"/BaseFont": "/Helvetica",
"/Encoding": "/WinAnsiEncoding",
"/Subtype": "/Type1",
"/Type": "/Font"
}
},
"trailer": {
"value": {
"/Root": "1 0 R",
"/Size": 7
}
}
}
}
}

View File

@ -1,2 +0,0 @@
WARNING: qjson-bad-json-version1.json (offset 98): only JSON version 2 is supported
qpdf: qjson-bad-json-version1.json: errors found in JSON

View File

@ -1,73 +0,0 @@
{
"version": 2,
"parameters": {
"decodelevel": "none"
},
"qpdf": {
"jsonversion": "potato",
"pdfversion": "1.3",
"maxobjectid": 6,
"objects": {
"obj:1 0 R": {
"value": {
"/Pages": "2 0 R",
"/Type": "/Catalog"
}
},
"obj:2 0 R": {
"value": {
"/Count": 1,
"/Kids": [
"3 0 R"
],
"/Type": "/Pages"
}
},
"obj:3 0 R": {
"value": {
"/Contents": "4 0 R",
"/MediaBox": [
0,
0,
612,
792
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "6 0 R"
},
"/ProcSet": "5 0 R"
},
"/Type": "/Page"
}
},
"obj:4 0 R": {
"stream": {
"data": "QlQKICAvRjEgMjQgVGYKICA3MiA3MjAgVGQKICAoUG90YXRvKSBUagpFVAo=",
"dict": {}
}
},
"obj:5 0 R": {
"value": [
"/PDF",
"/Text"
]
},
"obj:6 0 R": {
"value": {
"/BaseFont": "/Helvetica",
"/Encoding": "/WinAnsiEncoding",
"/Subtype": "/Type1",
"/Type": "/Font"
}
},
"trailer": {
"value": {
"/Root": "1 0 R",
"/Size": 7
}
}
}
}
}

View File

@ -1,2 +0,0 @@
WARNING: qjson-bad-json-version2.json (offset 98): only JSON version 2 is supported
qpdf: qjson-bad-json-version2.json: errors found in JSON

View File

@ -1,10 +1,5 @@
{
"version": 2,
"parameters": {
"decodelevel": "none"
},
"qpdf": {
"jsonversion": 2,
"qpdf-v2": {
"pdfversion": "1.3",
"maxobjectid": 6,
"objects": {

View File

@ -1,2 +1,2 @@
WARNING: qjson-bad-object-key.json (offset 181): object key should be "trailer" or "obj:n n R"
WARNING: qjson-bad-object-key.json (offset 97): object key should be "trailer" or "obj:n n R"
qpdf: qjson-bad-object-key.json: errors found in JSON

View File

@ -1,10 +1,5 @@
{
"version": 2,
"parameters": {
"decodelevel": "none"
},
"qpdf": {
"jsonversion": 2,
"qpdf-v2": {
"pdfversion": "potato",
"maxobjectid": 6,
"objects": {

View File

@ -1,2 +1,2 @@
WARNING: qjson-bad-pdf-version1.json (offset 119): invalid PDF version (must be x.y)
WARNING: qjson-bad-pdf-version1.json (offset 35): invalid PDF version (must be x.y)
qpdf: qjson-bad-pdf-version1.json: errors found in JSON

View File

@ -1,10 +1,5 @@
{
"version": 2,
"parameters": {
"decodelevel": "none"
},
"qpdf": {
"jsonversion": 2,
"qpdf-v2": {
"pdfversion": [],
"maxobjectid": 6,
"objects": {

View File

@ -1,2 +1,2 @@
WARNING: qjson-bad-pdf-version2.json (offset 119): invalid PDF version (must be x.y)
WARNING: qjson-bad-pdf-version2.json (offset 35): invalid PDF version (must be x.y)
qpdf: qjson-bad-pdf-version2.json: errors found in JSON

View File

@ -1,10 +1,5 @@
{
"version": 2,
"parameters": {
"decodelevel": "none"
},
"qpdf": {
"jsonversion": 2,
"qpdf-v2": {
"pdfversion": "1.3",
"maxobjectid": 6
}

View File

@ -1,2 +1,2 @@
WARNING: qjson-missing-objects.json: "qpdf.objects" was not seen
WARNING: qjson-missing-objects.json: "qpdf-v2.objects" was not seen
qpdf: qjson-missing-objects.json: errors found in JSON

View File

@ -1,10 +1,5 @@
{
"version": 2,
"parameters": {
"decodelevel": "none"
},
"qpdf": {
"jsonversion": 2,
"qpdf-v2": {
"pdfversion": "1.3",
"maxobjectid": 6,
"objects": {

View File

@ -1,2 +1,2 @@
WARNING: qjson-missing-trailer.json: "qpdf.objects.trailer" was not seen
WARNING: qjson-missing-trailer.json: "qpdf-v2.objects.trailer" was not seen
qpdf: qjson-missing-trailer.json: errors found in JSON

View File

@ -1,72 +0,0 @@
{
"version": 2,
"parameters": {
"decodelevel": "none"
},
"qpdf": {
"pdfversion": "1.3",
"maxobjectid": 6,
"objects": {
"obj:1 0 R": {
"value": {
"/Pages": "2 0 R",
"/Type": "/Catalog"
}
},
"obj:2 0 R": {
"value": {
"/Count": 1,
"/Kids": [
"3 0 R"
],
"/Type": "/Pages"
}
},
"obj:3 0 R": {
"value": {
"/Contents": "4 0 R",
"/MediaBox": [
0,
0,
612,
792
],
"/Parent": "2 0 R",
"/Resources": {
"/Font": {
"/F1": "6 0 R"
},
"/ProcSet": "5 0 R"
},
"/Type": "/Page"
}
},
"obj:4 0 R": {
"stream": {
"data": "QlQKICAvRjEgMjQgVGYKICA3MiA3MjAgVGQKICAoUG90YXRvKSBUagpFVAo=",
"dict": {}
}
},
"obj:5 0 R": {
"value": [
"/PDF",
"/Text"
]
},
"obj:6 0 R": {
"value": {
"/BaseFont": "/Helvetica",
"/Encoding": "/WinAnsiEncoding",
"/Subtype": "/Type1",
"/Type": "/Font"
}
},
"trailer": {
"value": {
"/Root": "1 0 R",
"/Size": 7
}
}
}
}
}

View File

@ -1,2 +0,0 @@
WARNING: qjson-no-json-version.json: "qpdf.jsonversion" was not seen
qpdf: qjson-no-json-version.json: errors found in JSON

View File

@ -1,10 +1,5 @@
{
"version": 2,
"parameters": {
"decodelevel": "none"
},
"qpdf": {
"jsonversion": 2,
"qpdf-v2": {
"maxobjectid": 6,
"objects": {
"obj:1 0 R": {

View File

@ -1,2 +1,2 @@
WARNING: qjson-no-pdf-version.json: "qpdf.pdfversion" was not seen
WARNING: qjson-no-pdf-version.json: "qpdf-v2.pdfversion" was not seen
qpdf: qjson-no-pdf-version.json: errors found in JSON

View File

@ -1,10 +1,5 @@
{
"version": 2,
"parameters": {
"decodelevel": "none"
},
"qpdf": {
"jsonversion": 2,
"qpdf-v2": {
"pdfversion": "1.3",
"maxobjectid": 6,
"objects": {

View File

@ -1,7 +1,7 @@
WARNING: qjson-obj-key-errors.json (obj:2 0 R, offset 302): object must have exactly one of "value" or "stream"
WARNING: qjson-obj-key-errors.json (obj:3 0 R, offset 600): object must have exactly one of "value" or "stream"
WARNING: qjson-obj-key-errors.json (obj:4 0 R, offset 768): "stream" is missing "dict"
WARNING: qjson-obj-key-errors.json (obj:4 0 R, offset 768): "stream" must have exactly one of "data" or "datafile"
WARNING: qjson-obj-key-errors.json (obj:5 0 R, offset 858): "stream" must have exactly one of "data" or "datafile"
WARNING: qjson-obj-key-errors.json (trailer, offset 1236): "trailer" is missing "value"
WARNING: qjson-obj-key-errors.json (obj:2 0 R, offset 218): object must have exactly one of "value" or "stream"
WARNING: qjson-obj-key-errors.json (obj:3 0 R, offset 516): object must have exactly one of "value" or "stream"
WARNING: qjson-obj-key-errors.json (obj:4 0 R, offset 684): "stream" is missing "dict"
WARNING: qjson-obj-key-errors.json (obj:4 0 R, offset 684): "stream" must have exactly one of "data" or "datafile"
WARNING: qjson-obj-key-errors.json (obj:5 0 R, offset 774): "stream" must have exactly one of "data" or "datafile"
WARNING: qjson-obj-key-errors.json (trailer, offset 1152): "trailer" is missing "value"
qpdf: qjson-obj-key-errors.json: errors found in JSON

View File

@ -1,10 +1,5 @@
{
"version": 2,
"parameters": {
"decodelevel": "none"
},
"qpdf": {
"jsonversion": 2,
"qpdf-v2": {
"pdfversion": "1.3",
"maxobjectid": 6,
"objects": {

View File

@ -1,2 +1,2 @@
WARNING: qjson-object-not-dict.json (offset 184): "obj:1 0 R" must be a dictionary
WARNING: qjson-object-not-dict.json (offset 100): "obj:1 0 R" must be a dictionary
qpdf: qjson-object-not-dict.json: errors found in JSON

View File

@ -1,6 +1,5 @@
{
"qpdf": {
"jsonversion": 2,
"qpdf-v2": {
"pdfversion": "1.7",
"objects": false
}

View File

@ -1,3 +1,3 @@
WARNING: qjson-objects-not-dict.json (offset 77): "objects" must be a dictionary
WARNING: qjson-objects-not-dict.json: "qpdf.objects.trailer" was not seen
WARNING: qjson-objects-not-dict.json (offset 58): "objects" must be a dictionary
WARNING: qjson-objects-not-dict.json: "qpdf-v2.objects.trailer" was not seen
qpdf: qjson-objects-not-dict.json: errors found in JSON

View File

@ -1,6 +1,5 @@
{
"qpdf": {
"jsonversion": 2,
"qpdf-v2": {
"pdfversion": "1.7",
"objects": {
"obj:1 0 R": {

View File

@ -1,5 +1,5 @@
WARNING: qjson-stream-dict-not-dict.json (obj:1 0 R, offset 137): "stream.dict" must be a dictionary
WARNING: qjson-stream-dict-not-dict.json (obj:1 0 R, offset 137): unrecognized string value
WARNING: qjson-stream-dict-not-dict.json (obj:1 0 R, offset 117): "stream" must have exactly one of "data" or "datafile"
WARNING: qjson-stream-dict-not-dict.json: "qpdf.objects.trailer" was not seen
WARNING: qjson-stream-dict-not-dict.json (obj:1 0 R, offset 118): "stream.dict" must be a dictionary
WARNING: qjson-stream-dict-not-dict.json (obj:1 0 R, offset 118): unrecognized string value
WARNING: qjson-stream-dict-not-dict.json (obj:1 0 R, offset 98): "stream" must have exactly one of "data" or "datafile"
WARNING: qjson-stream-dict-not-dict.json: "qpdf-v2.objects.trailer" was not seen
qpdf: qjson-stream-dict-not-dict.json: errors found in JSON

View File

@ -1,6 +1,5 @@
{
"qpdf": {
"jsonversion": 2,
"qpdf-v2": {
"pdfversion": "1.7",
"objects": {
"obj:1 0 R": {

View File

@ -1,3 +1,3 @@
WARNING: qjson-stream-not-dict.json (obj:1 0 R, offset 118): "stream" must be a dictionary
WARNING: qjson-stream-not-dict.json: "qpdf.objects.trailer" was not seen
WARNING: qjson-stream-not-dict.json (obj:1 0 R, offset 99): "stream" must be a dictionary
WARNING: qjson-stream-not-dict.json: "qpdf-v2.objects.trailer" was not seen
qpdf: qjson-stream-not-dict.json: errors found in JSON

View File

@ -1,10 +1,5 @@
{
"version": 2,
"parameters": {
"decodelevel": "none"
},
"qpdf": {
"jsonversion": 2,
"qpdf-v2": {
"pdfversion": "1.3",
"maxobjectid": 6,
"objects": {

View File

@ -1,2 +1,2 @@
WARNING: qjson-trailer-not-dict.json (trailer, offset 1327): "trailer.value" must be a dictionary
WARNING: qjson-trailer-not-dict.json (trailer, offset 1243): "trailer.value" must be a dictionary
qpdf: qjson-trailer-not-dict.json: errors found in JSON

View File

@ -1,10 +1,5 @@
{
"version": 2,
"parameters": {
"decodelevel": "none"
},
"qpdf": {
"jsonversion": 2,
"qpdf-v2": {
"pdfversion": "1.3",
"maxobjectid": 6,
"objects": {

View File

@ -1,2 +1,2 @@
WARNING: qjson-trailer-stream.json (trailer, offset 1327): the trailer may not be a stream
WARNING: qjson-trailer-stream.json (trailer, offset 1243): the trailer may not be a stream
qpdf: qjson-trailer-stream.json: errors found in JSON

View File

@ -18,11 +18,8 @@ my $n_tests = 0;
my @badfiles = (
'no-qpdf-object',
'no-json-version',
'no-pdf-version',
'top-level-scalar',
'bad-json-version1',
'bad-json-version2',
'bad-pdf-version1',
'bad-pdf-version2',
'top-level-array',
@ -44,7 +41,7 @@ foreach my $f (@badfiles)
{
$td->runtest("bad: $f",
{$td->COMMAND =>
"qpdf --create-from-json=qjson-$f.json a.pdf"},
"qpdf --json-input qjson-$f.json a.pdf"},
{$td->FILE => "qjson-$f.out", $td->EXIT_STATUS => 2},
$td->NORMALIZE_NEWLINES);
}