PackageTrack
Sign in Get early access

lopdf

A Rust library for PDF document manipulation.

0.44.0 16M downloads/mo #2367 most downloaded on crates.io J-F-Liu/lopdf

What this package is like to depend on

Last release 1 months ago

10 Jul 2026

Ships fairly regularly

a new release about every 2 months

Most releases are documented

notes for 43 of 53 stable releases

1 version withdrawn

withdrawn after publishing

10 years old

54 releases · first in 2016

7 releases in the last 12 months

see the full history below

Release timeline

54 releases · Dec 2016 to Jul 2026
2017 2018 2019 2020 2021 2022 2023 2024 2025 2026
Release Pre-release Withdrawn

Releases

latest 54
  1. 0.44.0 10 Jul 2026
    Release notes

    What's Changed

    • ci: actually exercise the no-default-features build by @zamf in #510
    • feat: make ttf-parser optional behind font_embedding feature by @Jeadie in #512
    • Fix(test): enable features/deps where needed by @ErikMach in #515
    • refactor(document): make Document::get_page_content return Vec by @ErikMach in #513
    • Add API to limit decompressed size to prevent decompression bombs by @emschwartz in #516
    • Fix Document::get_toc() dropping entries when outline titles repeat by @nikolas-chomsky in #517
    • fix(writer): reject incremental save of encrypted documents by @skoji in #521
    • feat(writer): support incremental save of encrypted documents by @skoji in #522
    • bump version to v0.44.0 by @skoji in #524

    New Contributors

    Full Changelog: v0.43.0...v0.44.0

    Open source →
    Release notes

    Add

    • Add back assets/test.pdf

    Feat

    • Support incremental save of encrypted documents (#522)
    • Bound text extraction against decompression bombs
    • Bound load-time decompression via LoadOptions.max_decompressed_size
    • Bound stream decompression to guard against bombs
    • Make ttf-parser optional behind font_embedding feature

    Fix

    • Reject incremental save of encrypted documents (#521)
    • Fix Document::get_toc() dropping entries when outline titles repeat (#517)
    • Add feature flag to font test
    • Only use criterion for non-wasm tests/benches

    Move

    • Move resource files in tests to assets

    Refactor

    • Make Document::get_page_content return Vec<u8> since it cannot fail

    Test

    • Add tests demonstrating unbounded stream decompression

    CI

    • CI skip performance test
    • Actually pass --no-default-features in the no-default-features matrix cell (#510)

    <a name="v0.43.0"></a>

    Open source →
  2. 0.43.0 29 Jun 2026
    Release notes

    What's Changed

    • ci: fix wasm test failure from too many locals by @zamf in #507
    • feat(reader): report encryption status in PdfMetadata by @zamf in #506
    • ci: Auto Create GitHub Releases on tag push by @notpeter in #508
    • Update crypto APIs, fix Clippy lints, and improve benchmarks by @Sachin-Bhat in #504
    • Release 0.43.0 by @zamf in #509

    New Contributors

    Full Changelog: v0.42.0...v0.43.0

    Open source →
    Release notes

    Feat

    • Report encryption status in PdfMetadata

    <a name="v0.42.0"></a>

    Open source →
  3. 0.42.0 24 Jun 2026
    Release notes

    Feat

    • Add Content::decode_strict method for strict parsing

    Fix

    • Limit array and dictionary nesting depth
    • Include subsequent ObjStm objects in xref stream range
    • Insert newline between concatenated content streams
    • Consume trailing comments in content streams

    Test

    • Escape trailing whitespace in parser tests

    <a name="v0.41.0"></a>

    Open source →
  4. 0.41.0 04 Jun 2026
    Release notes

    Add

    • Add test to reproduce bug with replacing text in non-single character TJ Arrays
    • Add regression test PDF file
    • Add performance tests for document loading and page counting

    Fix

    • Fix bug replacing text in non-single character TJ Arrays
    • fix clippy errors

    Implement

    • Implement differences mapping

    Release

    • Release 0.41

    Removes

    • Removes nom_locate dependency to fix a performance regression introduced in v0.35.0.

    <a name="v0.40.0"></a>

    Open source →
  5. 0.40.0 19 Mar 2026
    Release notes

    Fix

    • Fix a few warnings.
    • Fix WinAnsiEncoding handling in SimpleEncoding string conversion

    Release

    • Release 0.40

    Remove

    • Remove an unused dependency.

    Return

    • return Option via ok() instead of unwrap() for decode_text_string

    Update

    • update src/reader to make clippy happy

    Update

    • Update getrandom to 0.4 and rand to 0.10.

    Upgrade

    • Upgrade wasm-bindgen-test while we're at it.

    <a name="v0.39.0"></a>

    Open source →
  6. 0.39.0 12 Jan 2026
    Release notes

    What's Changed

    Improvements

    Fixes

    Thanks a lot to the new contributors:

    Open source →
    Release notes

    Add

    • add tests

    Fix

    • fix conditionally compile encrypted metadata tests
    • fix test_metadata and clippy warnings
    • fix readme example ci issue
    • fix clippy ci failed

    Release

    • Release 0.39

    Breaking change

    is_encrypted() now returns false after successful decryption. Use was_encrypted() to check original encryption state.

    <a name="v0.38.0"></a>

    Open source →
  7. 0.38.0 31 Aug 2025
    Release notes

    See CHANGELOG.md for details.

    Thanks a lot to the new contributors:

    Open source →
    Release notes

    Apply

    • apply fix the warnings

    Inline

    • Inline ImageMasks don't need to have a ColorSpace so don't require one.

    <a name="v0.37.0"></a>

    Open source →
  8. 0.37.0 15 Aug 2025
    Release notes

    See CHANGELOG.md for details.

    Thanks a lot to the new contributors:

    Open source →
    Release notes

    Add

    • add unicode replace support (#421)

    Avoid

    • Avoid unwrapping object streams when decrypting documents

    Change

    • Change remove_object() to only remove the object (#423)

    Ensure

    • Ensure we only encrypt with compliant P-values

    Fix

    Fix

    • Fix clippy
    • Fix bug by encoding OE, UE and Perms for revision 5

    Implement

    • Implement tests to encrypt and decrypt documents
    • Implement tests for the password algorithms

    Improve

    • Improve readability by consistently iterating over blocks
    • Improve Length field checks

    Retain

    • Retain permission bits

    Set

    • Set up WASI CI
    • Set up WASM CI workflow

    Update

    • Update changelog

    <a name="v0.36.0"></a>

    Open source →
  9. 0.36.0 15 Mar 2025
    Release notes

    See CHANGELOG.md for details.

    Open source →
    Release notes

    Add

    • Add support for Revision 5 (#401)
    • Add more checks to the encryption/decryption logic (#399)
    • Add sanity checks for PDF encryption, add examples for decrypting/encrypting PDF files and various bug fixes (#397)
    • Add encrypt function to crypt filters
    • Add support for jiff and make both chrono and time optional features

    Avoid

    • Avoid parsing encrypted object streams early and correctly parse object streams upon decryption (#385)
    • Avoid decrypting cross-reference streams (#381)

    Check

    • Check if the security handler is the standard one

    Clarify

    • Clarify datetime parsing logic using the PDF specification

    Compute

    • Compute the file encryption key (revision 6)

    Declare

    • Declare and implement crypt filters

    Ensure

    • Ensure the document is actually encrypted

    Fix

    • Fix unused imports
    • Fix warning for rotate example
    • Fix warnings about nom_parser
    • Fix clippy warning about operator precedence
    • Fix typo in comment

    Gracefully

    • Gracefully handle the is_aes check without throwing errors (#376)

    Handle

    • Handle cases where the stream objects override the crypt filter

    Implement

    • Implement Document::encrypt() (#396)
    • Implement password authentication (revision 6)
    • Implement decrypt with and without password sanitization
    • Implement authentication functions
    • Implement password sanitization from string
    • Implement password algorithms 2-7
    • Implement encrypt_object function
    • Implement and use PKCS#5 padding instead
    • Implement function to parse the available crypt filters
    • Implement 256-bit AES-CBC crypt filter
    • Implement TryFrom rather than TryInto

    Improve

    • Improve the AES decryption with some sanity checks (#383)

    Merge

    • Merge remaining algorithms functions into PasswordAlgorithm implementation

    Missing

    • Missing import to test

    Only

    • Only encode EncryptMetadata when V >= 4 (#400)

    Provide

    • Provide revision-agnostic functions for the password algorithms

    Randomly

    • Randomly generate file encryption key for V5 in encrypt example (#403)

    Recurse

    • Recurse into arrays and dictionaries to fully decrypt all strings/streams (#378)

    Release

    • Release 0.36

    Remove

    • Remove the old implementation
    • Remove workflow that used to enable the nom_parser feature
    • Remove nom_parser feature

    Reorganize

    • Reorganize encryption code

    Sanitize

    • Sanitize passwords (revision 6)

    Try

    • Try decrypting with an empty password

    Unpack

    • Unpack objects after decrypting object streams (#382)

    Update

    • Update to nom 8.0 and nom_locate 5.0 (#402)

    Update

    • update changelog

    Use

    • Use a hasher instead of allocating a Vec
    • Use the new implementation to compute the file encryption key
    • Use the default stream and string crypt filter if present
    • Use Unix epoch if time feature is not enabled
    • Use get_deref for the Kids array to handle indirect references (#379)

    Validate

    • Validate encryption dictionary for revision 5 (#405)

    Validate

    • validate binary comment during parsing (#392)

    <a name="0.35.0"></a>

    Open source →
  10. 0.35.0 19 Jan 2025
    Release notes

    See CHANGELOG.md for details.

    Thanks a lot to the new contributors:

    Open source →
    Release notes

    Add

    • Add test for supported color types in PDF image embedding
    • Add function for text chunks extraction. (#342)

    Added

    • added binary comment as attribute and for load and write. Binary Comment is gonna be important for pdf in A/2, A/3 format. (#370)

    Allow

    • Allow parsing off-spec PDF files with prefixes before the header (#362)

    Also

    • Also accept ASCII85 streams without EOD marker (#354)

    Fix

    • Fix clippy warning
    • Fix incorrect image data handling in PDF content stream
    • Fix BitsPerComponent calculation and improper ColorSpace mapping
    • Fix incorrect color type detection for JPEG images
    • Fix mulitplication overflow in ascii85 decode (#348)
    • Fix out of memory bug (#347)
    • Fix addition overflow (#346)
    • Fix lowercase s of Procset and no space target string(J-F-Liu#323) (#324)

    Ignore

    • Ignore space after byte index of startxref (#371)

    Implement

    • Implement ToUnicode for variadic len encodings (#328)

    Improve

    • Improve JPEG processing efficiency by avoiding unnecessary decode (#345)
    • Improve cmap parsing and internal error handling (#335)

    Inline

    • Inline images (#356)

    Keep

    • keep existing values when extending dictionary (#322)

    Properly

    • Properly support document prefixes (#365)

    Refactor

    • Refactor and optimize image processing logic in xobject.rs

    Release

    • Release 0.35

    Remove

    • remove misleading Object::as_string (#350)

    Remove

    • Remove superfluous ref keyword (#361)
    • Remove pom parser (#355)
    • Remove /Prev from trailer (#333)

    Replace

    • Replace debug assert with Result (#349)
    • Replace unwrap with error handling (#351)

    Rework

    • Rework errors (#358)

    Specify

    • Specify minimum Rust version in Cargo.toml (#320)

    Support

    • Support UTF-16 encoding for bookmark titles with non-ASCII characters (#364)
    • Support AES encryption and revision 4 (#343)

    Throw

    • Throw error if xref stream cannot be uncompressed (#339)

    Update

    • update changelog

    <a name="v0.34.0"></a>

    Open source →
  11. 0.34.0 01 Sep 2024
    Release notes

    See CHANGELOG.md for details.
    Thanks a lot for new contributors: @Heinenen, @dkaluza, @jrmuizel

    Open source →
    Release notes

    Add

    • Add ASCII85 decoding (#317)
    • Add text extraction based on ToUnicode cmap (#314)
    • Add error handling to object stream (#299)
    • Add PDFDocEncoding (#296)

    Cleanup

    • Cleanup comments and cargo fmt (#290)

    Detect

    • Detect reference cycles when going through trailers (#308)
    • Detect reference cycles when parsing streams (with nom_parser) (#300)
    • Detect reference cycles when collecting page resources (#298)

    Fix

    • Fix unicode fonts extraction in extract text example. (#315)
    • Fix clippy warings

    Implement

    • Implement encoding and decoding of text strings (PDF1.7 section 7.9.2.2) (#297)

    Improve

    • Improve error handling (#307)

    Refactor

    • Refactor get_or_create_resources() (#291)

    Release

    • Release 0.34

    Replace

    • Replace unwrap with returning error (#310)
    • Replace LinkedHashMap with IndexMap (#293)

    Update

    • Update dependencies (#309)
    • Update readme of pdfutil (#295)

    <a name="v0.33.0"></a>

    Open source →
  12. 0.33.0 11 Jul 2024
    Release notes

    Accept

    • Accept comments in content parsing (#261)

    Added

    • Added a new feature to get images info from the pdf page. (#275)

    Async

    • Async Examples (#266)

    AsyncReader

    • AsyncReader (#265)

    Fix

    • Fix parse outline failed, the key ’D‘ might be an object id (#274)
    • Fix parse outline failed(#270) (#271)

    Indexmap

    • indexmap use in TOC for sorted TOC (#267)

    Release

    • Release 0.33

    Replace

    • Replace md5 with md-5 (#272)

    <a name="v0.32.0"></a>

    Open source →
  13. 0.32.0 16 Jan 2024
    Release notes

    Add

    • Add debug format for hexadecimal (#240)

    Added

    • Added big generation value parsing (#257)

    Added

    • added object parse to get_page_fonts (#249)
    • added meta info decryption (#237)

    Fix

    • Fix clippy warning and format code
    • Fix clippy warnings
    • Fix typo in README.md (#251)

    Fixed

    • Fixed parsing of the PDFs with incorrect xrefs to indirect objects (#254)

    Fixed

    • fixed clippy issues (#238)

    Handle

    • Handle references to arrays in get_page_contents() (#245)

    Object

    • Object and related types implement PartialEq (#236)

    Release

    • Release 0.32

    <a name="v0.31.0"></a>

    Open source →
  14. 0.31.0 10 May 2023
    Release notes

    Add

    • Add example of page rotation (#230)
    • Add decryption of documents using RC4 encryption. (#228)

    Annotate

    • Annotate feature usage (#229)

    Fix

    • Fix typo in README.md (#233)

    PDF

    • PDF 2.0 is now a free specification

    Release

    • Release 0.31

    Remove

    • Remove extraneous Q operation from insert_image (#227)

    <a name="v0.30.0"></a>

    Open source →
  15. 0.30.0 09 Apr 2023
    Release notes

    Add

    • Add support for extracting TOC, Outlines and NamedDestinations (#211)
    • Add example extract_text (#212)
    • Add get_encrypted and is_encrypted (#210)
    • Add load_filtered method (#198)
    • Add as_string method to Object (#196)

    Adding

    • Adding Comments to examples (#220)

    Fix

    • Fix clippy warning
    • Fix cliippy warnings
    • Fix datetime using time crate
    • Fix Cargo.toml (#213)
    • Fix ci build issue (#209)
    • Fix extract_text to split text at word boundaries.
    • Fix embed_image feature

    Make

    • Make some more objects public. (#199)

    Readd

    • Readd accidently deleted pdf files in assets (#204)

    Release

    • Release 0.30

    Remove

    • Remove obsolete lifetime

    Replace

    • Replace unmaitained encoding crate with encoding_rs (#222)

    Set

    • Set default to nom_parser and rayon (#208)

    Update

    • Update time dependency (#206)
    • Update nom dependency
    • Update time dependency
    • Update edition and some dependencies.

    <a name="v0.29.0"></a>

    Open source →
  16. 0.29.0 29 Oct 2022
    Release notes

    Add

    • Add function get_page_annotations and include an example (#184)

    Added

    • Added documentation and improved tests (#178)

    Allow

    • Allow mutable access to the document catalog (#189)

    Extend

    • Extend match layout change and Full bookmark example in merge. (#179)

    Fix

    • Fix nom parser
    • Fix clippy warnings
    • Fix add_barcode example
    • Fix Incremental.pdf
    • Fix documentation issues and make README testable (#171)
    • Fix pdfutil build error
    • Fix extend definition confusion bug (#161)

    Fixed

    • Fixed #175 and some clippy issues. (#182)

    Guard

    • Guard example based on if the "parser" feature is enabled (#173)

    Made

    • made XREF parser accept an optional space character after 'xref' (#167)

    Make

    • Make add_xobject follow references (#187)
    • Make xref public ,fix line endings and Fix Xref output so Adobe will open them again. (#181)

    Merge

    • Merge branch 'master' of https://github.com/J-F-Liu/lopdf

    Release

    • Release 0.29
    • Release 0.28

    Remove

    • Remove --no-default-features test

    Remove

    • remove unneccessary time 0.1 dependency (#163)

    Reorder

    • Reorder Pages before Renumbering Objects. (#193)

    Support

    • Support Incremental Updates (#176)

    Switch

    • switch to single-precision floating point (#190)

    Update

    • Update itoa dependency to 1.0 (#162)

    <a name="v0.27.0"></a>

    Open source →
  17. 0.28.0 23 Jul 2022 withdrawn

    Nothing published for this version

  18. 0.27.0 16 Dec 2021
    Release notes

    Add

    • Add GitHub Actions build matrix (#127)
    • Add Change Log

    Added

    • Added Object::as_float() to convert numerical values to float. (#124)
    • Added Object::as_bool (#123)

    Avoid

    • Avoid panic when encounters negative stream length

    Bookmarks

    Change

    • Change indent_style to space

    Check

    • Check stream length

    Do

    • Do not limit Real precision to two digits (#155)

    Fix

    • Fix document save race in parser_aux::load_and_save and creator::create_document (#151)
    • Fix clippy warnings & add clippy build job (#128)

    Preserve

    • Preserve the eol characters in literal strings (#131)

    Reduce

    • Reduce allocation by reusing the iterator (#129)

    Release

    • Release 0.27
    • Release pdfutil 0.4

    Replace

    • Replace lzw with weezl (#140)

    Return

    • Return early on error in Stream::filters (#130)

    Unwrap

    • Unwrap the text (#119)

    Update

    • Update nom to 6.0 (#126)

    <a name="v0.26.0"></a>

    Open source →
  19. 0.26.0 29 Sep 2020
    Release notes

    Add

    • Add as_str, as_str_mut methods to Object (#107)

    Dtoa

    • dtoa may write real number in exponential format which is not allowed in PDF

    Genericize

    • Genericize Content to allow AsRef<[Operation]> (#111)

    Make

    • Make pom dependency optional (but default) (#112)
    • Make rayon dependency optional (#108)

    Merge

    • Merge document PDF logic with some fixes (#117)

    Various

    • Various improvements, updated libraries and image features (#118)

    <a name="v0.25.0"></a>

    Open source →
  20. 0.25.0 25 Jun 2020
    Release notes

    Add

    • add indexing checks (#98)

    Add

    Bugfix

    • Bugfix for xref_start. (#105)

    Check

    • check that the buffer is big enough for startxref (#93)

    Create

    • Create rust.yml (#104)

    Extend

    • extend recursion limit to non-local references (#100)

    Fix

    • Fix compilation error&test error (#102)

    Keep

    • keep looking for the last pattern (#94)

    Limit

    • Limit allowed bracket depth. (#97)

    Limit

    • limit recursion to the number of objects (#92)

    Move

    • Move bracket depth checking into parsers. (#101)

    Release

    • Release 0.25

    Return

    • Return Result from as_array_mut() (#106)

    Update

    • Update itoa and linked-hash-map (#91)

    <a name="v0.24.0"></a>

    Open source →
  21. 0.24.0 17 Feb 2020
    Release notes

    Compute

    • Compute an accurate iterator size when the page tree is sane.

    Fix

    • Fix datetime parser (#89)

    More

    • More permissive datetime parsing (#90)

    Release

    • Release 0.24

    Validate

    • Validate expected id in pom parser.
    • Validate the expected id when reading indirect objects.

    <a name="v0.23.0"></a>

    Open source →
  22. 0.23.0 14 Jul 2019
    Release notes

    Adapt

    • Adapt pom parser.

    Add

    • Add error descriptions.
    • Add a proper error type and remove some more panics.

    Allow

    • Allow loading a document from a memory slice.

    Avoid

    • Avoid allocating an intermediate collection for iteration.
    • Avoid unwraps when already returning an Option for failure.

    Error

    • Error signaling around compression and image handling.

    Escape

    • Escape fix (#68)

    Export

    • Export dereference function as it is useful for PDF consumers.
    • Export filters module.

    Get_font_encoding

    • get_font_encoding seems more at home with Dictionary.

    Handle

    • Handle stream filter chains (#66)

    Hex

    • Hex fix (#67)

    Implement

    • Implement LZW decompression.

    Improve

    • Improve hex parsing performance.

    Make

    • Make a page iterator.
    • Make Reader::read consume the Reader.
    • Make content operations faillible.

    Protect

    • Protect against reference loops.
    • Protect against a corrupted page tree.

    Refactor

    • Refactor a bit to allow a utility function.

    Release

    • Release 0.23.0

    Remove

    • Remove intermediate assignation.
    • Remove unsafe code around FilterType.
    • Remove unsafe code on get_object_mut.
    • Remove some 'if let' for readability.
    • Remove more panic paths in xref parsing.

    Replace

    • Replace unwraps in processor.rs.

    Return

    • Return results when appropriate.

    Separate

    • Separate decompression into two functions.

    Take

    • Take care of panic that I actually hit on the pom side.
    • Take care of creator.rs.

    Unify

    • Unify buffer creation.

    Use

    • Use lifetime ellision.
    • Use TryInto.
    • Use writeln where appropriate.
    • Use error enum in reader.
    • Use stable cloned.

    <a name="v0.22.0"></a>

    Open source →
  23. 0.22.0 13 May 2019
    Release notes

    Add

    • Add parsing benchmark.
    • Add nom dependency.

    Also

    • Also test with nom parsing feature enabled.

    Array

    • Array and dictionary parsing.

    Avoid

    • Avoid using format! when writing.

    Be

    • Be explicit about trait objects.

    Boolean

    • Boolean and null parsing.

    Content

    • Content parsing.

    Duplicate

    • Duplicate pom parser for incremental replacement with nom 5.

    Ease

    • Ease off on rayon a bit.

    Escape

    • Escape sequence parsing.

    Extern

    • extern crate is not required anymore with 2018 edition.

    Fix

    • Fix last ugly parser.
    • Fix octal parser.
    • Fix pdfutil build

    Float

    • Float parsing.

    Header

    • Header parsing.

    Hex

    • Hex string parsing.

    Indirect

    • Indirect object and stream parsing.

    Literal

    • Literal string syntax.

    Make

    • Make sure Stream.start_position is relative to the whole file.

    Merge

    • Merge remote-tracking branch 'upstream/master' into nom5
    • Merge remote-tracking branch 'upstream/master' into nom5

    More

    • More 2018 edition lints.
    • More cleanup.
    • More cleanup.
    • More simplifications.

    Object

    • Object id and reference parsing.

    Octal

    • Octal and hexadecimal parsing.

    Parallel

    • Parallel object stream parsing.

    Rayon

    • Rayon usage proof of concept.

    Release

    • Release 0.22.0

    Remove

    • Remove pom dependency in tests.

    Replace

    • Replace name parser.

    Resolve

    • Resolve name collisions.

    Simplify

    • Simplify lifetime annotations.

    Slowly

    • Slowly replace the cute pom parser with nom.

    Trailer

    • Trailer and xref start.

    Turns

    • Turns out "contained" already exists in nom.

    Unify

    • Unify both variants of the parsing functions.

    Use

    • Use a BufWriter when saving to path.
    • Use parse_at(&self.buffer, offset) to read indirect_object
    • Use nom digit testing functions.
    • Use lifetime ellision.
    • Use nom sequence operators.

    Useless

    • Useless move.

    Xref

    • Xref stream and trailer parsing.
    • Xref parsing.

    <a name="v0.21.0"></a>

    Open source →
  24. 0.21.0 26 Apr 2019
    Release notes

    Avoid

    • Avoid allocating a String.

    Check

    • Check offsets read from file to avoid panics
    • Check and correct Size entry of trailer dictionary

    Clean

    • Clean up bytes_to_string, string_to_bytes iterators

    Fix

    • Fix clippy warnings
    • Fix .editorconfig

    Fixed

    • fixed finally

    Redundant

    • Redundant imports with 2018 edition.

    Release

    • Release 0.21.0

    Update

    • Update example
    • Update Cargo.toml

    Use

    • Use env_logger in pdfutil

    <a name="v0.20.0"></a>

    Open source →
  25. 0.20.0 08 Mar 2019
    Release notes

    Release

    • Release 0.20.0

    Replace

    • Replace println with log macros

    Use

    • Use Rust 2018
    • Use pom 3.0

    <a name="v0.19.0"></a>

    Open source →
  26. 0.19.0 24 Oct 2018
    Release notes

    Allow

    • Allow xref section has zero entries

    Dictionary

    • Dictionary key type changed to Vec<u8>

    Format

    • Format code with rustfmt

    Improve

    • Improve codestyle (simplify loops, remove closures, use is_empty() etc.)

    Move

    • Move image dependency to embed_image feature

    Release

    • Release 0.19.0

    Skip

    • Skip corrupt deflate stream

    <a name="v0.18.0"></a>

    Open source →
  27. 0.18.0 05 Oct 2018
    Release notes

    Able

    • Able to read stream when it's length is in object stream

    Adress

    • Adress timezone formatting problem from #34

    Insert

    • insert image on page

    <a name="v0.17.0"></a>

    Open source →
  28. 0.17.0 19 Sep 2018
    Release notes

    Make

    • Make chrono crate optional

    Release

    • Release 0.17.0

    Update

    • Update add_barcode example

    <a name="v0.16.0"></a>

    Open source →
  29. 0.16.0 18 Sep 2018
    Release notes

    Add

    • Add form xobject to page
    • Add extract_stream subcommand

    Compress

    • Compress created Form xobject

    Compress

    • compress page content after change

    Fix

    • Fix collect_fonts_from_resources for referenced resources
    • Fix add xobject to page resources as direct object

    <a name="v0.15.3"></a>

    Open source →
  30. 0.15.3 14 Sep 2018
    Release notes

    Decompress

    • Decompress Form XObject

    Disable

    • Disable auto format markdown

    Fix

    • Fix bug in reading incremental updated document
    • Fix build warning
    • Fix string_to_bytes method

    Hexadecimal

    • Hexadecimal strings can contain white space.

    Remove

    • Remove println in extract_text

    Update

    • Update example code
    • Update example

    <a name="v0.15.0"></a>

    Open source →
  31. 0.15.2 08 Jun 2018

    Nothing published for this version

  32. 0.15.1 04 Feb 2018

    Nothing published for this version

  33. 0.15.0 04 Feb 2018
    Release notes

    Add

    • add get_object_mut
    • add method as_array_mut

    Extract

    • Extract text from specified pages

    Replace

    • Replace text of specified page

    <a name="v0.14.1"></a>

    Open source →
  34. 0.14.2 02 Feb 2018

    Nothing published for this version

  35. 0.14.1 04 Nov 2017
    Release notes

    Add

    • Add impl From<_> for Object for more numeric types
    • Add an Object::string_literal constructor
    • Add a dictionary! macro that creates a Dictionary
    • Add impl From<ObjectId> for Object creating Object::Reference

    Derive

    • Derive Clone for lopdf::Document

    Release

    • Release 0.14.0

    Remove

    • Remove the Seek bound on Document::save_to

    <a name="v0.13.0"></a>

    Open source →
  36. 0.14.0 03 Nov 2017

    Nothing published for this version

  37. 0.13.0 02 Oct 2017
    Release notes

    Avoid

    • Avoid decompress flate stream which has Subtype

    Debug

    • Debug with lldb

    Fix

    • Fix get_object for created document

    Ignore

    • Ignore invalid objects when reading all object in xref table

    Impl

    • impl fmt::Debug for Object

    Pdfutil

    • pdfutil add extract_pages command

    Read

    • Read optional space at the end of xref subsection header line

    Release

    • Release 0.13.0
    • Release 0.12.0

    Store

    • Store compressed stream objects and normal objects together

    <a name="v0.11.0"></a>

    Open source →
  38. 0.12.0 05 Sep 2017

    Nothing published for this version

  39. 0.11.0 21 Aug 2017
    Release notes

    Release

    • Release 0.11.0

    Use

    • Use itoa and dtoa to improve writing performance

    <a name="v0.10.0"></a>

    Open source →
  40. 0.10.0 20 Jul 2017
    Release notes

    Added

    • Added optional allows_compression for Stream object

    Release

    • Release 0.10.0

    <a name="v0.9.0"></a>

    Open source →
  41. 0.9.0 24 May 2017
    Release notes

    Add

    • Add pdfutil readme

    Added

    • Added unit test for load_from() and save_to()
    • Added Document::with_version + refactored save() and load()
    • Added Debug trait for lopdf::Document

    Apply

    • Apply multiple operations in one command

    Build

    • Build with Rust stable
    • Build with Rust beta

    Fix

    • Fix delete_zero_length_streams

    Fixed

    • Fixed unit tests
    • Fixed breaking API changes

    Release

    • Release 0.9.0

    <a name="v0.8.0"></a>

    Open source →
  42. 0.8.0 16 Mar 2017
    Release notes

    Change

    • Change Name(String) to Name(Vec<u8>)

    Delete_object

    • delete_object and delete_unused_objects

    Get_pages

    • get_pages and delete_pages

    Handle

    • Handle zero length stream

    Release

    • Release 0.8.0

    Traverse

    • Traverse objects from trailer recursively

    <a name="v0.7.0"></a>

    Open source →
  43. 0.7.0 07 Mar 2017
    Release notes

    Add

    • Add Content::decode() function

    Build

    • Build on Rust 1.17

    Create

    • Create String object for DateTime

    Parse

    • Parse PDF datetime value

    Read

    • Read xref stream in hybrid-reference file

    Update

    • Update create_document example
    • Update README

    <a name="v0.6.0"></a>

    Open source →
  44. 0.6.0 16 Feb 2017
    Release notes

    Add

    • Add Stream::decompressed_content() method

    Read

    • Read previous Xrefs of linearized or incremental updated document

    <a name="v0.5.0"></a>

    Open source →
  45. 0.5.0 10 Feb 2017
    Release notes

    Add

    • Add size field to Xref
    • Add Xref struct

    Decode

    • Decode PNG frame after FlateDecode

    Read

    • Read compressed objects from object stream
    • Read xref stream

    Update

    • Update README

    Use

    • Use pom 0.9.0

    XrefEntry

    • XrefEntry as enum type

    <a name="v0.4.0"></a>

    Open source →
  46. 0.4.1 03 Feb 2017

    Nothing published for this version

  47. 0.4.0 29 Jan 2017
    Release notes

    Add

    • Add Operation constructor
    • Add modify_text test
    • Add travis-ci build status
    • Add FAQ in Readme
    • Add print_xref_size() for debuging

    Decode

    • Decode content stream

    Encode

    • Encode content operations

    Fix

    • Fix load_document test
    • Fix https://github.com/rust-lang/rust/issues/39177

    Optimize

    • Optimize parser code

    Solve

    • Solve mutual reference problem between Pages and Page objects

    Trigger

    • Trigger new release to pass build on docs.rs

    Update

    • Update create PDF example

    <a name="v0.3.0"></a>

    Open source →
  48. 0.3.2 24 Jan 2017

    Nothing published for this version

  49. 0.3.1 20 Jan 2017

    Nothing published for this version

  50. 0.3.0 18 Jan 2017
    Release notes

    Add

    • Add compress/decompress subcommands to pdfutil

    Create

    • create PDF parser using pom instead of nom

    Dictionary

    • Dictionary preserve key insert order

    Update

    • Update README
    • Update parser to use pom 0.6.0

    Use

    • Use reader to get stream length if it is a reference object

    <a name="v0.2.0"></a>

    Open source →
  51. 0.2.1 06 Jan 2017

    Nothing published for this version

  52. 0.2.0 05 Jan 2017
    Release notes

    Add

    • Add pdfutil program

    Fix

    • Fix parsing PDF array error

    Improve

    • Improve documentation

    <a name="v0.1.0"></a>

    Open source →
  53. 0.1.1 27 Dec 2016

    Nothing published for this version

  54. 0.1.0 23 Dec 2016
    Release notes

    Editor

    • Editor config

    Impl

    • impl Document add_object method

    Improve

    • Improve Document::save functional type

    Initial

    • Initial commit

    PDF

    • PDF objects and document definition

    Parse

    • Parse and load PDF document

    Read

    • Read objects from xref table instead of sequentially from file stream

    Save

    • Save PDF document to file

    Store

    • Store max_id as a field of document
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive