- Added new field to
Document
,xref_start
. Default value is0
. - Added new function to
Document
:new_from_prev
,has_object
,add_page_contents
,set_object
- New structure added
IncrementalDocument
. - Support writing of PDF file with "Cross Reference Stream".
- Cross Reference Tables now write abbreviated tables when non-consecutive object are written.
v0.26.0 (2020-09-29)
- Add
as_str
,as_str_mut
methods toObject
(#107)
- dtoa may write real number in exponential format which is not allowed in PDF
- Genericize Content to allow
AsRef<[Operation]>
(#111)
- Merge document PDF logic with some fixes (#117)
- Various improvements, updated libraries and image features (#118)
v0.25.0 (2020-06-25)
- Add indexing checks (#98)
- Bugfix for xref_start. (#105)
- check that the buffer is big enough for startxref (#93)
- Create rust.yml (#104)
- extend recursion limit to non-local references (#100)
- Fix compilation error&test error (#102)
- keep looking for the last pattern (#94)
- limit recursion to the number of objects (#92)
- Limit allowed bracket depth. (#97)
- Move bracket depth checking into parsers. (#101)
- Release 0.25
- Return Result from as_array_mut() (#106)
- Update itoa and linked-hash-map (#91)
v0.24.0 (2020-02-17)
- Compute an accurate iterator size when the page tree is sane.
- Fix datetime parser (#89)
- More permissive datetime parsing (#90)
- Release 0.24
- Validate expected id in pom parser.
- Validate the expected id when reading indirect objects.
v0.23.0 (2019-07-14)
- Adapt pom parser.
- Add error descriptions.
- Add a proper error type and remove some more panics.
- Allow loading a document from a memory slice.
- Avoid allocating an intermediate collection for iteration.
- Avoid unwraps when already returning an Option for failure.
- Error signaling around compression and image handling.
- Escape fix (#68)
- Export dereference function as it is useful for PDF consumers.
- Export filters module.
- get_font_encoding seems more at home with Dictionary.
- Handle stream filter chains (#66)
- Hex fix (#67)
- Implement LZW decompression.
- Improve hex parsing performance.
- Make a page iterator.
- Make Reader::read consume the Reader.
- Make content operations faillible.
- Protect against reference loops.
- Protect against a corrupted page tree.
- Refactor a bit to allow a utility function.
- Release 0.23.0
- 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 unwraps in processor.rs.
- Return results when appropriate.
- Separate decompression into two functions.
- Take care of panic that I actually hit on the pom side.
- Take care of creator.rs.
- Unify buffer creation.
- Use lifetime ellision.
- Use TryInto.
- Use writeln where appropriate.
- Use error enum in reader.
- Use stable cloned.
v0.22.0 (2019-05-13)
- Add parsing benchmark.
- Add nom dependency.
- Also test with nom parsing feature enabled.
- Array and dictionary parsing.
- Avoid using format! when writing.
- Be explicit about trait objects.
- Boolean and null parsing.
- Content parsing.
- Duplicate pom parser for incremental replacement with nom 5.
- Ease off on rayon a bit.
- Escape sequence parsing.
- extern crate is not required anymore with 2018 edition.
- Fix last ugly parser.
- Fix octal parser.
- Fix pdfutil build
- Float parsing.
- Header parsing.
- Hex string parsing.
- Indirect object and stream parsing.
- Literal string syntax.
- Make sure Stream.start_position is relative to the whole file.
- Merge remote-tracking branch 'upstream/master' into nom5
- Merge remote-tracking branch 'upstream/master' into nom5
- More 2018 edition lints.
- More cleanup.
- More cleanup.
- More simplifications.
- Object id and reference parsing.
- Octal and hexadecimal parsing.
- Parallel object stream parsing.
- Rayon usage proof of concept.
- Release 0.22.0
- Remove pom dependency in tests.
- Replace name parser.
- Resolve name collisions.
- Simplify lifetime annotations.
- Slowly replace the cute pom parser with nom.
- Trailer and xref start.
- Turns out "contained" already exists in nom.
- Unify both variants of the parsing functions.
- 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 move.
- Xref stream and trailer parsing.
- Xref parsing.
v0.21.0 (2019-04-26)
- Avoid allocating a String.
- Check offsets read from file to avoid panics
- Check and correct Size entry of trailer dictionary
- Clean up bytes_to_string, string_to_bytes iterators
- Fix clippy warnings
- Fix .editorconfig
- fixed finally
- Redundant imports with 2018 edition.
- Release 0.21.0
- Update example
- Update Cargo.toml
- Use env_logger in pdfutil
v0.20.0 (2019-03-07)
- Release 0.20.0
- Replace println with log macros
- Use Rust 2018
- Use pom 3.0
v0.19.0 (2018-10-24)
- Allow xref section has zero entries
- Dictionary key type changed to Vec
- Format code with rustfmt
- Improve codestyle (simplify loops, remove closures, use is_empty() etc.)
- Move image dependency to embed_image feature
- Release 0.19.0
- Skip corrupt deflate stream
v0.18.0 (2018-10-05)
- Able to read stream when it's length is in object stream
- Adress timezone formatting problem from #34
- insert image on page
v0.17.0 (2018-09-19)
- Make chrono crate optional
- Release 0.17.0
- Update add_barcode example
v0.16.0 (2018-09-18)
- Add form xobject to page
- Add extract_stream subcommand
- Compress created Form xobject
- compress page content after change
- Fix collect_fonts_from_resources for referenced resources
- Fix add xobject to page resources as direct object
v0.15.3 (2018-09-14)
- Decompress Form XObject
- Disable auto format markdown
- Fix bug in reading incremental updated document
- Fix build warning
- Fix string_to_bytes method
- Hexadecimal strings can contain white space.
- Remove println in extract_text
- Update example code
- Update example
v0.15.0 (2018-02-04)
- add
get_object_mut
- add method as_array_mut
- Extract text from specified pages
- Replace text of specified page
v0.14.1 (2017-11-03)
- 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 Clone for lopdf::Document
- Release 0.14.0
- Remove the Seek bound on Document::save_to
v0.13.0 (2017-10-02)
- Avoid decompress flate stream which has Subtype
- Debug with lldb
- Fix get_object for created document
- Ignore invalid objects when reading all object in xref table
- impl fmt::Debug for Object
- pdfutil add extract_pages command
- Read optional space at the end of xref subsection header line
- Release 0.13.0
- Release 0.12.0
- Store compressed stream objects and normal objects together
v0.11.0 (2017-08-21)
- Release 0.11.0
- Use itoa and dtoa to improve writing performance
v0.10.0 (2017-07-20)
- Added optional allows_compression for Stream object
- Release 0.10.0
v0.9.0 (2017-05-24)
- Add pdfutil readme
- Added unit test for load_from() and save_to()
- Added Document::with_version + refactored save() and load()
- Added Debug trait for lopdf::Document
- Apply multiple operations in one command
- Build with Rust stable
- Build with Rust beta
- Fix delete_zero_length_streams
- Fixed unit tests
- Fixed breaking API changes
- Release 0.9.0
v0.8.0 (2017-03-16)
- Change Name(String) to Name(Vec)
- delete_object and delete_unused_objects
- get_pages and delete_pages
- Handle zero length stream
- Release 0.8.0
- Traverse objects from trailer recursively
v0.7.0 (2017-03-07)
- Add Content::decode() function
- Build on Rust 1.17
- Create String object for DateTime
- Parse PDF datetime value
- Read xref stream in hybrid-reference file
- Update create_document example
- Update README
v0.6.0 (2017-02-16)
- Add Stream::decompressed_content() method
- Read previous Xrefs of linearized or incremental updated document
v0.5.0 (2017-02-10)
- Add size field to Xref
- Add Xref struct
- Decode PNG frame after FlateDecode
- Read compressed objects from object stream
- Read xref stream
- Update README
- Use pom 0.9.0
- XrefEntry as enum type
v0.4.0 (2017-01-29)
- Add Operation constructor
- Add modify_text test
- Add travis-ci build status
- Add FAQ in Readme
- Add print_xref_size() for debuging
- Decode content stream
- Encode content operations
- Fix load_document test
- Fix rust-lang/rust#39177
- Optimize parser code
- Solve mutual reference problem between Pages and Page objects
- Trigger new release to pass build on docs.rs
- Update create PDF example
v0.3.0 (2017-01-18)
- Add compress/decompress subcommands to pdfutil
- create PDF parser using pom instead of nom
- Dictionary preserve key insert order
- Update README
- Update parser to use pom 0.6.0
- Use reader to get stream length if it is a reference object
v0.2.0 (2017-01-05)
- Add pdfutil program
- Fix parsing PDF array error
- Improve documentation
- Editor config
- impl Document add_object method
- Improve Document::save functional type
- Initial commit
- PDF objects and document definition
- Parse and load PDF document
- Read objects from xref table instead of sequentially from file stream
- Save PDF document to file
- Store max_id as a field of document