img2pdf

IMG2PDF(1) User Commands IMG2PDF(1)

NAME

   img2pdf - lossless conversion of raster images to pdf

DESCRIPTION

   usage: img2pdf [-h] [-v] [-V] [--from-file FILE] [-o out] [-C colorspace]

          [-D]  [--engine  engine]  [--first-frame-only]  [--include-thumbnails] [--pillow-limit-break] [--pdfa [PDFA]] [-S LxL] [-s LxL] [-b L[:L]] [-f FIT] [-a] [-r ROT] [--crop-border
          L[:L]] [--bleed-border L[:L]] [--trim-border L[:L]] [--art-border L[:L]] [--title title] [--author author] [--creator creator] [--producer producer]  [--creationdate  creation
          date]  [--moddate  moddate]  [--subject subject] [--keywords kw [kw ...]]  [--viewer-panes PANES] [--viewer-initial-page NUM] [--viewer-magnification MAG] [--viewer-page-layout
          LAYOUT] [--viewer-fit-window] [--viewer-center-window] [--viewer-fullscreen] [infile ...]

   Losslessly convert raster images to PDF without re-encoding PNG, JPEG, and JPEG2000 images. This leads to a lossless conversion of PNG, JPEG and JPEG2000 images with  the  only  added
   file  size  coming  from the PDF container itself.  Other raster graphics formats are losslessly stored using the same encoding that PNG uses.  For images with transparency, the alpha
   channel will be stored as a separate soft mask. This is lossless, too.

   The output is sent to standard output so that it can be redirected into a file or to another program as part of a shell pipe. To directly write the output into a file, use the  -o  or
   --output option.

OPTIONS positional arguments:

   infile Specifies  the  input file(s) in any format that can be read by the Python Imaging Library (PIL). If no input images are given, then a single image is read from standard input.
          The special filename "-" can be used once to read an image from standard input. To read a file in the current directory with the filename "-" (or with a filename starting  with
          "-"), pass it to img2pdf by explicitly stating its relative path like "./-". Cannot be used together with --from-file.

options:

   -h, --help
          show this help message and exit

   -v, --verbose
          Makes the program operate in verbose mode, printing messages on standard error.

   -V, --version
          Prints version information and exits.

   --from-file FILE
          Read  the  list  of images from FILE instead of passing them as positional arguments. If this option is used, then the list of positional arguments must be empty.  The paths to
          the input images in FILE are separated by NUL bytes. If FILE is "-" then the paths are expected on standard input. This option is useful if you want to pass  more  images  than
          the maximum command length of your shell permits. This option can be used with commands like `find -print0`.

General output arguments:

          Arguments controlling the output format.

   -o, --output out
          Makes the program output to a file instead of standard output.

   -C, --colorspace colorspace
          Forces  the  PIL  colorspace.  See the epilogue for a list of possible values. Usually the PDF colorspace would be derived from the color space of the input image.  This option
          overwrites the automatically detected colorspace from the input image and thus forces a certain colorspace in the output PDF /ColorSpace property. This is useful for JPEG  2000
          images with a different colorspace than RGB.

   -D, --nodate
          Suppresses timestamps in the output and thus makes the output deterministic between individual runs. You can also manually set a date using the --moddate and --creationdate op
          tions.

   --engine engine
          Choose  PDF  engine. Can be either internal, pikepdf or pdfrw. The internal engine does not have additional requirements and writes out a human readable PDF. The pikepdf engine
          requires the pikepdf Python module and qpdf library, is most featureful, can linearize PDFs ("fast web view") and can compress more parts of it.The pdfrw  engine  requires  the
          pdfrw Python module but does not support unicode metadata (See https://github.com/pmaupin/pdfrw/issues/39) or palette data (See https://github.com/pmaupin/pdfrw/issues/128).

   --first-frame-only
          By  default,  img2pdf  will  convert  multi-frame  images  like multi-page TIFF or animated GIF images to one page per frame. This option will only let the first frame of every
          multi-frame input image be converted into a page in the resulting PDF.

   --include-thumbnails
          Some multi-frame formats like MPO carry a main image and one or more scaled-down copies of the main image (thumbnails). In such a case, img2pdf will only include the main image
          and not create additional pages for each of the thumbnails. If this option is set, img2pdf will instead create one page per frame and thus store each thumbnail on its own page.

   --pillow-limit-break
          img2pdf uses the Python Imaging Library Pillow to read input images. Pillow limits the maximum input image size to 89478485 pixels to prevent decompression bomb denial of  ser
          vice attacks. If your input image contains more pixels than that, use this option to disable this safety measure during this run of img2pdf

   --pdfa [PDFA]
          Output  a  PDF/A-1b  compliant  document.  By  default, this will embed either /usr/share/color/icc/sRGB.icc, /usr/share/color/icc/OpenICC/sRGB.icc or /usr/share/color/icc/col
          ord/sRGB.icc as the color profile, whichever is found to exist first.

Image and page size and layout arguments:

          Every input image will be placed on its own page. The image size is controlled by the dpi value of the input image or, if unset or missing, the default dpi  of  96.00.  By  de
          fault,  each page will have the same size as the image it shows.  Thus, there will be no visible border between the image and the page border by default. If image size and page
          size are made different from each other by the options in this section, the image will always be centered in both dimensions.

          The image size and page size can be explicitly set using the --imgsize and --pagesize options, respectively.  If either dimension of the image size is specified  but  the  same
          dimension of the page size is not, then the latter will be derived from the former using an optional minimal distance between the image and the page border (given by the --bor
          der  option) and/or a certain fitting strategy (given by the --fit option). The converse happens if a dimension of the page size is set but the same dimension of the image size
          is not.

          Any length value in below options is represented by the meta variable L which is a floating point value with an optional unit appended (without a space between them).  The  de
          fault unit is pt (1/72 inch, the PDF unit) and other allowed units are cm (centimeter), mm (millimeter), and in (inch).

          Any  size  argument  of the format LxL in the options below specifies the width and height of a rectangle where the first L represents the width and the second L represents the
          height with an optional unit following each value as described above.  Either width or height may be omitted. If the height is omitted, the separating x can be omitted as well.
          Omitting the width requires to prefix the height with the separating x. The missing dimension will be chosen so to not change the image aspect  ratio.  Instead  of  giving  the
          width  and  height  explicitly, you may also specify some (case-insensitive) common page sizes such as letter and A4.  See the epilogue at the bottom for a complete list of the
          valid sizes.

          The --fit option scales to fit the image into a rectangle that is either derived from the --imgsize option or otherwise from the --pagesize option.  If the --border  option  is
          given in addition to the --imgsize option while the --pagesize option is not given, then the page size will be calculated from the image size, respecting the border setting. If
          the --border option is given in addition to the --pagesize option while the --imgsize option is not given, then the image size will be calculated from the page size, respecting
          the border setting. If the --border option is given while both the --pagesize and --imgsize options are passed, then the --border option will be ignored.

          The --pagesize option or the --imgsize option with the --border option will determine the MediaBox size of the resulting PDF document.

   -S, --pagesize LxL
          Sets the size of the PDF pages. The short-option is the upper case S because it is an mnemonic for being bigger than the image size.

   -s, --imgsize LxL
          Sets  the  size  of  the  images  on the PDF pages. In addition, the unit dpi is allowed which will set the image size as a value of dots per inch. Instead of a unit, width and
          height values may also have a percentage sign appended, indicating a resize of the image by that percentage. The short-option is the lower case s because it is an mnemonic  for
          being smaller than the page size.

   -b, --border L[:L]
          Specifies  the minimal distance between the image border and the PDF page border. This value Is overwritten by explicit values set by --pagesize or --imgsize. The value will be
          used when calculating page dimensions from the image dimensions or the other way round. One, or two length values can be given as an argument, separated by a colon.  One  value
          specifies  the  minimal border on all four sides. Two values specify the minimal border on the top/bottom and left/right, respectively. It is not possible to specify asymmetric
          borders because images will always be centered on the page.

   -f, --fit FIT
          If --imgsize is given, fits the image using these dimensions. Otherwise, fit the image into the dimensions given by --pagesize. FIT is one of into, fill, exact, shrink and  en
          large. The default value is "into". See the epilogue at the bottom for a description of the FIT options.

   -a, --auto-orient
          If  both dimensions of the page are given via --pagesize, conditionally swaps these dimensions such that the page orientation is the same as the orientation of the input image.
          If the orientation of a page gets flipped, then so do the values set via the --border option.

   -r, --rotation, --orientation ROT
          Specifies how input images should be rotated. ROT can be one of auto, none, ifvalid, 0, 90, 180 and 270. The default value is auto and indicates that input images  are  rotated
          according  to  their  EXIF  Orientation tag.  The values none and 0 ignore the EXIF Orientation values of the input images. The value ifvalid acts like auto but ignores invalid
          EXIF rotation values and only issues a warning instead of throwing an error.  This is useful because many devices like Android phones, Canon cameras or scanners emit an invalid
          Orientation tag value of zero. The values 90, 180 and 270 perform a clockwise rotation of the image.

   --crop-border L[:L]
          Specifies the border between the CropBox and the MediaBox. One, or two length values can be given as an argument, separated by a colon. One value specifies the  border  on  all
          four sides. Two values specify the border on the top/bottom and left/right, respectively.  It is not possible to specify asymmetric borders.

   --bleed-border L[:L]
          Specifies  the  border between the BleedBox and the MediaBox. One, or two length values can be given as an argument, separated by a colon. One value specifies the border on all
          four sides. Two values specify the border on the top/bottom and left/right, respectively.  It is not possible to specify asymmetric borders.

   --trim-border L[:L]
          Specifies the border between the TrimBox and the MediaBox. One, or two length values can be given as an argument, separated by a colon. One value specifies the  border  on  all
          four sides. Two values specify the border on the top/bottom and left/right, respectively.  It is not possible to specify asymmetric borders.

   --art-border L[:L]
          Specifies  the  border  between  the ArtBox and the MediaBox. One, or two length values can be given as an argument, separated by a colon. One value specifies the border on all
          four sides. Two values specify the border on the top/bottom and left/right, respectively.  It is not possible to specify asymmetric borders.

Arguments setting metadata:

          Options handling embedded timestamps, title and author information.

   --title title
          Sets the title metadata value

   --author author
          Sets the author metadata value

   --creator creator
          Sets the creator metadata value

   --producer producer
          Sets the producer metadata value (default is: img2pdf 0.6.1)

   --creationdate creationdate
          Sets the UTC creation date metadata value in YYYY-MMDD or YYYY-MM-DDTHH:MM or YYYY-MM-DDTHH:MM:SS format or any format understood by python dateutil module or any format under
          stood by `date --date`

   --moddate moddate
          Sets the UTC modification date metadata value in YYYYMM-DD or YYYY-MM-DDTHH:MM or YYYY-MM-DDTHH:MM:SS format or any format understood by python dateutil module  or  any  format
          understood by `date --date`

   --subject subject
          Sets the subject metadata value

   --keywords kw [kw ...]
          Sets the keywords metadata value (can be given multiple times)

PDF viewer arguments:

          PDF files can specify how they are meant to be presented to the user by a PDF viewer

   --viewer-panes PANES
          Instruct the PDF viewer which side panes to show.  Valid values are "outlines" and "thumbs". It is not possible to specify both at the same time.

   --viewer-initial-page NUM
          Instead of showing the first page, instruct the PDF viewer to show the given page instead. Page numbers start with 1.

   --viewer-magnification MAG
          Instruct  the PDF viewer to open the PDF with a certain zoom level. Valid values are either a floating point number giving the exact zoom level, "fit" (zoom to fit whole page),
          "fith" (zoom to fit page width) and "fitbh" (zoom to fit visible page width).

   --viewer-page-layout LAYOUT
          Instruct the PDF viewer how to arrange the pages on the screen. Valid values are "single" (display single pages), "onecolumn" (one  continuous  column),  "twocolumnright"  (two
          continuous columns with odd number pages on the right) and "twocolumnleft" (two continuous columns with odd numbered pages on the left), "twopageright" (two pages with odd num
          bered page on the right) and "twopageleft" (two pages with odd numbered page on the left)

   --viewer-fit-window
          Instruct the PDF viewer to resize the window to fit the page size

   --viewer-center-window
          Instruct the PDF viewer to center the PDF viewer window

   --viewer-fullscreen
          Instruct the PDF viewer to open the PDF in fullscreen mode

Colorspace:

          Currently,  the colorspace must be forced for JPEG 2000 images that are not in the RGB colorspace.  Available colorspace options are based on Python Imaging Library (PIL) short
          handles.

   RGB    RGB color

   L      Grayscale

   1      Black and white (internally converted to grayscale)

   CMYK   CMYK color

   CMYK;I CMYK color with inversion (for CMYK JPEG files from Adobe)

Paper sizes:

          You can specify the short hand paper size names shown in the first column in the table below as arguments to the --pagesize and --imgsize options.  The width  and  height  they
          are  mapping  to  is  shown  in  the  second  column.   Giving  the value in the second column has the same effect as giving the short hand in the first column. Appending ^T (a
          caret/circumflex followed by the letter T) turns the paper size from portrait into landscape. The postfix thus symbolizes the transpose. Note that on Windows cmd.exe the  caret
          symbol is the escape character, so you need to put quotes around the option value.  The values are case insensitive.

   A0     841mmx1189mm

   A1     594mmx841mm

   A2     420mmx594mm

   A3     297mmx420mm

   A4     210mmx297mm

   A5     148mmx210mm

   A6     105mmx148mm

   B0     1000mmx1414mm

   B1     707mmx1000mm

   B2     500mmx707mm

   B3     353mmx500mm

   B4     250mmx353mm

   B5     176mmx250mm

   B6     125mmx176mm

   JB0    1030mmx1456mm

   JB1    728mmx1030mm

   JB2    515mmx728mm

   JB3    364mmx515mm

   JB4    257mmx364mm

   JB5    182mmx257mm

   JB6    128mmx182mm

   Legal  8.5inx14in

   Letter 8.5inx11in

   Tabloid
          11inx17in

Fit options:

          The  img2pdf  options  for  the --fit argument are shown in the first column in the table below. The function of these options can be mapped to the geometry operators of image
          magick. For users who are familiar with imagemagick, the corresponding operator is shown in the second column.  The third column shows whether or not the aspect ratio  is  pre
          served for that option (same as in imagemagick). Just like imagemagick, img2pdf tries hard to preserve the aspect ratio, so if the --fit argument is not given, then the default
          is "into" which corresponds to the absence of any operator in imagemagick.  The value of the --fit option is case insensitive.

   into   |   | Y | The default. Width and height values specify maximum |   |   | values.

   ---------+---+---+----------------------------------------------------------

   fill   | ^ | Y | Width and height values specify the minimum values.

   ---------+---+---+----------------------------------------------------------

   exact  | ! | N | Width and height emphatically given.

   ---------+---+---+----------------------------------------------------------

   shrink
          | > | Y | Shrinks an image with dimensions larger than the given |   |   | ones (and otherwise behaves like "into").

   ---------+---+---+----------------------------------------------------------

          enlarge | < | Y | Enlarges an image with dimensions smaller than the given

   |      |   | ones (and otherwise behaves like "into").

Argument parsing:

          Argument long options can be abbreviated to a prefix if the abbreviation is unambiguous. That is, the prefix must match a unique option.

          Beware  of  your  shell  interpreting argument values as special characters (like the semicolon in the CMYK;I colorspace option). If in doubt, put the argument values in single
          quotes.

          If you want an argument value to start with one or more minus characters, you must use the long option name and join them with an equal sign like so:

          $ img2pdf --author=--test--

          If your input file name starts with one or more minus characters, either separate the input files from the other arguments by two minus signs:

          $ img2pdf -- --my-file-starts-with-two-minuses.jpg

          Or be more explicit about its relative path by prepending a ./:

          $ img2pdf ./--my-file-starts-with-two-minuses.jpg

          The order of non-positional arguments (all arguments other than the input images) does not matter.

EXAMPLES

          Lines starting with a dollar sign denote commands you can enter into your terminal. The dollar sign signifies your command prompt. It is not part of the command you type.

          Convert two scans in JPEG format to a PDF document.

          $ img2pdf --output out.pdf page1.jpg page2.jpg

          Use a custom dpi value for the input images:

          $ img2pdf --output out.pdf --imgsize 300dpi page1.jpg page2.jpg

          Convert a directory of JPEG images into a PDF with printable A4 pages in landscape mode. On each page, the photo takes the maximum amount of space while preserving  its  aspect
          ratio and a print border of 2 cm on the top and bottom and 2.5 cm on the left and right hand side.

          $ img2pdf --output out.pdf --pagesize "A4^T" --border 2cm:2.5cm *.jpg

          On each A4 page, fit images into a 10 cm times 15 cm rectangle but keep the original image size if the image is smaller than that.

          $ img2pdf --output out.pdf -S A4 --imgsize 10cmx15cm --fit shrink *.jpg

          Prepare a directory of photos to be printed borderless on photo paper with a 3:2 aspect ratio and rotate each page so that its orientation is the same as the input image.

          $ img2pdf --output out.pdf --pagesize 15cmx10cm --auto-orient *.jpg

          Encode a grayscale JPEG2000 image. The colorspace has to be forced as img2pdf cannot read it from the JPEG2000 file automatically.

          $ img2pdf --output out.pdf --colorspace L input.jp2

AUTHOR

   Written by Johannes Schauer Marin Rodrigues <josch@mister-muffin.de>

REPORTING BUGS

   Report bugs at https://gitlab.mister-muffin.de/josch/img2pdf/issues

img2pdf 0.6.1 April 2025 IMG2PDF(1)