Provided by: qpdf_11.9.0-1.1build1_amd64 bug

NAME

       qpdf - PDF transformation software

SYNOPSIS

       qpdf [ options ] infilename [ outfilename ]

DESCRIPTION

       The  qpdf  program  is used to convert one PDF file to another equivalent PDF file.  It is
       capable of performing a variety of transformations such as linearization  (also  known  as
       web  optimization  or fast web viewing), encryption, and decryption of PDF files.  It also
       has many options for inspecting or checking PDF files, some of which are useful  primarily
       to PDF developers.

       For a summary of qpdf's options, please run qpdf --help. A complete manual can be found at
       https://qpdf.readthedocs.io.

USAGE (basic invocation)

       Read a PDF file, apply transformations or modifications, and write a new PDF file.

       Usage: qpdf [infile] [options] [outfile]
          OR  qpdf --help[={topic|--option}]

       •      infile, options, and outfile may be  in  any  order  as  long  as  infile  precedes
              outfile.

       •      Use --empty in place of an input file for a zero-page, empty input

       •      Use --replace-input in place of an output file to overwrite the input file with the
              output

       •      outfile may be - to write to stdout; reading from stdin is not supported

       •      @filename is an argument file; each line is  treated  as  a  separate  command-line
              argument

       •      @- may be used to read arguments from stdin

       •      Later options may override earlier options if contradictory

       Related Options:

       --empty -- use empty file as input
              Use in place of infile for an empty input. Especially useful with --pages.

       --replace-input -- overwrite input with output
              Use in place of outfile to overwrite the input file with the output.

       --job-json-file -- job JSON file
              --job-json-file=file

              Specify  the  name  of a file whose contents are expected to contain a QPDFJob JSON
              file. Run qpdf --job-json-help for a description of the JSON input file format.

EXIT-STATUS (meanings of qpdf's exit codes)

       Meaning of exit codes:

       •      0: no errors or warnings

       •      1: not used by qpdf but may be used by the shell if unable to invoke qpdf

       •      2: errors detected

       •      3: warnings detected, unless --warning-exit-0 is given

       Related Options:

       --warning-exit-0 -- exit 0 even with warnings
              Use exit status 0 instead of 3 when warnings are present. When combined with  --no-
              warn, warnings are completely ignored.

COMPLETION (shell completion)

       Shell  completion  is  supported  with bash and zsh. Use eval $(qpdf --completion-bash) or
       eval  $(qpdf  --completion-zsh)  to  enable.  The  QPDF_EXECUTABLE  environment   variable
       overrides the path to qpdf that these commands output.

       Related Options:

       --completion-bash -- enable bash completion
              Output a command that enables bash completion

       --completion-zsh -- enable zsh completion
              Output a command that enables zsh completion

HELP (information about qpdf)

       Help  options  provide  some information about qpdf itself. Help options are only valid as
       the first and only command-line argument.

       Related Options:

       --help -- provide help
              --help[=--option|topic]

              --help: provide general information and a list of topics  --help=--option:  provide
              help on a specific option --help=topic: provide help on a topic

       --version -- show qpdf version
              Display the version of qpdf.

       --copyright -- show copyright information
              Display copyright and license information.

       --show-crypto -- show available crypto providers
              Show  a  list  of available crypto providers, one per line. The default provider is
              shown first.

       --job-json-help -- show format of job JSON
              Describe the format of the QPDFJob JSON input used by --job-json-file.

GENERAL (general options)

       General options control qpdf's behavior in ways that  are  not  directly  related  to  the
       operation it is performing.

       Related Options:

       --password -- password for encrypted file
              --password=password

              Specify  a  password  for  an  encrypted,  password-protected file.  Not needed for
              encrypted files without a password.

       --password-file -- read password from a file
              --password-file=filename

              The first line of the specified file is used as the  password.   This  is  used  in
              place of the --password option.

       --verbose -- print additional information
              Output  additional  information  about  various  things  qpdf  is  doing, including
              information about files created and operations performed.

       --progress -- show progress when writing
              Indicate progress when writing files.

       --no-warn -- suppress printing of warning messages
              Suppress printing of warning messages. If warnings  were  encountered,  qpdf  still
              exits with exit status 3.  Use --warning-exit-0 with --no-warn to completely ignore
              warnings.

       --deterministic-id -- generate ID deterministically
              Generate a secure, random document ID only using static information,  such  as  the
              page contents. Does not use the file's name or attributes or the current time.

       --allow-weak-crypto -- allow insecure cryptographic algorithms
              Allow  creation  of  files  with  weak  cryptographic  algorithms.  This  option is
              necessary to create 40-bit files or 128-bit files that use RC4 encryption.

       --keep-files-open -- manage keeping multiple files open
              --keep-files-open=[y|n]

              When qpdf needs to work with many files, as when merging large  numbers  of  files,
              explicitly  indicate  whether files should be kept open. The default behavior is to
              determine this based on the number of files.

       --keep-files-open-threshold -- set threshold for --keep-files-open
              --keep-files-open-threshold=count

              Set the threshold used by --keep-files-open, overriding the default value of 200.

ADVANCED-CONTROL (tweak qpdf's behavior)

       Advanced control options control qpdf's behavior in ways  that  would  normally  never  be
       needed  by  a  user  but that may be useful to developers or people investigating problems
       with specific files.

       Related Options:

       --password-is-hex-key -- provide hex-encoded encryption key
              Provide the underlying file encryption key as  a  hex-encoded  string  rather  than
              supplying a password. This is an expert option.

       --suppress-password-recovery -- don't try different password encodings
              Suppress qpdf's usual behavior of attempting different encodings of a password that
              contains non-ASCII Unicode characters if the first attempt doesn't succeed.

       --password-mode -- tweak how qpdf encodes passwords
              --password-mode=mode

              Fine-tune how qpdf controls encoding of Unicode passwords. Valid options are  auto,
              bytes, hex-bytes, and unicode.

       --suppress-recovery -- suppress error recovery
              Avoid attempting to recover when errors are found in a file's cross reference table
              or stream lengths.

       --ignore-xref-streams -- use xref tables rather than streams
              Ignore any cross-reference streams in the file,  falling  back  to  cross-reference
              tables or triggering document recovery.

TRANSFORMATION (make structural PDF changes)

       The  options  below  tell  qpdf to apply transformations that change the structure without
       changing the content.

       Related Options:

       --linearize -- linearize (web-optimize) output
              Create linearized (web-optimized) output files.

       --encrypt -- start encryption options
              --encrypt [options] --

              Run qpdf --help=encryption for details.

       --decrypt -- remove encryption from input file
              Create an unencrypted output file even if the input file  was  encrypted.  Normally
              qpdf  preserves  whatever  encryption  was  present  on the input file. This option
              overrides that behavior.

       --remove-restrictions -- remove security restrictions from input file
              Remove restrictions associated with  digitally  signed  PDF  files.   This  may  be
              combined with --decrypt to allow free editing of previously signed/encrypted files.
              This option invalidates and disables any digital signatures but leaves their visual
              appearances intact.

       --copy-encryption -- copy another file's encryption details
              --copy-encryption=file

              Copy  encryption  details  from  the specified file instead of preserving the input
              file's encryption. Use --encryption-file-password to specify the encryption  file's
              password.

       --encryption-file-password -- supply password for --copy-encryption
              --encryption-file-password=password

              If  the  file  named  in  --copy-encryption requires a password, use this option to
              supply the password.

       --qdf -- enable viewing PDF code in a text editor
              Create a PDF file suitable for viewing in a text editor and even editing.  This  is
              for  editing  the  PDF  code,  not  the  page  contents.   All  streams that can be
              uncompressed are uncompressed, and content  streams  are  normalized,  among  other
              changes.  The companion tool "fix-qdf" can be used to repair hand-edited QDF files.
              QDF is a feature specific to the qpdf tool. Please see the "QDF  Mode"  chapter  in
              the manual.

       --no-original-object-ids -- omit original object IDs in qdf
              Omit  comments in a QDF file indicating the object ID an object had in the original
              file.

       --compress-streams -- compress uncompressed streams
              --compress-streams=[y|n]

              Setting --compress-streams=n prevents qpdf from compressing  uncompressed  streams.
              This can be useful if you are leaving some streams uncompressed intentionally.

       --decode-level -- control which streams to uncompress
              --decode-level=parameter

              When  uncompressing  streams,  control which types of compression schemes should be
              uncompressed:

       •      none: don't uncompress anything. This is the default with --json-output.

       •      generalized: uncompress  streams  compressed  with  a  general-purpose  compression
              algorithm. This is the default except when --json-output is given.

       •      specialized:  in addition to generalized, also uncompress streams compressed with a
              special-purpose but non-lossy compression scheme

       •      all:  in  addition  to  specialized,  uncompress  streams  compressed  with   lossy
              compression  schemes  like  JPEG  (DCT)  qpdf  does  not know how to uncompress all
              compression schemes.

       --stream-data -- control stream compression
              --stream-data=parameter

              This option controls how streams are compressed in the output.  It is less granular
              than the newer options, --compress-streams and --decode-level.

              Parameters:

       •      compress: same as --compress-streams=y --decode-level=generalized

       •      preserve: same as --compress-streams=n --decode-level=none

       •      uncompress: same as --compress-streams=n --decode-level=generalized

       --recompress-flate -- uncompress and recompress flate
              The  default generalized compression scheme used by PDF is flate, which is the same
              as used by zip and gzip. Usually qpdf just leaves these alone.  This  option  tells
              qpdf to uncompress and recompress streams compressed with flate. This can be useful
              when combined with --compression-level.

       --compression-level -- set compression level for flate
              --compression-level=level

              Set a compression  level  from  1  (least,  fastest)  to  9  (most,  slowest)  when
              compressing  files  with  flate  (used  in  zip  and  gzip),  which  is the default
              compression for most PDF files.  You need --recompress-flate with  this  option  if
              you want to change already compressed streams.

       --normalize-content -- fix newlines in content streams
              --normalize-content=[y|n]

              Normalize  newlines  to UNIX-style newlines in PDF content streams, which is useful
              for viewing them in a programmer's text editor across multiple platforms.  This  is
              also turned on by --qdf.

       --object-streams -- control use of object streams
              --object-streams=mode

              Control what qpdf does regarding object streams. Options:

       •      preserve: preserve original object streams, if any (the default)

       •      disable: create output files with no object streams

       •      generate: create object streams, and compress objects when possible

       --preserve-unreferenced -- preserve unreferenced objects
              Preserve all objects from the input even if not referenced.

       --remove-unreferenced-resources -- remove unreferenced page resources
              --remove-unreferenced-resources=parameter

              Remove  from  a page's resource dictionary any resources that are not referenced in
              the page's contents. Parameters: "auto" (default), "yes", "no".

       --preserve-unreferenced-resources -- use --remove-unreferenced-resources=no
              Synonym for --remove-unreferenced-resources=no. Use that instead.

       --newline-before-endstream -- force a newline before endstream
              For an extra newline before endstream. Using this option enables qpdf  to  preserve
              PDF/A when rewriting such files.

       --coalesce-contents -- combine content streams
              If  a  page has an array of content streams, concatenate them into a single content
              stream.

       --externalize-inline-images -- convert inline to regular images
              Convert inline images to regular images.

       --ii-min-bytes -- set minimum size for --externalize-inline-images
              --ii-min-bytes=size-in-bytes

              Don't externalize inline images smaller than this size. The default is 1,024. Use 0
              for no minimum.

       --min-version -- set minimum PDF version
              --min-version=version

              Force  the  PDF  version  of  the  output to be at least the specified version. The
              version number format is "major.minor[.extension-level]", which  sets  the  version
              header  to  "major.minor"  and  the  extension  level, if specified, to "extension-
              level".

       --force-version -- set output PDF version
              --force-version=version

              Force the output PDF file's PDF version header to be the specified value,  even  if
              the file uses features that may not be available in that version.

PAGE-RANGES (page range syntax)

       A full description of the page range syntax, with examples, can be found in the manual. In
       summary, a range is a comma-separated list of groups. A group is a number or  a  range  of
       numbers separated by a dash. A group may be prepended by x to exclude its members from the
       previous group. A number may be one of

       •      <n>        where <n> represents a number is the <n>th page

       •      r<n>       is the <n>th page from the end

       •      z          the last page, same as r1

       •      a,b,c      pages a, b, and c

       •      a-b        pages a through b inclusive; if a > b, this counts down

       •      a-b,xc     pages a through b except page c

       •      a-b,xc-d   pages a through b except pages c through d

              You can append :even or :odd to select every other page from the resulting  set  of
              pages, where :odd starts with the first page and :even starts with the second page.
              These are odd and even pages from the resulting set, not based on the original page
              numbers.

MODIFICATION (change parts of the PDF)

       Modification  options make systematic changes to certain parts of the PDF, causing the PDF
       to render differently from the original.

       Related Options:

       --pages -- begin page selection
              --pages [--file=]file [options] [...] --

              Run qpdf --help=page-selection for details.

       --file -- source for pages
              --file=file

              Specify the file for the  current  page  operation.  This  is  used  with  --pages,
              --overlay,  and  --underlay  and appears between the option and the terminating --.
              Run qpdf --help=page-selection for details.

       --range -- page range
              --range=numeric-range

              Specify the page range for the current page operation with --pages. If omitted, all
              pages  are  selected. This is used with --pages and appears between --pages and --.
              Run qpdf --help=page-selection for details.

       --collate -- collate with --pages
              --collate[=n[,m,...]]

              Collate rather than concatenate pages  specified  with  --pages.   With  a  numeric
              parameter,  collate  in groups of n. The default is 1. With comma-separated numeric
              parameters, take n  from  the  first  file,  m  from  the  second,  etc.  Run  qpdf
              --help=page-selection for additional details.

       --split-pages -- write pages to separate files
              --split-pages[=n]

              This  option  causes qpdf to create separate output files for each page or group of
              pages rather than a single output file.

              File names are generated from the specified output file as follows:

       •      If the string %d appears in the output file name, it is replaced with a zero-padded
              page range starting from 1

       •      Otherwise,  if  the output file name ends in .pdf (case insensitive), a zero-padded
              page range, preceded by a dash, is inserted before the file extension

       •      Otherwise, the file name is appended with a zero-padded page range  preceded  by  a
              dash.

              Page ranges are single page numbers for single-page groups or first-last for multi-
              page groups.

       --overlay -- begin overlay options
              --overlay file [options] --

              Overlay pages from another file on the output.   Run  qpdf  --help=overlay-underlay
              for details.

       --underlay -- begin underlay options
              --underlay file [options] --

              Underlay  pages  from another file on the output.  Run qpdf --help=overlay-underlay
              for details.

       --flatten-rotation -- remove rotation from page dictionary
              For each page that is rotated using the  /Rotate  key  in  the  page's  dictionary,
              remove  the /Rotate key and implement the identical rotation semantics by modifying
              the page's contents.  This can be useful if a broken PDF viewer fails  to  properly
              consider page rotation metadata.

       --flatten-annotations -- push annotations into content
              --flatten-annotations=parameter

              Push  page annotations into the content streams. This may be necessary in some case
              when printing or splitting files.  Parameters: "all", "print", "screen".

       --rotate -- rotate pages
              --rotate=[+|-]angle[:page-range]

              Rotate specified pages by multiples of 90 degrees  specifying  either  absolute  or
              relative  angles.  "angle" may be 0, 90, 180, or 270. You almost always want to use
              +angle or -angle rather than just angle, as  discussed  in  the  manual.  Run  qpdf
              --help=page-ranges for help with page ranges.

       --generate-appearances -- generate appearances for form fields
              PDF  form  fields consist of values and appearances, which may be inconsistent with
              each other if a form field value has been modified without updating its appearance.
              This  option  tells  qpdf  to  generate  new  appearance  streams.  There  are some
              limitations, which are discussed in the manual.

       --optimize-images -- use efficient compression for images
              Attempt to  use  DCT  (JPEG)  compression  for  images  that  fall  within  certain
              constraints  as long as doing so decreases the size in bytes of the image. See also
              help for the following options:
                --oi-min-width
                --oi-min-height
                --oi-min-area
                --keep-inline-images

       --oi-min-width -- minimum width for --optimize-images
              --oi-min-width=width

              Don't optimize images whose width is below the specified value.

       --oi-min-height -- minimum height for --optimize-images
              --oi-min-height=height

              Don't optimize images whose height is below the specified value.

       --oi-min-area -- minimum area for --optimize-images
              --oi-min-area=area-in-pixels

              Don't optimize images whose area in pixels is below the specified value.

       --keep-inline-images -- exclude inline images from optimization
              Prevent inline images from being considered by --optimize-images.

       --remove-page-labels -- remove explicit page numbers
              Exclude page labels (explicit page numbers) from the output file.

       --set-page-labels -- number pages for the entire document
              --set-page-labels label-spec ... --

              Set page labels (explicit page numbers) for the entire file.  Each  label-spec  has
              the form

              first-page:[type][/start[/prefix]]

              where

       •      "first-page"  represents  a  sequential  page  number using the same format as page
              ranges: a number, a number preceded by "r" to indicate counting from  the  end,  or
              "z" indicating the last page

       •      "type"  is  one  of  -  D:  Arabic  numerals  (digits)  -  A: Upper-case alphabetic
              characters - a: Lower-case alphabetic characters - R: Upper-case Roman  numerals  -
              r: Lower-case Roman numerals - omitted: the page number does not appear, though the
              prefix,
                if specified will still appear

       •      "start" must be a number >= 1

       •      "prefix"` may be any string and is prepended to each page label

              The first label spec must have a first-page value of 1, indicating the  first  page
              of  the document. If multiple page label specs are specified, they must be given in
              increasing order.

              If multiple page label specs are specified, they must be given in increasing order.

              A given page label spec causes pages  to  be  numbered  according  to  that  scheme
              starting with first-page and continuing until the next label spec or the end of the
              document. If you want to omit numbering starting at a certain  page,  you  can  use
              first-page: as the spec.

              Example:  "1:r  5:D"  would  number  the  first  four  pages i through iv, then the
              remaining pages with Arabic numerals starting with 1  and  continuing  sequentially
              until the end of the document. For additional examples, please consult the manual.

ENCRYPTION (create encrypted files)

       Create encrypted files. Usage:

       --encrypt         [--user-password=user-password]        [--owner-password=owner-password]
       --bits=key-length [options] --

       OR

       --encrypt user-password owner-password key-length [options] --

       The first form, with flags for the passwords  and  bit  length,  was  introduced  in  qpdf
       11.7.0.  Only  the --bits option is is mandatory.  This form allows you to use any text as
       the password. If passwords are specified, they must be given before the --bits option.

       The second form has been in qpdf since the beginning and wil  continue  to  be  supported.
       Either or both of user-password and owner-password may be empty strings.

       The  key-length  parameter  must be either 40, 128, or 256. The user and/or owner password
       may be omitted. Omitting either password enables the PDF  file  to  be  opened  without  a
       password.  Specifying  the  same  value  for the user and owner password and specifying an
       empty owner password are both considered insecure.

       Encryption options are terminated by "--" by itself.

       40-bit encryption  is  insecure,  as  is  128-bit  encryption  without  AES.  Use  256-bit
       encryption unless you have a specific reason to use an insecure format, such as testing or
       compatibility with very old viewers.  You  must  use  the  --allow-weak-crypto  to  create
       encrypted  files  that use insecure cryptographic algorithms. The --allow-weak-crypto flag
       appears outside of --encrypt ... -- (before --encrypt or after --).

       Available options vary by key length. Not all readers respect all restrictions.  Different
       PDF readers respond differently to various combinations of options. Sometimes a PDF viewer
       may show you restrictions that differ from what you selected. This is probably not  a  bug
       in qpdf.

       Options for 40-bit only:
         --annotate=[y|n]         restrict comments, filling forms, and signing
         --extract=[y|n]          restrict text/graphic extraction
         --modify=[y|n]           restrict document modification
         --print=[y|n]            restrict printing

       Options for 128-bit or 256-bit:
         --accessibility=[y|n]    restrict accessibility (usually ignored)
         --annotate=[y|n]         restrict commenting/filling form fields
         --assemble=[y|n]         restrict document assembly
         --extract=[y|n]          restrict text/graphic extraction
         --form=[y|n]             restrict filling form fields
         --modify-other=[y|n]     restrict other modifications
         --modify=modify-opt      control modify access by level
         --print=print-opt        control printing access
         --cleartext-metadata     prevent encryption of metadata

       For 128-bit only:
         --use-aes=[y|n]          indicates whether to use AES encryption
         --force-V4               forces use of V=4 encryption handler

       For 256-bit only:
         --force-R5               forces use of deprecated R=5 encryption
         --allow-insecure         allow user password with empty owner password

       Values for print-opt:
         none                     disallow printing
         low                      allow only low-resolution printing
         full                     allow full printing

       Values for modify-opt:
         none                     allow no modifications
         assembly                 allow document assembly only
         form                     assembly + filling in form fields and signing
         annotate                 form + commenting and modifying forms
         all                      allow full document modification

       Related Options:

       --user-password -- specify user password
              --user-password=user-password

              Set the user password of the encrypted file.

       --owner-password -- specify owner password
              --owner-password=owner-password

              Set the owner password of the encrypted file.

       --bits -- specify encryption key length
              --bits={48|128|256}

              Specify  the  encryption  key length. For best security, always use a key length of
              256.

       --accessibility -- restrict document accessibility
              --accessibility=[y|n]

              This option is ignored except with very old encryption formats.   The  current  PDF
              specification  does not allow restriction of document accessibility. This option is
              not available with 40-bit encryption.

       --annotate -- restrict document annotation
              --annotate=[y|n]

              Enable/disable modifying annotations including making comments and filling in  form
              fields.  For  128-bit  and 256-bit encryption, this also enables editing, creating,
              and  deleting  form  fields  unless  --modify-other=n  or  --modify=none  is   also
              specified.

       --assemble -- restrict document assembly
              --assemble=[y|n]

              Enable/disable document assembly (rotation and reordering of pages). This option is
              not available with 40-bit encryption.

       --extract -- restrict text/graphic extraction
              --extract=[y|n]

              Enable/disable text/graphic extraction for purposes other than accessibility.

       --form -- restrict form filling
              --form=[y|n]

              Enable/disable whether filling form fields  is  allowed  even  if  modification  of
              annotations is disabled. This option is not available with 40-bit encryption.

       --modify-other -- restrict other modifications
              --modify-other=[y|n]

              Enable/disable  modifications  not controlled by --assemble, --annotate, or --form.
              --modify-other=n is implied by any of the other --modify options.  This  option  is
              not available with 40-bit encryption.

       --modify -- restrict document modification
              --modify=modify-opt

              For  40-bit  files,  modify-opt  may  only  be  y  or n and controls all aspects of
              document modification.

              For 128-bit and 256-bit encryption, modify-opt values allow enabling and  disabling
              levels  of  restriction  in  a manner similar to how some PDF creation tools do it.
              modify-opt values map to other combinations of options as follows:

              all:  allow  full  modification  (the  default)  annotate:  --modify-other=n  form:
              --modify-other=n  --annotate=n  assembly:  --modify-other=n  --annotate=n  --form=n
              none: --modify-other=n --annotate=n --form=n --assemble=n

       --print -- restrict printing
              --print=print-opt

              Control what kind of printing is allowed. For 40-bit encryption, print-opt may only
              be y or n and enables or disables all printing. For 128-bit and 256-bit encryption,
              print-opt may have the following values:

              none: disallow printing low: allow low-resolution printing only  full:  allow  full
              printing (the default)

       --cleartext-metadata -- don't encrypt metadata
              If  specified, don't encrypt document metadata even when encrypting the rest of the
              document. This option is not available with 40-bit encryption.

       --use-aes -- use AES with 128-bit encryption
              --use-aes=[y|n]

              Enables/disables use of the more secure AES  encryption  with  128-bit  encryption.
              Specifying  --use-aes=y  forces  the PDF version to be at least 1.6. This option is
              only available with 128-bit  encryption.  The  default  is  "n"  for  compatibility
              reasons. Use 256-bit encryption instead.

       --allow-insecure -- allow empty owner passwords
              Allow creation of PDF files with empty owner passwords and non-empty user passwords
              when using 256-bit encryption.

       --force-V4 -- force V=4 in encryption dictionary
              This option is for testing and is never needed in practice  since  qpdf  does  this
              automatically when needed.

       --force-R5 -- use unsupported R=5 encryption
              Use an undocumented, unsupported, deprecated encryption algorithm that existed only
              in Acrobat version IX. This option should not  be  used  except  for  compatibility
              testing.

PAGE-SELECTION (select pages from one or more files)

       Use the --pages option to select pages from multiple files. Usage:

       qpdf in.pdf --pages --file=input-file     [--range=page-range] [--password=password] [...]
       -- out.pdf

       OR

       qpdf in.pdf --pages input-file [--password=password] [page-range]     [...] -- out.pdf

       Between --pages and the -- that terminates pages option, repeat the following:

       --file=filename [--range=page-range] [--password=password] [options]

       For compatibility, the file and range can be specified positionally. qpdf  versions  prior
       to  11.9.0  require  --password=password  to immediately follow the filename. In the older
       syntax, repeat the following:

       filename [--password=password] [page-range]

       Document-level information, such as outlines, tags, etc., is  taken  from  in.pdf  and  is
       preserved in out.pdf. You can use --empty in place of an input file to start from an empty
       file and just copy pages equally from all files. You can use "." as a  shorthand  for  the
       primary input file (if not --empty). In the above example, "."  would refer to in.pdf.

       Use  --password=password  to  specify the password for a password-protected input file. If
       the same input file is used more than once, you only need to supply the password the first
       time. If the page range is omitted, all pages are selected.

       Run qpdf --help=page-ranges for help with page ranges.

       Use  --collate=n to cause pages to be collated in groups of n pages (default 1) instead of
       concatenating the input.  Use --collate=i,j,k,... to take i from the first,  then  j  from
       the second, then k from the third, then i from the first, etc.

       Examples:

       •      Start  with  in.pdf  and append all pages from a.pdf and the even pages from b.pdf,
              and write  the  output  to  out.pdf.  Document-level  information  from  in.pdf  is
              retained. Note the use of "." to refer to in.pdf.

                qpdf in.pdf --pages . a.pdf b.pdf 1-z:even -- out.pdf

       •      Take  all the pages from a.pdf, all the pages from b.pdf in reverse, and only pages
              3 and 6 from c.pdf and write the result to out.pdf. Use password "x" to open b.pdf:

                qpdf --empty --pages a.pdf b.pdf --password=x z-1 c.pdf 3,6

              More examples are in the manual.

OVERLAY-UNDERLAY (overlay/underlay pages from other files)

       These options allow pages from another file to be overlaid or  underlaid  on  the  primary
       output.  Overlaid pages are drawn on top of the destination page and may obscure the page.
       Underlaid pages are drawn below the destination page. Usage:

       {--overlay|--underlay} [--file=]file
             [--password=password]
             [--to=page-range]
             [--from=[page-range]]
             [--repeat=page-range]
             --

       Note the use of "--" by itself to terminate overlay/underlay options.

       For overlay and underlay, a file and optional password are specified, along with a  series
       of optional page ranges. The default behavior is that each page of the overlay or underlay
       file is imposed on the corresponding page of the primary  output  until  it  runs  out  of
       pages,  and  any  extra pages are ignored. You can also give a page range with --repeat to
       cause those pages to be repeated after the original pages are exhausted.

       This options are  repeatable.  Pages  will  be  stacked  in  order  of  appearance:  first
       underlays, then the original page, then overlays.

       Run qpdf --help=page-ranges for help with page ranges.

       Related Options:

       --to -- destination pages for underlay/overlay
              --to=page-range

              Specify  the range of pages in the primary output to apply overlay/underlay to. See
              qpdf --help=page-ranges for help with the page range syntax.

       --from -- source pages for underlay/overlay
              --from=[page-range]

              Specify pages from the overlay/underlay file that are applied  to  the  destination
              pages.  See  qpdf  --help=page-ranges for help with the page range syntax. The page
              range may be omitted if --repeat is used.

       --repeat -- overlay/underlay pages to repeat
              --repeat=page-range

              Specify pages from the overlay/underlay that are repeated after "from"  pages  have
              been exhausted. See qpdf --help=page-ranges for help with the page range syntax.

ATTACHMENTS (work with embedded files)

       It  is  possible to list, add, or delete embedded files (also known as attachments) and to
       copy attachments from other files. See help on individual options for  details.  Run  qpdf
       --help=add-attachment   for   additional   details  about  adding  attachments.  See  also
       --help=--list-attachments and --help=--show-attachment.

       Related Options:

       --add-attachment -- start add attachment options
              --add-attachment file [options] --

              The --add-attachment  flag  and  its  options  may  be  repeated  to  add  multiple
              attachments. Run qpdf --help=add-attachment for details.

       --copy-attachments-from -- start copy attachment options
              --copy-attachments-from file [options] --

              The   --copy-attachments-from  flag  and  its  options  may  be  repeated  to  copy
              attachments from multiple files. Run qpdf --help=copy-attachments for details.

       --remove-attachment -- remove an embedded file
              --remove-attachment=key

              Remove an embedded file using its key. Get the key with --list-attachments.

PDF-DATES (PDF date format)

       When a date is required, the date should conform to the  PDF  date  format  specification,
       which  is  "D:yyyymmddhhmmssz"  where  "z" is either literally upper case "Z" for UTC or a
       timezone offset in the form "-hh'mm'" or "+hh'mm'".  Negative  timezone  offsets  indicate
       time before UTC. Positive offsets indicate how far after. For example, US Eastern Standard
       Time  (America/New_York)  is  "-05'00'",  and  Indian  Standard  Time  (Asia/Calcutta)  is
       "+05'30'".

       Examples:

       •      D:20210207161528-05'00'   February 7, 2021 at 4:15:28 p.m.

       •      D:20210207211528Z         February 7, 2021 at 21:15:28 UTC

ADD-ATTACHMENT (attach (embed) files)

       The options listed below appear between --add-attachment and its terminating "--".

       Related Options:

       --key -- specify attachment key
              --key=key

              Specify  the key to use for the attachment in the embedded files table. It defaults
              to the last element (basename) of the attached file's filename.

       --filename -- set attachment's displayed filename
              --filename=name

              Specify the filename to be used  for  the  attachment.  This  is  what  is  usually
              displayed  to  the  user  and  is the name most graphical PDF viewers will use when
              saving a file. It defaults to the last element (basename) of  the  attached  file's
              filename.

       --creationdate -- set attachment's creation date
              --creationdate=date

              Specify the attachment's creation date in PDF format; defaults to the current time.
              Run qpdf --help=pdf-dates for information about the date format.

       --moddate -- set attachment's modification date
              --moddate=date

              Specify the attachment's modification date in PDF format; defaults to  the  current
              time. Run qpdf --help=pdf-dates for information about the date format.

       --mimetype -- attachment mime type, e.g. application/pdf
              --mimetype=type/subtype

              Specify  the  mime  type  for  the attachment, such as text/plain, application/pdf,
              image/png, etc.

       --description -- set attachment's description
              --description="text"

              Supply descriptive text for the attachment, displayed by some PDF viewers.

       --replace -- replace attachment with same key
              Indicate that any existing attachment with the same key should be replaced  by  the
              new  attachment.  Otherwise,  qpdf gives an error if an attachment with that key is
              already present.

COPY-ATTACHMENTS (copy attachments from another file)

       The options listed below appear between --copy-attachments-from and its terminating "--".

       To copy attachments from a password-protected file, use the --password  option  after  the
       file name.

       Related Options:

       --prefix -- key prefix for copying attachments
              --prefix=prefix

              Prepend a prefix to each key; may be needed if there are duplicate attachment keys.
              This affects the key only, not the file name.

INSPECTION (inspect PDF files)

       These options provide tools for inspecting PDF files. When any  of  the  options  in  this
       section are specified, no output file may be given.

       Related Options:

       --is-encrypted -- silently test whether a file is encrypted
              Silently exit with a code indicating the file's encryption status:

              0: the file is encrypted 1: not used 2: the file is not encrypted

              This can be used with password-protected files even if you don't know the password.

       --requires-password -- silently test a file's password
              Silently exit with a code indicating the file's password status:

              0:  a  password, other than as supplied, is required 1: not used 2: the file is not
              encrypted 3: the file is encrypted, and correct password (if any) has been supplied

       --check -- partially check whether PDF is valid
              Check the structure of the PDF file as well as a number of  other  aspects  of  the
              file,  and write information about the file to standard output. Note that qpdf does
              not perform any validation of the actual PDF page content or  semantic  correctness
              of  the  PDF  file.  It merely checks that the PDF file is syntactically valid. See
              also qpdf --help=exit-status.

       --show-encryption -- information about encrypted files
              Show document encryption parameters. Also show the document's user password if  the
              owner  password  is given and the file was encrypted using older encryption formats
              that allow user password recovery.

       --show-encryption-key -- show key with --show-encryption
              When used with --show-encryption or --check, causes the underlying  encryption  key
              to be displayed.

       --check-linearization -- check linearization tables
              Check  to  see  whether  a file is linearized and, if so, whether the linearization
              hint tables are correct.

       --show-linearization -- show linearization hint tables
              Check and display all data in the linearization hint tables.

       --show-xref -- show cross reference data
              Show the contents of the cross-reference table or stream (object locations  in  the
              file)  in  a  human-readable  form. This is especially useful for files with cross-
              reference streams, which are stored in a binary format.

       --show-object -- show contents of an object
              --show-object={trailer|obj[,gen]}

              Show the contents of the given object. This is  especially  useful  for  inspecting
              objects that are inside of object streams (also known as "compressed objects").

       --raw-stream-data -- show raw stream data
              When used with --show-object, if the object is a stream, write the raw (compressed)
              binary stream data to standard output instead of the object's  contents.  See  also
              --filtered-stream-data.

       --filtered-stream-data -- show filtered stream data
              When  used  with  --show-object,  if  the  object  is  a stream, write the filtered
              (uncompressed, potentially binary) stream data to standard output  instead  of  the
              object's contents. See also --raw-stream-data.

       --show-npages -- show number of pages
              Print  the  number  of  pages  in  the  input file on a line by itself.  Useful for
              scripts.

       --show-pages -- display page dictionary information
              Show the object and generation number for each page dictionary object and for  each
              content stream associated with the page.

       --with-images -- include image details with --show-pages
              When  used  with --show-pages, also shows the object and generation numbers for the
              image objects on each page.

       --list-attachments -- list embedded files
              Show the key and stream number for each embedded file. Combine with  --verbose  for
              more detailed information.

       --show-attachment -- export an embedded file
              --show-attachment=key

              Write  the  contents of the specified attachment to standard output as binary data.
              Get the key with --list-attachments.

JSON (JSON output for PDF information)

       Show information about the PDF file in JSON format. Please see the  JSON  chapter  in  the
       qpdf manual for details.

       Related Options:

       --json -- show file in JSON format
              --json[=version]

              Generate  a JSON representation of the file. This is described in depth in the JSON
              section of the manual. "version"  may  be  a  specific  version  or  "latest"  (the
              default). Run qpdf --json-help for a description of the generated JSON object.

       --json-help -- show format of JSON output
              --json-help[=version]

              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.

       --json-key -- limit which keys are in JSON output
              --json-key=key

              This option is repeatable. If given, only the  specified  top-level  keys  will  be
              included  in  the  JSON  output. Otherwise, all keys will be included. With --json-
              output, when not given, only the "qpdf" key will appear in the output.

       --json-object -- limit which objects are in JSON
              --json-object={trailer|obj[,gen]}

              This option is repeatable. If given, only specified objects will be  shown  in  the
              "objects" key of the JSON output. Otherwise, all objects will be shown.

       --json-stream-data -- how to handle streams in json output
              --json-stream-data={none|inline|file}

              When  used  with --json, this option controls whether streams in json output should
              be omitted, written inline (base64-encoded) or written to  a  file.  If  "file"  is
              chosen,  the  file will be the name of the output file appended with -nnn where nnn
              is the object number. The prefix can be overridden with  --json-stream-prefix.  The
              default  is  "none",  except  when  --json-output  is  specified, in which case the
              default is "inline".

       --json-stream-prefix -- prefix for json stream data files
              --json-stream-prefix=file-prefix

              When used with  --json-stream-data=file,  --json-stream-data=file-prefix  sets  the
              prefix  for  stream  data files, overriding the default, which is to use the output
              file name. 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.

       --json-output -- apply defaults for JSON serialization
              --json-output[=version]

              Implies --json=version. Changes default values for certain options so that the JSON
              output written is the most faithful representation of the original PDF and contains
              no  additional  JSON  keys.  See also --json-stream-data, --json-stream-prefix, and
              --decode-level.

       --json-input -- input file is qpdf JSON
              Treat the input file as a JSON file in qpdf JSON format. See the "qpdf JSON Format"
              section of the manual for information about how to use this option.

       --update-from-json -- update a PDF from qpdf JSON
              --update-from-json=qpdf-json-file

              Update  a  PDF  file  from  a  JSON file. Please see the "qpdf JSON" chapter of the
              manual for information about how to use this option.

TESTING (options for testing or debugging)

       The options below are useful when writing automated test code that includes files  created
       by qpdf or when testing qpdf itself.

       Related Options:

       --static-id -- use a fixed document ID
              Use a fixed value for the document ID. This is intended for testing only. Never use
              it for production files. See also qpdf --help=--deterministic-id.

       --static-aes-iv -- use a fixed AES vector
              Use a static initialization vector for AES-CBC. This is intended for  testing  only
              so  that  output files can be reproducible. Never use it for production files. This
              option is not secure since it significantly weakens the encryption.

       --linearize-pass1 -- save pass 1 of linearization
              --linearize-pass1=file

              Write the first pass of linearization to the named file. The resulting file is  not
              a valid PDF file. This option is useful only for debugging qpdf.

       --test-json-schema -- test generated json against schema
              This  is  used by qpdf's test suite to check consistency between the output of qpdf
              --json and the output of qpdf --json-help.

       --report-memory-usage -- best effort report of memory usage
              This is used by qpdf's performance test suite  to  report  the  maximum  amount  of
              memory used in supported environments.

SEE ALSO

       For  a  summary of qpdf's options, please run qpdf --help.  A complete manual can be found
       at https://qpdf.readthedocs.io.