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 2026Releases
latest 54-
0.44.010 Jul 2026Release notes
Open source →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
- @Jeadie made their first contribution in #512
- @ErikMach made their first contribution in #515
- @emschwartz made their first contribution in #516
- @nikolas-chomsky made their first contribution in #517
- @skoji made their first contribution in #521
Full Changelog: v0.43.0...v0.44.0
Release notes
Open source →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_contentreturnVec<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>
-
0.43.029 Jun 2026Release notes
Open source →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
- @notpeter made their first contribution in #508
- @Sachin-Bhat made their first contribution in #504
Full Changelog: v0.42.0...v0.43.0
-
0.42.024 Jun 2026Release notes
Open source →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>
-
0.41.004 Jun 2026Release notes
Open source →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_locatedependency to fix a performance regression introduced in v0.35.0.
<a name="v0.40.0"></a>
-
0.40.019 Mar 2026Release notes
Open source →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
getrandomto 0.4 andrandto 0.10.
Upgrade
- Upgrade
wasm-bindgen-testwhile we're at it.
<a name="v0.39.0"></a>
-
0.39.012 Jan 2026Release notes
Open source →What's Changed
Improvements
- Add pdf decryption support that derived from pdftk by @Mon-ius in #443
- Add font embedding support to Document API #219 by @Rayato159 in #439
- Add load_with_password for encrypted PDFs by @vysakh0 in #455
- Replace O(n×m) search_substring with O(n) linear algorithm by @withzombies in #460
- Add load_metadata() by @abimaelmartell in #459
- Support encrypted PDFs in metadata extraction API by @abimaelmartell in #461
Fixes
- Fix font resource linkage missed in PR #439 by @Rayato159 in #444
- Fix Handle Byte Order Marks in CMaps by @CryZe in #450
- Fixed parsing of empty bfrange / bfchar sections in ToUnicode CMaps by @RubyBit in #456
- Fix allow 'length' entry to be present for V=1 encryption by @lukaszgemborowski in #457
- Fix get_page_images: do not fail if page does not contain XObject by @lukaszgemborowski in #458
Thanks a lot to the new contributors:
- @Rayato159 made their first contribution in #439
- @CryZe made their first contribution in #450
- @vysakh0 made their first contribution in #455
- @RubyBit made their first contribution in #456
- @lukaszgemborowski made their first contribution in #457
- @withzombies made their first contribution in #460
- @abimaelmartell made their first contribution in #459
Release notes
Open source →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>
-
0.38.031 Aug 2025Release notes
Open source →See CHANGELOG.md for details.
Thanks a lot to the new contributors:
- @nicolasdao made their first contribution in #435
Release notes
Open source →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>
-
0.37.015 Aug 2025Release notes
Open source →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 bug (#422)
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>
-
0.36.015 Mar 2025Release notes
Open source →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>
-
0.35.019 Jan 2025Release notes
Open source →See CHANGELOG.md for details.
Thanks a lot to the new contributors:
- @tyilo made their first contribution in #320
- @seongs1024 made their first contribution in #324
- @SebRollen made their first contribution in #322
- @9renpoto made their first contribution in #329
- @liningpan made their first contribution in #335
- @lajp made their first contribution in #337
- @einoj made their first contribution in #340
- @Unpublished made their first contribution in #343
- @lanyeeee made their first contribution in #345
- @gmalette made their first contribution in #362
- @aedn-sama made their first contribution in #370
- @Jodolod made their first contribution in #371
Release notes
Open source →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
Replace
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>
-
0.34.001 Sep 2024Release notes
Open source →See CHANGELOG.md for details.
Thanks a lot for new contributors: @Heinenen, @dkaluza, @jrmuizelRelease notes
Open source →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
Update
<a name="v0.33.0"></a>
-
0.33.011 Jul 2024Release notes
Open source →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>
-
0.32.016 Jan 2024Release notes
Open source →Add
- Add debug format for hexadecimal (#240)
Added
- Added big generation value parsing (#257)
Added
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>
-
0.31.010 May 2023Release notes
Open source →Add
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
Qoperation from insert_image (#227)
<a name="v0.30.0"></a>
-
0.30.009 Apr 2023Release notes
Open source →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>
-
0.29.029 Oct 2022Release notes
Open source →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
extenddefinition confusion bug (#161)
Fixed
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>
-
0.28.023 Jul 2022 withdrawnNothing published for this version
-
0.27.016 Dec 2021Release notes
Open source →Add
- Add GitHub Actions build matrix (#127)
- Add Change Log
Added
Avoid
- Avoid panic when encounters negative stream length
Bookmarks
- Bookmarks (#135)
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>
-
0.26.029 Sep 2020Release notes
Open source →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
Merge
- Merge document PDF logic with some fixes (#117)
Various
- Various improvements, updated libraries and image features (#118)
<a name="v0.25.0"></a>
-
0.25.025 Jun 2020Release notes
Open source →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>
-
0.24.017 Feb 2020Release notes
Open source →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>
-
0.23.014 Jul 2019Release notes
Open source →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>
-
0.22.013 May 2019Release notes
Open source →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>
-
0.21.026 Apr 2019Release notes
Open source →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>
-
0.20.008 Mar 2019Release notes
Open source →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>
-
0.19.024 Oct 2018Release notes
Open source →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>
-
0.18.005 Oct 2018Release notes
Open source →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>
-
0.17.019 Sep 2018Release notes
Open source →Make
- Make chrono crate optional
Release
- Release 0.17.0
Update
- Update add_barcode example
<a name="v0.16.0"></a>
-
0.16.018 Sep 2018Release notes
Open source →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>
-
0.15.314 Sep 2018Release notes
Open source →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>
-
0.15.208 Jun 2018Nothing published for this version
-
0.15.104 Feb 2018Nothing published for this version
-
0.15.004 Feb 2018Release notes
Open source →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>
- add
-
0.14.202 Feb 2018Nothing published for this version
-
0.14.104 Nov 2017Release notes
Open source →Add
- Add
impl From<_> for Objectfor more numeric types - Add an Object::string_literal constructor
- Add a
dictionary!macro that creates a Dictionary - Add
impl From<ObjectId> for Objectcreating 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>
- Add
-
0.14.003 Nov 2017Nothing published for this version
-
0.13.002 Oct 2017Release notes
Open source →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>
-
0.12.005 Sep 2017Nothing published for this version
-
0.11.021 Aug 2017Release notes
Open source →Release
- Release 0.11.0
Use
- Use itoa and dtoa to improve writing performance
<a name="v0.10.0"></a>
-
0.10.020 Jul 2017Release notes
Open source →Added
- Added optional allows_compression for Stream object
Release
- Release 0.10.0
<a name="v0.9.0"></a>
-
0.9.024 May 2017Release notes
Open source →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>
-
0.8.016 Mar 2017Release notes
Open source →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>
-
0.7.007 Mar 2017Release notes
Open source →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>
-
0.6.016 Feb 2017Release notes
Open source →Add
- Add Stream::decompressed_content() method
Read
- Read previous Xrefs of linearized or incremental updated document
<a name="v0.5.0"></a>
-
0.5.010 Feb 2017Release notes
Open source →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>
-
0.4.103 Feb 2017Nothing published for this version
-
0.4.029 Jan 2017Release notes
Open source →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>
-
0.3.224 Jan 2017Nothing published for this version
-
0.3.120 Jan 2017Nothing published for this version
-
0.3.018 Jan 2017Release notes
Open source →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>
-
0.2.106 Jan 2017Nothing published for this version
-
0.2.005 Jan 2017Release notes
Open source →Add
- Add pdfutil program
Fix
- Fix parsing PDF array error
Improve
- Improve documentation
<a name="v0.1.0"></a>
-
0.1.127 Dec 2016Nothing published for this version
-
0.1.023 Dec 2016Release notes
Open source →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