aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2019-01-05 03:07:36 +0100
committerJay Berkenbilt <ejb@ql.org>2019-01-05 03:33:14 +0100
commitab9f4cc212d03c2716a9144dcd4b11db330112ef (patch)
treeed103259b2f530ca4a362f592bade8f643051283
parent2e342ee5bb4dfaab04229f6b8dfe9e457aeefd96 (diff)
downloadqpdf-ab9f4cc212d03c2716a9144dcd4b11db330112ef.tar.zst
Split help string
It was too long for some compilers.
-rw-r--r--qpdf/qpdf.cc683
1 files changed, 339 insertions, 344 deletions
diff --git a/qpdf/qpdf.cc b/qpdf/qpdf.cc
index 2443a412..bde83bfd 100644
--- a/qpdf/qpdf.cc
+++ b/qpdf/qpdf.cc
@@ -646,8 +646,6 @@ class ArgParser
std::vector<int> parseNumrange(char const* range, int max,
bool throw_error = false);
- static char const* help;
-
int argc;
char** argv;
Options& o;
@@ -939,7 +937,345 @@ ArgParser::argCopyright()
void
ArgParser::argHelp()
{
- std::cout << help;
+ std::cout
+ // 12345678901234567890123456789012345678901234567890123456789012345678901234567890
+ << "Usage: qpdf [ options ] { infilename | --empty } [ outfilename ]\n"
+ << "\n"
+ << "An option summary appears below. Please see the documentation for details.\n"
+ << "\n"
+ << "If @filename appears anywhere in the command-line, each line of filename\n"
+ << "will be interpreted as an argument. No interpolation is done. Line\n"
+ << "terminators are stripped. @- can be specified to read from standard input.\n"
+ << "\n"
+ << "Note that when contradictory options are provided, whichever options are\n"
+ << "provided last take precedence.\n"
+ << "\n"
+ << "\n"
+ << "Basic Options\n"
+ << "-------------\n"
+ << "\n"
+ << "--version show version of qpdf\n"
+ << "--copyright show qpdf's copyright and license information\n"
+ << "--help show command-line argument help\n"
+ << "--completion-bash output a bash complete command you can eval\n"
+ << "--completion-zsh output a zsh complete command you can eval\n"
+ << "--password=password specify a password for accessing encrypted files\n"
+ << "--verbose provide additional informational output\n"
+ << "--progress give progress indicators while writing output\n"
+ << "--no-warn suppress warnings\n"
+ << "--linearize generated a linearized (web optimized) file\n"
+ << "--copy-encryption=file copy encryption parameters from specified file\n"
+ << "--encryption-file-password=password\n"
+ << " password used to open the file from which encryption\n"
+ << " parameters are being copied\n"
+ << "--encrypt options -- generate an encrypted file\n"
+ << "--decrypt remove any encryption on the file\n"
+ << "--password-is-hex-key treat primary password option as a hex-encoded key\n"
+ << "--pages options -- select specific pages from one or more files\n"
+ << "--collate causes files specified in --pages to be collated\n"
+ << " rather than concatenated\n"
+ << "--rotate=[+|-]angle[:page-range]\n"
+ << " rotate each specified page 90, 180, or 270 degrees;\n"
+ << " rotate all pages if no page range is given\n"
+ << "--split-pages=[n] write each output page to a separate file\n"
+ << "\n"
+ << "Note that you can use the @filename or @- syntax for any argument at any\n"
+ << "point in the command. This provides a good way to specify a password without\n"
+ << "having to explicitly put it on the command line.\n"
+ << "\n"
+ << "If none of --copy-encryption, --encrypt or --decrypt are given, qpdf will\n"
+ << "preserve any encryption data associated with a file.\n"
+ << "\n"
+ << "Note that when copying encryption parameters from another file, all\n"
+ << "parameters will be copied, including both user and owner passwords, even\n"
+ << "if the user password is used to open the other file. This works even if\n"
+ << "the owner password is not known.\n"
+ << "\n"
+ << "The --password-is-hex-key option overrides the normal computation of\n"
+ << "encryption keys. It only applies to the password used to open the main\n"
+ << "file. This option is not ordinarily useful but can be helpful for forensic\n"
+ << "or investigatory purposes. See manual for further discussion.\n"
+ << "\n"
+ << "The --rotate flag can be used to specify pages to rotate pages either\n"
+ << "90, 180, or 270 degrees. The page range is specified in the same\n"
+ << "format as with the --pages option, described below. Repeat the option\n"
+ << "to rotate multiple groups of pages. If the angle is preceded by + or -,\n"
+ << "it is added to or subtracted from the original rotation. Otherwise, the\n"
+ << "rotation angle is set explicitly to the given value.\n"
+ << "\n"
+ << "If --split-pages is specified, each page is written to a separate output\n"
+ << "file. File names are generated as follows:\n"
+ << "* If the string %d appears in the output file name, it is replaced with a\n"
+ << " zero-padded page range starting from 1\n"
+ << "* Otherwise, if the output file name ends in .pdf (case insensitive), a\n"
+ << " zero-padded page range, preceded by a dash, is inserted before the file\n"
+ << " extension\n"
+ << "* Otherwise, the file name is appended with a zero-padded page range\n"
+ << " preceded by a dash.\n"
+ << "Page ranges are single page numbers for single-page groups or first-last\n"
+ << "for multipage groups.\n"
+ << "\n"
+ << "\n"
+ << "Encryption Options\n"
+ << "------------------\n"
+ << "\n"
+ << " --encrypt user-password owner-password key-length flags --\n"
+ << "\n"
+ << "Note that -- terminates parsing of encryption flags.\n"
+ << "\n"
+ << "Either or both of the user password and the owner password may be\n"
+ << "empty strings.\n"
+ << "\n"
+ << "key-length may be 40, 128, or 256\n"
+ << "\n"
+ << "Additional flags are dependent upon key length.\n"
+ << "\n"
+ << " If 40:\n"
+ << "\n"
+ << " --print=[yn] allow printing\n"
+ << " --modify=[yn] allow document modification\n"
+ << " --extract=[yn] allow text/graphic extraction\n"
+ << " --annotate=[yn] allow comments and form fill-in and signing\n"
+ << "\n"
+ << " If 128:\n"
+ << "\n"
+ << " --accessibility=[yn] allow accessibility to visually impaired\n"
+ << " --extract=[yn] allow other text/graphic extraction\n"
+ << " --print=print-opt control printing access\n"
+ << " --modify=modify-opt control modify access\n"
+ << " --cleartext-metadata prevents encryption of metadata\n"
+ << " --use-aes=[yn] indicates whether to use AES encryption\n"
+ << " --force-V4 forces use of V=4 encryption handler\n"
+ << "\n"
+ << " If 256, options are the same as 128 with these exceptions:\n"
+ << " --force-V4 this option is not available with 256-bit keys\n"
+ << " --use-aes this option is always on with 256-bit keys\n"
+ << " --force-R5 forces use of deprecated R=5 encryption\n"
+ << "\n"
+ << " print-opt may be:\n"
+ << "\n"
+ << " full allow full printing\n"
+ << " low allow only low-resolution printing\n"
+ << " none disallow printing\n"
+ << "\n"
+ << " modify-opt may be:\n"
+ << "\n"
+ << " all allow full document modification\n"
+ << " annotate allow comment authoring and form operations\n"
+ << " form allow form field fill-in and signing\n"
+ << " assembly allow document assembly only\n"
+ << " none allow no modifications\n"
+ << "\n"
+ << "The default for each permission option is to be fully permissive.\n"
+ << "\n"
+ << "Specifying cleartext-metadata forces the PDF version to at least 1.5.\n"
+ << "Specifying use of AES forces the PDF version to at least 1.6. These\n"
+ << "options are both off by default.\n"
+ << "\n"
+ << "The --force-V4 flag forces the V=4 encryption handler introduced in PDF 1.5\n"
+ << "to be used even if not otherwise needed. This option is primarily useful\n"
+ << "for testing qpdf and has no other practical use.\n"
+ << "\n"
+ << "\n"
+ << "Page Selection Options\n"
+ << "----------------------\n"
+ << "\n"
+ << "These options allow pages to be selected from one or more PDF files.\n"
+ << "Whatever file is given as the primary input file is used as the\n"
+ << "starting point, but its pages are replaced with pages as specified.\n"
+ << "\n"
+ << "--keep-files-open=[yn]\n"
+ << "--pages file [ --password=password ] [ page-range ] ... --\n"
+ << "\n"
+ << "For each file that pages should be taken from, specify the file, a\n"
+ << "password needed to open the file (if any), and a page range. The\n"
+ << "password needs to be given only once per file. If any of the input\n"
+ << "files are the same as the primary input file or the file used to copy\n"
+ << "encryption parameters (if specified), you do not need to repeat the\n"
+ << "password here. The same file can be repeated multiple times. All\n"
+ << "non-page data (info, outlines, page numbers, etc. are taken from the\n"
+ << "primary input file. To discard this, use --empty as the primary\n"
+ << "input.\n"
+ << "\n"
+ << "By default, when more than 200 distinct files are specified, qpdf will\n"
+ << "close each file when not being referenced. With 200 files or fewer, all\n"
+ << "files will be kept open at the same time. This behavior can be overridden\n"
+ << "by specifying --keep-files-open=[yn]. Closing and opening files can have\n"
+ << "very high overhead on certain file systems, especially networked file\n"
+ << "systems.\n"
+ << "\n"
+ << "The page range is a set of numbers separated by commas, ranges of\n"
+ << "numbers separated dashes, or combinations of those. The character\n"
+ << "\"z\" represents the last page. A number preceded by an \"r\" indicates\n"
+ << "to count from the end, so \"r3-r1\" would be the last three pages of the\n"
+ << "document. Pages can appear in any order. Ranges can appear with a\n"
+ << "high number followed by a low number, which causes the pages to appear in\n"
+ << "reverse. Repeating a number will cause an error, but the manual discusses\n"
+ << "a workaround should you really want to include the same page twice.\n"
+ << "\n"
+ << "If the page range is omitted, the range of 1-z is assumed. qpdf decides\n"
+ << "that the page range is omitted if the range argument is either -- or a\n"
+ << "valid file name and not a valid range.\n"
+ << "\n"
+ << "The usual behavior of --pages is to add all pages from the first file,\n"
+ << "then all pages from the second file, and so on. If the --collate option\n"
+ << "is specified, then pages are collated instead. In other words, qpdf takes\n"
+ << "the first page from the first file, the first page from the second file,\n"
+ << "and so on until it runs out of files; then it takes the second page from\n"
+ << "each file, etc. When a file runs out of pages, it is skipped until all\n"
+ << "specified pages are taken from all files.\n"
+ << "\n"
+ << "See the manual for examples and a discussion of additional subtleties.\n"
+ << "\n"
+ << "\n"
+ << "Advanced Parsing Options\n"
+ << "-------------------------------\n"
+ << "\n"
+ << "These options control aspects of how qpdf reads PDF files. Mostly these are\n"
+ << "of use to people who are working with damaged files. There is little reason\n"
+ << "to use these options unless you are trying to solve specific problems.\n"
+ << "\n"
+ << "--suppress-recovery prevents qpdf from attempting to recover damaged files\n"
+ << "--ignore-xref-streams tells qpdf to ignore any cross-reference streams\n"
+ << "\n"
+ << "\n"
+ << "Advanced Transformation Options\n"
+ << "-------------------------------\n"
+ << "\n"
+ << "These transformation options control fine points of how qpdf creates\n"
+ << "the output file. Mostly these are of use only to people who are very\n"
+ << "familiar with the PDF file format or who are PDF developers.\n"
+ << "\n"
+ << "--stream-data=option controls transformation of stream data (below)\n"
+ << "--compress-streams=[yn] controls whether to compress streams on output\n"
+ << "--decode-level=option controls how to filter streams from the input\n"
+ << "--normalize-content=[yn] enables or disables normalization of content streams\n"
+ << "--object-streams=mode controls handing of object streams\n"
+ << "--preserve-unreferenced preserve unreferenced objects\n"
+ << "--preserve-unreferenced-resources\n"
+ << " preserve unreferenced page resources\n"
+ << "--newline-before-endstream always put a newline before endstream\n"
+ << "--coalesce-contents force all pages' content to be a single stream\n"
+ << "--flatten-annotations=option\n"
+ << " incorporate rendering of annotations into page\n"
+ << " contents including those for interactive form\n"
+ << " fields; may also want --generate-appearances\n"
+ << "--generate-appearances generate appearance streams for form fields\n"
+ << "--optimize-images compress images with DCT (JPEG) when advantageous\n"
+ << "--oi-min-width=w do not optimize images whose width is below w\n"
+ << "--oi-min-height=h do not optimize images whose height is below h\n"
+ << "--oi-min-area=a do not optimize images whose pixel count is below a\n"
+ << "--qdf turns on \"QDF mode\" (below)\n"
+ << "--linearize-pass1=file write intermediate pass of linearized file\n"
+ << " for debugging\n"
+ << "--min-version=version sets the minimum PDF version of the output file\n"
+ << "--force-version=version forces this to be the PDF version of the output file\n"
+ << "\n"
+ << "Options for --flatten-annotations are all, print, or screen. If the option\n"
+ << "is print, only annotations marked as print are included. If the option is\n"
+ << "screen, options marked as \"no view\" are excluded. Otherwise, annotations\n"
+ << "are flattened regardless of the presence of print or NoView flags. It is\n"
+ << "common for PDF files to have a flag set that appearance streams need to be\n"
+ << "regenerated. This happens when someone changes a form value with software\n"
+ << "that does not know how to render the new value. qpdf will not flatten form\n"
+ << "fields in files like this. If you get this warning, you have two choices:\n"
+ << "either use qpdf's --generate-appearances flag to tell qpdf to go ahead and\n"
+ << "regenerate appearances, or use some other tool to generate the appearances.\n"
+ << "qpdf does a pretty good job with most forms when only ASCII characters are\n"
+ << "used in form field values, but if your form fields contain other\n"
+ << "characters, rich text, or are other than left justified, you will get\n"
+ << "better results first saving with other software.\n"
+ << "\n"
+ << "Version numbers may be expressed as major.minor.extension-level, so 1.7.3\n"
+ << "means PDF version 1.7 at extension level 3.\n"
+ << "\n"
+ << "Values for stream data options:\n"
+ << "\n"
+ << " compress recompress stream data when possible (default)\n"
+ << " preserve leave all stream data as is\n"
+ << " uncompress uncompress stream data when possible\n"
+ << "\n"
+ << "Values for object stream mode:\n"
+ << "\n"
+ << " preserve preserve original object streams (default)\n"
+ << " disable don't write any object streams\n"
+ << " generate use object streams wherever possible\n"
+ << "\n"
+ << "When --compress-streams=n is specified, this overrides the default behavior\n"
+ << "of qpdf, which is to attempt compress uncompressed streams. Setting\n"
+ << "stream data mode to uncompress or preserve has the same effect.\n"
+ << "\n"
+ << "The --decode-level parameter may be set to one of the following values:\n"
+ << " none do not decode streams\n"
+ << " generalized decode streams compressed with generalized filters\n"
+ << " including LZW, Flate, and the ASCII encoding filters.\n"
+ << " specialized additionally decode streams with non-lossy specialized\n"
+ << " filters including RunLength\n"
+ << " all additionally decode streams with lossy filters\n"
+ << " including DCT (JPEG)\n"
+ << "\n"
+ << "In qdf mode, by default, content normalization is turned on, and the\n"
+ << "stream data mode is set to uncompress.\n"
+ << "\n"
+ << "Setting the minimum PDF version of the output file may raise the version\n"
+ << "but will never lower it. Forcing the PDF version of the output file may\n"
+ << "set the PDF version to a lower value than actually allowed by the file's\n"
+ << "contents. You should only do this if you have no other possible way to\n"
+ << "open the file or if you know that the file definitely doesn't include\n"
+ << "features not supported later versions.\n"
+ << "\n"
+ << "Testing, Inspection, and Debugging Options\n"
+ << "------------------------------------------\n"
+ << "\n"
+ << "These options can be useful for digging into PDF files or for use in\n"
+ << "automated test suites for software that uses the qpdf library.\n"
+ << "\n"
+ << "--deterministic-id generate deterministic /ID\n"
+ << "--static-id generate static /ID: FOR TESTING ONLY!\n"
+ << "--static-aes-iv use a static initialization vector for AES-CBC\n"
+ << " This is option is not secure! FOR TESTING ONLY!\n"
+ << "--no-original-object-ids suppress original object ID comments in qdf mode\n"
+ << "--show-encryption quickly show encryption parameters\n"
+ << "--show-encryption-key when showing encryption, reveal the actual key\n"
+ << "--check-linearization check file integrity and linearization status\n"
+ << "--show-linearization check and show all linearization data\n"
+ << "--show-xref show the contents of the cross-reference table\n"
+ << "--show-object=trailer|obj[,gen]\n"
+ << " show the contents of the given object\n"
+ << " --raw-stream-data show raw stream data instead of object contents\n"
+ << " --filtered-stream-data show filtered stream data instead of object contents\n"
+ << "--show-npages print the number of pages in the file\n"
+ << "--show-pages shows the object/generation number for each page\n"
+ << " --with-images also shows the object IDs for images on each page\n"
+ << "--check check file structure + encryption, linearization\n"
+ << "--json generate a json representation of the file\n"
+ << "--json-help describe the format of the json representation\n"
+ << "--json-key=key repeatable; prune json structure to include only\n"
+ << " specified keys. If absent, all keys are shown\n"
+ << "--json-object=trailer|[obj,gen]\n"
+ << " repeatable; include only specified objects in the\n"
+ << " \"objects\" section of the json. If absent, all\n"
+ << " objects are shown\n"
+ << "\n"
+ << "The json representation generated by qpdf is designed to facilitate\n"
+ << "processing of qpdf from other programming languages that have a hard\n"
+ << "time calling C++ APIs. Run qpdf --json-help for details on the format.\n"
+ << "The manual has more in-depth information about the json representation\n"
+ << "and certain compatibility guarantees that qpdf provides.\n"
+ << "\n"
+ << "The --raw-stream-data and --filtered-stream-data options are ignored\n"
+ << "unless --show-object is given. Either of these options will cause the\n"
+ << "stream data to be written to standard output.\n"
+ << "\n"
+ << "If --filtered-stream-data is given and --normalize-content=y is also\n"
+ << "given, qpdf will attempt to normalize the stream data as if it is a\n"
+ << "page content stream. This attempt will be made even if it is not a\n"
+ << "page content stream, in which case it will produce unusable results.\n"
+ << "\n"
+ << "Ordinarily, qpdf exits with a status of 0 on success or a status of 2\n"
+ << "if any errors occurred. If there were warnings but not errors, qpdf\n"
+ << "exits with a status of 3. If warnings would have been issued but --no-warn\n"
+ << "was given, an exit status of 3 is still used.\n";
}
void
@@ -1732,347 +2068,6 @@ ArgParser::handleBashArguments()
argv[argc] = 0;
}
-char const* ArgParser::help = "\
-\n\
-Usage: qpdf [ options ] { infilename | --empty } [ outfilename ]\n\
-\n\
-An option summary appears below. Please see the documentation for details.\n\
-\n\
-If @filename appears anywhere in the command-line, each line of filename\n\
-will be interpreted as an argument. No interpolation is done. Line\n\
-terminators are stripped. @- can be specified to read from standard input.\n\
-\n\
-Note that when contradictory options are provided, whichever options are\n\
-provided last take precedence.\n\
-\n\
-\n\
-Basic Options\n\
--------------\n\
-\n\
---version show version of qpdf\n\
---copyright show qpdf's copyright and license information\n\
---help show command-line argument help\n\
---completion-bash output a bash complete command you can eval\n\
---completion-zsh output a zsh complete command you can eval\n\
---password=password specify a password for accessing encrypted files\n\
---verbose provide additional informational output\n\
---progress give progress indicators while writing output\n\
---no-warn suppress warnings\n\
---linearize generated a linearized (web optimized) file\n\
---copy-encryption=file copy encryption parameters from specified file\n\
---encryption-file-password=password\n\
- password used to open the file from which encryption\n\
- parameters are being copied\n\
---encrypt options -- generate an encrypted file\n\
---decrypt remove any encryption on the file\n\
---password-is-hex-key treat primary password option as a hex-encoded key\n\
---pages options -- select specific pages from one or more files\n\
---collate causes files specified in --pages to be collated\n\
- rather than concatenated\n\
---rotate=[+|-]angle[:page-range]\n\
- rotate each specified page 90, 180, or 270 degrees;\n\
- rotate all pages if no page range is given\n\
---split-pages=[n] write each output page to a separate file\n\
-\n\
-Note that you can use the @filename or @- syntax for any argument at any\n\
-point in the command. This provides a good way to specify a password without\n\
-having to explicitly put it on the command line.\n\
-\n\
-If none of --copy-encryption, --encrypt or --decrypt are given, qpdf will\n\
-preserve any encryption data associated with a file.\n\
-\n\
-Note that when copying encryption parameters from another file, all\n\
-parameters will be copied, including both user and owner passwords, even\n\
-if the user password is used to open the other file. This works even if\n\
-the owner password is not known.\n\
-\n\
-The --password-is-hex-key option overrides the normal computation of\n\
-encryption keys. It only applies to the password used to open the main\n\
-file. This option is not ordinarily useful but can be helpful for forensic\n\
-or investigatory purposes. See manual for further discussion.\n\
-\n\
-The --rotate flag can be used to specify pages to rotate pages either\n\
-90, 180, or 270 degrees. The page range is specified in the same\n\
-format as with the --pages option, described below. Repeat the option\n\
-to rotate multiple groups of pages. If the angle is preceded by + or -,\n\
-it is added to or subtracted from the original rotation. Otherwise, the\n\
-rotation angle is set explicitly to the given value.\n\
-\n\
-If --split-pages is specified, each page is written to a separate output\n\
-file. File names are generated as follows:\n\
-* If the string %d appears in the output file name, it is replaced with a\n\
- zero-padded page range starting from 1\n\
-* Otherwise, if the output file name ends in .pdf (case insensitive), a\n\
- zero-padded page range, preceded by a dash, is inserted before the file\n\
- extension\n\
-* Otherwise, the file name is appended with a zero-padded page range\n\
- preceded by a dash.\n\
-Page ranges are single page numbers for single-page groups or first-last\n\
-for multipage groups.\n\
-\n\
-\n\
-Encryption Options\n\
-------------------\n\
-\n\
- --encrypt user-password owner-password key-length flags --\n\
-\n\
-Note that -- terminates parsing of encryption flags.\n\
-\n\
-Either or both of the user password and the owner password may be\n\
-empty strings.\n\
-\n\
-key-length may be 40, 128, or 256\n\
-\n\
-Additional flags are dependent upon key length.\n\
-\n\
- If 40:\n\
-\n\
- --print=[yn] allow printing\n\
- --modify=[yn] allow document modification\n\
- --extract=[yn] allow text/graphic extraction\n\
- --annotate=[yn] allow comments and form fill-in and signing\n\
-\n\
- If 128:\n\
-\n\
- --accessibility=[yn] allow accessibility to visually impaired\n\
- --extract=[yn] allow other text/graphic extraction\n\
- --print=print-opt control printing access\n\
- --modify=modify-opt control modify access\n\
- --cleartext-metadata prevents encryption of metadata\n\
- --use-aes=[yn] indicates whether to use AES encryption\n\
- --force-V4 forces use of V=4 encryption handler\n\
-\n\
- If 256, options are the same as 128 with these exceptions:\n\
- --force-V4 this option is not available with 256-bit keys\n\
- --use-aes this option is always on with 256-bit keys\n\
- --force-R5 forces use of deprecated R=5 encryption\n\
-\n\
- print-opt may be:\n\
-\n\
- full allow full printing\n\
- low allow only low-resolution printing\n\
- none disallow printing\n\
-\n\
- modify-opt may be:\n\
-\n\
- all allow full document modification\n\
- annotate allow comment authoring and form operations\n\
- form allow form field fill-in and signing\n\
- assembly allow document assembly only\n\
- none allow no modifications\n\
-\n\
-The default for each permission option is to be fully permissive.\n\
-\n\
-Specifying cleartext-metadata forces the PDF version to at least 1.5.\n\
-Specifying use of AES forces the PDF version to at least 1.6. These\n\
-options are both off by default.\n\
-\n\
-The --force-V4 flag forces the V=4 encryption handler introduced in PDF 1.5\n\
-to be used even if not otherwise needed. This option is primarily useful\n\
-for testing qpdf and has no other practical use.\n\
-\n\
-\n\
-Page Selection Options\n\
-----------------------\n\
-\n\
-These options allow pages to be selected from one or more PDF files.\n\
-Whatever file is given as the primary input file is used as the\n\
-starting point, but its pages are replaced with pages as specified.\n\
-\n\
---keep-files-open=[yn]\n\
---pages file [ --password=password ] [ page-range ] ... --\n\
-\n\
-For each file that pages should be taken from, specify the file, a\n\
-password needed to open the file (if any), and a page range. The\n\
-password needs to be given only once per file. If any of the input\n\
-files are the same as the primary input file or the file used to copy\n\
-encryption parameters (if specified), you do not need to repeat the\n\
-password here. The same file can be repeated multiple times. All\n\
-non-page data (info, outlines, page numbers, etc. are taken from the\n\
-primary input file. To discard this, use --empty as the primary\n\
-input.\n\
-\n\
-By default, when more than 200 distinct files are specified, qpdf will\n\
-close each file when not being referenced. With 200 files or fewer, all\n\
-files will be kept open at the same time. This behavior can be overridden\n\
-by specifying --keep-files-open=[yn]. Closing and opening files can have\n\
-very high overhead on certain file systems, especially networked file\n\
-systems.\n\
-\n\
-The page range is a set of numbers separated by commas, ranges of\n\
-numbers separated dashes, or combinations of those. The character\n\
-\"z\" represents the last page. A number preceded by an \"r\" indicates\n\
-to count from the end, so \"r3-r1\" would be the last three pages of the\n\
-document. Pages can appear in any order. Ranges can appear with a\n\
-high number followed by a low number, which causes the pages to appear in\n\
-reverse. Repeating a number will cause an error, but the manual discusses\n\
-a workaround should you really want to include the same page twice.\n\
-\n\
-If the page range is omitted, the range of 1-z is assumed. qpdf decides\n\
-that the page range is omitted if the range argument is either -- or a\n\
-valid file name and not a valid range.\n\
-\n\
-The usual behavior of --pages is to add all pages from the first file,\n\
-then all pages from the second file, and so on. If the --collate option\n\
-is specified, then pages are collated instead. In other words, qpdf takes\n\
-the first page from the first file, the first page from the second file,\n\
-and so on until it runs out of files; then it takes the second page from\n\
-each file, etc. When a file runs out of pages, it is skipped until all\n\
-specified pages are taken from all files.\n\
-\n\
-See the manual for examples and a discussion of additional subtleties.\n\
-\n\
-\n\
-Advanced Parsing Options\n\
--------------------------------\n\
-\n\
-These options control aspects of how qpdf reads PDF files. Mostly these are\n\
-of use to people who are working with damaged files. There is little reason\n\
-to use these options unless you are trying to solve specific problems.\n\
-\n\
---suppress-recovery prevents qpdf from attempting to recover damaged files\n\
---ignore-xref-streams tells qpdf to ignore any cross-reference streams\n\
-\n\
-\n\
-Advanced Transformation Options\n\
--------------------------------\n\
-\n\
-These transformation options control fine points of how qpdf creates\n\
-the output file. Mostly these are of use only to people who are very\n\
-familiar with the PDF file format or who are PDF developers.\n\
-\n\
---stream-data=option controls transformation of stream data (below)\n\
---compress-streams=[yn] controls whether to compress streams on output\n\
---decode-level=option controls how to filter streams from the input\n\
---normalize-content=[yn] enables or disables normalization of content streams\n\
---object-streams=mode controls handing of object streams\n\
---preserve-unreferenced preserve unreferenced objects\n\
---preserve-unreferenced-resources\n\
- preserve unreferenced page resources\n\
---newline-before-endstream always put a newline before endstream\n\
---coalesce-contents force all pages' content to be a single stream\n\
---flatten-annotations=option\n\
- incorporate rendering of annotations into page\n\
- contents including those for interactive form\n\
- fields; may also want --generate-appearances\n\
---generate-appearances generate appearance streams for form fields\n\
---optimize-images compress images with DCT (JPEG) when advantageous\n\
---oi-min-width=w do not optimize images whose width is below w\n\
---oi-min-height=h do not optimize images whose height is below h\n\
---oi-min-area=a do not optimize images whose pixel count is below a\n\
---qdf turns on \"QDF mode\" (below)\n\
---linearize-pass1=file write intermediate pass of linearized file\n\
- for debugging\n\
---min-version=version sets the minimum PDF version of the output file\n\
---force-version=version forces this to be the PDF version of the output file\n\
-\n\
-Options for --flatten-annotations are all, print, or screen. If the option\n\
-is print, only annotations marked as print are included. If the option is\n\
-screen, options marked as \"no view\" are excluded. Otherwise, annotations\n\
-are flattened regardless of the presence of print or NoView flags. It is\n\
-common for PDF files to have a flag set that appearance streams need to be\n\
-regenerated. This happens when someone changes a form value with software\n\
-that does not know how to render the new value. qpdf will not flatten form\n\
-fields in files like this. If you get this warning, you have two choices:\n\
-either use qpdf's --generate-appearances flag to tell qpdf to go ahead and\n\
-regenerate appearances, or use some other tool to generate the appearances.\n\
-qpdf does a pretty good job with most forms when only ASCII characters are\n\
-used in form field values, but if your form fields contain other\n\
-characters, rich text, or are other than left justified, you will get\n\
-better results first saving with other software.\n\
-\n\
-Version numbers may be expressed as major.minor.extension-level, so 1.7.3\n\
-means PDF version 1.7 at extension level 3.\n\
-\n\
-Values for stream data options:\n\
-\n\
- compress recompress stream data when possible (default)\n\
- preserve leave all stream data as is\n\
- uncompress uncompress stream data when possible\n\
-\n\
-Values for object stream mode:\n\
-\n\
- preserve preserve original object streams (default)\n\
- disable don't write any object streams\n\
- generate use object streams wherever possible\n\
-\n\
-When --compress-streams=n is specified, this overrides the default behavior\n\
-of qpdf, which is to attempt compress uncompressed streams. Setting\n\
-stream data mode to uncompress or preserve has the same effect.\n\
-\n\
-The --decode-level parameter may be set to one of the following values:\n\
- none do not decode streams\n\
- generalized decode streams compressed with generalized filters\n\
- including LZW, Flate, and the ASCII encoding filters.\n\
- specialized additionally decode streams with non-lossy specialized\n\
- filters including RunLength\n\
- all additionally decode streams with lossy filters\n\
- including DCT (JPEG)\n\
-\n\
-In qdf mode, by default, content normalization is turned on, and the\n\
-stream data mode is set to uncompress.\n\
-\n\
-Setting the minimum PDF version of the output file may raise the version\n\
-but will never lower it. Forcing the PDF version of the output file may\n\
-set the PDF version to a lower value than actually allowed by the file's\n\
-contents. You should only do this if you have no other possible way to\n\
-open the file or if you know that the file definitely doesn't include\n\
-features not supported later versions.\n\
-\n\
-Testing, Inspection, and Debugging Options\n\
-------------------------------------------\n\
-\n\
-These options can be useful for digging into PDF files or for use in\n\
-automated test suites for software that uses the qpdf library.\n\
-\n\
---deterministic-id generate deterministic /ID\n\
---static-id generate static /ID: FOR TESTING ONLY!\n\
---static-aes-iv use a static initialization vector for AES-CBC\n\
- This is option is not secure! FOR TESTING ONLY!\n\
---no-original-object-ids suppress original object ID comments in qdf mode\n\
---show-encryption quickly show encryption parameters\n\
---show-encryption-key when showing encryption, reveal the actual key\n\
---check-linearization check file integrity and linearization status\n\
---show-linearization check and show all linearization data\n\
---show-xref show the contents of the cross-reference table\n\
---show-object=trailer|obj[,gen]\n\
- show the contents of the given object\n\
- --raw-stream-data show raw stream data instead of object contents\n\
- --filtered-stream-data show filtered stream data instead of object contents\n\
---show-npages print the number of pages in the file\n\
---show-pages shows the object/generation number for each page\n\
- --with-images also shows the object IDs for images on each page\n\
---check check file structure + encryption, linearization\n\
---json generate a json representation of the file\n\
---json-help describe the format of the json representation\n\
---json-key=key repeatable; prune json structure to include only\n\
- specified keys. If absent, all keys are shown\n\
---json-object=trailer|[obj,gen]\n\
- repeatable; include only specified objects in the\n\
- \"objects\" section of the json. If absent, all\n\
- objects are shown\n\
-\n\
-The json representation generated by qpdf is designed to facilitate\n\
-processing of qpdf from other programming languages that have a hard\n\
-time calling C++ APIs. Run qpdf --json-help for details on the format.\n\
-The manual has more in-depth information about the json representation\n\
-and certain compatibility guarantees that qpdf provides.\n\
-\n\
-The --raw-stream-data and --filtered-stream-data options are ignored\n\
-unless --show-object is given. Either of these options will cause the\n\
-stream data to be written to standard output.\n\
-\n\
-If --filtered-stream-data is given and --normalize-content=y is also\n\
-given, qpdf will attempt to normalize the stream data as if it is a\n\
-page content stream. This attempt will be made even if it is not a\n\
-page content stream, in which case it will produce unusable results.\n\
-\n\
-Ordinarily, qpdf exits with a status of 0 on success or a status of 2\n\
-if any errors occurred. If there were warnings but not errors, qpdf\n\
-exits with a status of 3. If warnings would have been issued but --no-warn\n\
-was given, an exit status of 3 is still used.\n\
-\n";
-
void usageExit(std::string const& msg)
{
std::cerr