qpdf.1 43.1 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194
.\"
.\" This file is automatically generated by generate_auto_job.
.\" Edits will be automatically overwritten if the build is
.\" run in maintainer mode.
.\"
.TH QPDF "1" "" "qpdf version 11.9.0" "User Commands"
.SH NAME
qpdf \- PDF transformation software
.SH SYNOPSIS
.B qpdf
.RI "[ " options " ] " infilename " [ " outfilename " ]"
.SH 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.
.PP
For a summary of qpdf's options, please run \fBqpdf \-\-help\fR. A
complete manual can be found at https://qpdf.readthedocs.io.
.SH 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}]

.IP \[bu]
infile, options, and outfile may be in any order as long as infile
precedes outfile.
.IP \[bu]
Use --empty in place of an input file for a zero-page, empty input
.IP \[bu]
Use --replace-input in place of an output file to overwrite the
input file with the output
.IP \[bu]
outfile may be - to write to stdout; reading from stdin is not supported
.IP \[bu]
@filename is an argument file; each line is treated as a separate
command-line argument
.IP \[bu]
@- may be used to read arguments from stdin
.IP \[bu]
Later options may override earlier options if contradictory
.PP
Related Options:
.TP
.B --empty \-\- use empty file as input
Use in place of infile for an empty input. Especially useful
with --pages.
.TP
.B --replace-input \-\- overwrite input with output
Use in place of outfile to overwrite the input file with the output.
.TP
.B --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.
.SH EXIT-STATUS (meanings of qpdf's exit codes)
Meaning of exit codes:

.IP \[bu]
0: no errors or warnings
.IP \[bu]
1: not used by qpdf but may be used by the shell if unable to invoke qpdf
.IP \[bu]
2: errors detected
.IP \[bu]
3: warnings detected, unless --warning-exit-0 is given
.PP
Related Options:
.TP
.B --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.
.SH 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.
.PP
Related Options:
.TP
.B --completion-bash \-\- enable bash completion
Output a command that enables bash completion
.TP
.B --completion-zsh \-\- enable zsh completion
Output a command that enables zsh completion
.SH 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.
.PP
Related Options:
.TP
.B --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
.TP
.B --version \-\- show qpdf version
Display the version of qpdf.
.TP
.B --copyright \-\- show copyright information
Display copyright and license information.
.TP
.B --show-crypto \-\- show available crypto providers
Show a list of available crypto providers, one per line. The
default provider is shown first.
.TP
.B --job-json-help \-\- show format of job JSON
Describe the format of the QPDFJob JSON input used by
--job-json-file.
.SH GENERAL (general options)
General options control qpdf's behavior in ways that are not
directly related to the operation it is performing.
.PP
Related Options:
.TP
.B --password \-\- password for encrypted file
--password=password

Specify a password for an encrypted, password-protected file.
Not needed for encrypted files without a password.
.TP
.B --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.
.TP
.B --verbose \-\- print additional information
Output additional information about various things qpdf is
doing, including information about files created and operations
performed.
.TP
.B --progress \-\- show progress when writing
Indicate progress when writing files.
.TP
.B --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.
.TP
.B --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.
.TP
.B --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.
.TP
.B --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.
.TP
.B --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.
.SH 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.
.PP
Related Options:
.TP
.B --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.
.TP
.B --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.
.TP
.B --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.
.TP
.B --suppress-recovery \-\- suppress error recovery
Avoid attempting to recover when errors are found in a file's
cross reference table or stream lengths.
.TP
.B --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.
.SH TRANSFORMATION (make structural PDF changes)
The options below tell qpdf to apply transformations that change
the structure without changing the content.
.PP
Related Options:
.TP
.B --linearize \-\- linearize (web-optimize) output
Create linearized (web-optimized) output files.
.TP
.B --encrypt \-\- start encryption options
--encrypt [options] --

Run qpdf --help=encryption for details.
.TP
.B --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.
.TP
.B --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.
.TP
.B --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.
.TP
.B --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.
.TP
.B --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.
.TP
.B --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.
.TP
.B --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.
.TP
.B --decode-level \-\- control which streams to uncompress
--decode-level=parameter

When uncompressing streams, control which types of compression
schemes should be uncompressed:
.IP \[bu]
none: don't uncompress anything. This is the default with
--json-output.
.IP \[bu]
generalized: uncompress streams compressed with a
general-purpose compression algorithm. This is the default
except when --json-output is given.
.IP \[bu]
specialized: in addition to generalized, also uncompress
streams compressed with a special-purpose but non-lossy
compression scheme
.IP \[bu]
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.
.TP
.B --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:
.IP \[bu]
compress: same as --compress-streams=y --decode-level=generalized
.IP \[bu]
preserve: same as --compress-streams=n --decode-level=none
.IP \[bu]
uncompress: same as --compress-streams=n --decode-level=generalized
.TP
.B --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.
.TP
.B --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.
.TP
.B --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.
.TP
.B --object-streams \-\- control use of object streams
--object-streams=mode

Control what qpdf does regarding object streams. Options:
.IP \[bu]
preserve: preserve original object streams, if any (the default)
.IP \[bu]
disable: create output files with no object streams
.IP \[bu]
generate: create object streams, and compress objects when possible
.TP
.B --preserve-unreferenced \-\- preserve unreferenced objects
Preserve all objects from the input even if not referenced.
.TP
.B --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".
.TP
.B --preserve-unreferenced-resources \-\- use --remove-unreferenced-resources=no
Synonym for --remove-unreferenced-resources=no. Use that instead.
.TP
.B --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.
.TP
.B --coalesce-contents \-\- combine content streams
If a page has an array of content streams, concatenate them into
a single content stream.
.TP
.B --externalize-inline-images \-\- convert inline to regular images
Convert inline images to regular images.
.TP
.B --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.
.TP
.B --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".
.TP
.B --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.
.SH 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

.IP \[bu]
<n>        where <n> represents a number is the <n>th page
.IP \[bu]
r<n>       is the <n>th page from the end
.IP \[bu]
z          the last page, same as r1

.IP \[bu]
a,b,c      pages a, b, and c
.IP \[bu]
a-b        pages a through b inclusive; if a > b, this counts down
.IP \[bu]
a-b,xc     pages a through b except page c
.IP \[bu]
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.
.SH 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.
.PP
Related Options:
.TP
.B --pages \-\- begin page selection
--pages [--file=]file [options] [...] --

Run qpdf --help=page-selection for details.
.TP
.B --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.
.TP
.B --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.
.TP
.B --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.
.TP
.B --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:

.IP \[bu]
If the string %d appears in the output file name, it is replaced with a
zero-padded page range starting from 1
.IP \[bu]
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
.IP \[bu]
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.
.TP
.B --overlay \-\- begin overlay options
--overlay file [options] --

Overlay pages from another file on the output.
Run qpdf --help=overlay-underlay for details.
.TP
.B --underlay \-\- begin underlay options
--underlay file [options] --

Underlay pages from another file on the output.
Run qpdf --help=overlay-underlay for details.
.TP
.B --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.
.TP
.B --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".
.TP
.B --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.
.TP
.B --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.
.TP
.B --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
.TP
.B --oi-min-width \-\- minimum width for --optimize-images
--oi-min-width=width

Don't optimize images whose width is below the specified value.
.TP
.B --oi-min-height \-\- minimum height for --optimize-images
--oi-min-height=height

Don't optimize images whose height is below the specified value.
.TP
.B --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.
.TP
.B --keep-inline-images \-\- exclude inline images from optimization
Prevent inline images from being considered by --optimize-images.
.TP
.B --remove-page-labels \-\- remove explicit page numbers
Exclude page labels (explicit page numbers) from the output file.
.TP
.B --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

.IP \[bu]
"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
.IP \[bu]
"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
.IP \[bu]
"prefix"` may be any string and is prepended to each page
label

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.
.SH 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
.PP
Related Options:
.TP
.B --user-password \-\- specify user password
--user-password=user-password

Set the user password of the encrypted file.
.TP
.B --owner-password \-\- specify owner password
--owner-password=owner-password

Set the owner password of the encrypted file.
.TP
.B --bits \-\- specify encryption key length
--bits={48|128|256}

Specify the encryption key length. For best security, always use
a key length of 256.
.TP
.B --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.
.TP
.B --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.
.TP
.B --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.
.TP
.B --extract \-\- restrict text/graphic extraction
--extract=[y|n]

Enable/disable text/graphic extraction for purposes other than
accessibility.
.TP
.B --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.
.TP
.B --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.
.TP
.B --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
.TP
.B --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)
.TP
.B --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.
.TP
.B --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.
.TP
.B --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.
.TP
.B --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.
.TP
.B --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.
.SH 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:

.IP \[bu]
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

.IP \[bu]
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.
.SH 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.
.PP
Related Options:
.TP
.B --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.
.TP
.B --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.
.TP
.B --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.
.SH 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.
.PP
Related Options:
.TP
.B --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.
.TP
.B --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.
.TP
.B --remove-attachment \-\- remove an embedded file
--remove-attachment=key

Remove an embedded file using its key. Get the key with
--list-attachments.
.SH 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:
.IP \[bu]
D:20210207161528-05'00'   February 7, 2021 at 4:15:28 p.m.
.IP \[bu]
D:20210207211528Z         February 7, 2021 at 21:15:28 UTC
.SH ADD-ATTACHMENT (attach (embed) files)
The options listed below appear between --add-attachment and its
terminating "--".
.PP
Related Options:
.TP
.B --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.
.TP
.B --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.
.TP
.B --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.
.TP
.B --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.
.TP
.B --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.
.TP
.B --description \-\- set attachment's description
--description="text"

Supply descriptive text for the attachment, displayed by some
PDF viewers.
.TP
.B --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.
.SH 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.
.PP
Related Options:
.TP
.B --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.
.SH 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.
.PP
Related Options:
.TP
.B --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.
.TP
.B --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
.TP
.B --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.
.TP
.B --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.
.TP
.B --show-encryption-key \-\- show key with --show-encryption
When used with --show-encryption or --check, causes the
underlying encryption key to be displayed.
.TP
.B --check-linearization \-\- check linearization tables
Check to see whether a file is linearized and, if so, whether
the linearization hint tables are correct.
.TP
.B --show-linearization \-\- show linearization hint tables
Check and display all data in the linearization hint tables.
.TP
.B --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.
.TP
.B --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").
.TP
.B --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.
.TP
.B --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.
.TP
.B --show-npages \-\- show number of pages
Print the number of pages in the input file on a line by itself.
Useful for scripts.
.TP
.B --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.
.TP
.B --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.
.TP
.B --list-attachments \-\- list embedded files
Show the key and stream number for each embedded file. Combine
with --verbose for more detailed information.
.TP
.B --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.
.SH 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.
.PP
Related Options:
.TP
.B --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.
.TP
.B --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.
.TP
.B --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.
.TP
.B --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.
.TP
.B --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".
.TP
.B --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.
.TP
.B --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.
.TP
.B --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.
.TP
.B --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.
.SH 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.
.PP
Related Options:
.TP
.B --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.
.TP
.B --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.
.TP
.B --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.
.TP
.B --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.
.TP
.B --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.
.SH SEE ALSO
.PP
For a summary of qpdf's options, please run \fBqpdf \-\-help\fR.
A complete manual can be found at https://qpdf.readthedocs.io.