2.8 (to come) 2.7 (February 2024) New features: o Split files to max size with -split-max o Spray splits a file to multiple outputs by alternating pages o List document and page info in JSON format o List page labels in JSON format o List fonts in JSON format o Identify PDF/A, PDF/X, PDF/E, PDF/VT, PDF/UA in -info o Identify AcroForm in -info o Extract font files from a document o List images on a page with -list-images[-json] o Chop pages up into sections with -chop o Build PDF files from JBIG2 streams, including globals o Reprocess images within PDFs to further compress them o Extract streams to disk o Explore PDFs by printing objects o Shift page boxes with -shift-boxes Extended features: o -list-images-used[-json] extends -image-resolution o Use -raw with -extract-images to get PNMs o -extract-images can extract JBIG2 images and their globals o More PNGs - greyscale 1, 2, 4, 8, 16bpp and RGB 16bpp o -pages -fast to print number of pages from /Count o Report number of annotations in -page-info o Specify image based only on file extension o -squeeze updates old compression methods o Show page size summary in -info o Add -no-merge-struct-trees to prevent merging of structure trees Fixes: o Added opam file in-source o Fixed -set-annotations with page links o Allow Exif JPEGs as well as JFIF ones in -jpeg and -draw-jpeg o Only compress a stream if it actually makes it smaller 2.6.1 (September 2023) o Fixed regression in UTF8 text with -add-text 2.6 (July 2023) New features: o Create new PDF documents or draw on existing ones with -draw o Embed TrueType fonts with -load-ttf o Embed the 14 standard fonts if requested o Add links to parts of text with -add-text as %URL[|] o Convert JPEGs and PNGs to PDFs with -jpeg and -png o Export, import, and thereby round-trip annotations via JSON o Show composition of PDF with -composition[-json] o Use page labels like and in page specifications Extended features: o Allow -utf8 with -split-bookmarks -o @B.pdf to produce UTF8 filenames o -merge-add-bookmarks now works with unicode filenames o Better transformation of some annotation types o -list-annotations[-json] now respects page range o Merge now merges structure trees (tagged PDF) o Merge now rewrites clashing name tree entries o Preserve /GoTo actions in bookmarks when merging o UTF8 option for JSON output o -info now shows object stream, /ID data, page mode and layout o More options for viewer preference control o More default colours, by using the CSS colour list Fixes: o Updated Yojson to remove dependency on Stream, ready for OCaml 5 o -typeset was opening files in text mode, instead of binary o Fixed behaviour of -squeeze-no-pagedata / -squeeze-no-recompress o Significant improvements to malformed file reading o Allow DUP page specifications to use larger numbers o Reworked functions transforming pages to better preserve patterns 2.5.1 (January 2022) o Fix a regression where standard fonts could not be chosen 2.5 (January 2022) New features: o Can read as well as write PDFs in JSON format with -j o New operation -typeset typesets a text file as a PDF o New operation -table-of-contents makes table of contents from bookmarks o New operations -impose and -impose-xy for document imposition o New operation -print-font-table gives (charcode, unicode, glyph name) triples o New -print-dict-entry operation prints values for a given key o New -replace-dict-entry function to search & replace e.g URLs o Prepend e.g 2DUP to a page range to make 1,2,3 --> 1,1,2,2,3,3 etc. o Prepend NOT to a page range to invert it o Output annotations in JSON form with -list-annotations-json o Output bookmarks in JSON format with -list-bookmarks-json o Load bookmarks in JSON format with -add-bookmarks-json o New option -collate to collate pages when merging o Text added in existing fonts is now encoding-aware (plus new raw mode) Extended features: o Extend -remove-dict-entry to allow search o Annotation /QuadPoints processed in addition to /Rect when transforming pages o When adding text or graphics, may choose CYMK or Grey instead of RGB o The -list-fonts operation now obeys the range o Can now search for a font by real name with -font o Basic merging of AcroForms when merging documents o Add -idir-only-pdfs to restrict -idir to just files ending in .pdf o Option -debug-force now properly documented as -decrypt-force Internal changes: o Switch to Yojson for faster/better JSON input/output o Environment variable CPDF_REPRODUCIBLE_DATES for testing o Environment variable CPDF_DEBUG for -debug o Effectively make stderr unbuffered o Split cpdf.ml into separate modules 2.4 (June 2021) o New operation -extract-images o New operation -output-json et al. to export PDF files in JSON format o New operations to manipulate Optional Content Groups o New operation -stamp-as-xobject to add one PDF as an xobject in another o Optional Content Groups now preserved when merging / stamping pages o Listing, coalescing and modfiying Optional Content Groups. o New -labels-progress option to improve page labels interface o Appearance streams transformed when transforming annotations o Bookmark destination positions transformed when transforming pages o No longer depends on Bigarray or Unix modules 2.3 (patchlevel 1, December 2019) o Fixed bug which prevented -info working on encrypted files o Allow -shift with -add-text for additional adjustment o Prepend and postpend directly to page content streams 2.3 (October 2019) o Directly set and remove Trim, Art, and Bleed boxes o Dump attachments to file o Extended bookmark format, preserving all bookmark information o New -pad-with, -pad-mutiple-before options o Set or create XMP metadata o Remove graphics clipping o Extended support for reading malformed files o Embed missing fonts by calling out to gs o Set bookmarks open to a given level o Create PDF files from scatch o Remove single images by name o Add trim marks 2.2 (patchlevel 1) o Fix for inability to read null objects in streams o Workaround for Adobe "Error 21" on re-saving encrypted files o More efficient bookmark operations on files with many pages o New operation -hard-box to clip contents to a given box 2.2 (March 2017) o Perform arithmetic on dimensions when specifying size or position o Add simple rectangles to PDF to blank things out o Stamping operations now preserve annotations o Decryption fully on-demand for speed. o -keep-l keeps existing linearization status o -remove-dict-entry to remove the contents of a dictionary entry o -topline in addition to -midline o -producer and -creator may be used to alter producer and creator in conjunction with any other operation o -topline and -midline now apply to stamps o -list-spot-colours o -bates-at-range and -bates-pad-to o -print-page-labels o -squeeze replaces smpdf o Preserve more sharing of data when doing merges and page alterations 2.1 (December 2014) o Encryption now much, much faster o Faster parsing of delayed object streams on large files o -decompress now leaves object streams decompressed o Select pages by landscape-ness or portrait-ness in a page range o New -open-at-page and -open-at-page-fit option to set the open action o New -recrypt option to re-encrypt output o Reads XMP metadata and outputs it on -info o New -center position for text o -stamp can now use positions, just like stamping text o Better handling of permissions for files with user passwords o Linearization excised o Can encrypt or recrypt output of -split and -split-bookmarks now o -args replaces -control with better behaviour o Can scale a stamp to fit before stamping with -scale-stamp-to-fit