All Versions
44
Latest Version
Avg Release Cycle
21 days
Latest Release
270 days ago
Changelog History
Page 4
Changelog History
Page 4
-
v0.11.0 Changes
November 19, 2019➕ Added
- [HexaPDF::PDFArray] to wrap arrays and allow automatic resolution of references like with [HexaPDF::Dictionary] - MAY BREAK THINGS!
- CLI command
hexapdf watermark
to apply a watermark PDF as background or stamp onto another PDF file - CLI command
hexapdf image2pdf
to convert images into a PDF file - [HexaPDF::DictionaryFields::Field#allowed_values] to allow constraining a field to certain allowed values
- 🔧 [HexaPDF::Document::Fonts#configured_fonts] to return all font variants that are configured and available for adding to a document
- [HexaPDF::Type::Annotations::Widget] and associated classes
- [HexaPDF::Type::AcroForm::Form] and [HexaPDF::Type::AcroForm::Field] for basic AcroForm support
🔄 Changed
- 👉 Use Reline for interactive mode of
hexapdf inspect
if available - [HexaPDF::DictionaryFields::Field::new] to use keyword arguments
- ⚡️ Update the field information for implemented PDF types to include the allowed values where possible
- Interface of font loader objects to allow another method
available_fonts
for returning all available fonts - 💅 [HexaPDF::Layout::Style] to check for valid values where possible
🛠 Fixed
- Line spacing of empty lines for [HexaPDF::Layout::TextLayouter]
- Handling of
/DecodeParms
when exporting to PNG images
-
v0.10.0 Changes
October 02, 2019➕ Added
- [HexaPDF::Reference#to_s] to return the serialized form of the PDF reference
- [HexaPDF::Revision#xref] for getting cross-reference entries
- HexaPDF::XRefSection::Entry#to_s to return a description of the cross-reference entry
🔄 Changed
- ✨ Enhanced the
hexapdf images
command to also show information on PPI (pixels per inch) and size - Completely revamped the
hexapdf inspect
command with an interactive mode, structure output, cross-reference entry output and object search - Output of validation problem messages for
hexapdf
command to include more information - The Validation feature to automatically correct String-for-Symbol and Symbol-for-String problems
🛠 Fixed
- 👍 [HexaPDF::Document#wrap] to better handle subtype mappings in case of unknown type information
- [HexaPDF::DictionaryFields::DictionaryConverter] to not allow conversion to a [HexaPDF::Stream] subclass from objects without stream data
- Import of JPEG images with YCCK color encoding
- Export of images without
/FlateDecode
filter or/DecodeParms
to PNG files - Mistyped name of field type for field
/Popup
of [HexaPDF::Type::Annotations::MarkupAnnotation] - Loading and saving of encrypted and signed PDFs
- ⚡️ CLI commands that optimize font data structures won't crash when encountering invalid font objects
-
v0.9.3 Changes
June 13, 2019🔄 Changed
- ↪ Behaviour of how object streams are generated to work around a bug (?) in Adobe Acrobat
🛠 Fixed
- 🛠 Fix problem with [HexaPDF::Encryption::StandardSecurityHandler] due to
behaviour change of Ruby 2.6.0 in
String#setbyte
-
v0.9.2 Changes
May 22, 2019🔄 Changed
- [HexaPDF::Encryption::AES] to handle invalid padding
- [HexaPDF::Filter::FlateDecode] to correctly handle invalid empty streams
-
v0.9.1 Changes
March 26, 2019🛠 Fixed
- [HexaPDF::Serializer] to avoid infinite loops for self-referencing streams
- 🐛 Bug due to frozen string in [HexaPDF::Font::CMap::Writer]
-
v0.9.0 Changes
December 31, 2018➕ Added
- [HexaPDF::Composer] for composing PDF documents in a high-level way
- 👍 Incremental writing support (i.e. appending a single revision with all the changes to an existing document) to [HexaPDF::Writer] and [HexaPDF::Document]
- CLI command
hexapdf split
to split a PDF file into individual pages - 📜 [HexaPDF::Revisions#parser] for accessing the parser object that is created when a document is read from an IO stream
- [HexaPDF::Document#each] argument
only_loaded
for iteration over loaded objects only - [HexaPDF::Document#validate] argument
only_loaded
for validating only loaded objects - [HexaPDF::Revision#each_modified_object] for iterating over all modified objects of a revision
- [HexaPDF::Layout::Box#split] and [HexaPDF::Layout::TextBox#split] for splitting a box into two parts
- ✅ [HexaPDF::Layout::Frame#full?] for testing whether the frame has any space left
- [HexaPDF::Layout::Style] property
last_line_gap
for controlling the spacing after the last line of text - HexaPDF::Layout::Box#draw_content for use by subclasses
- [HexaPDF::Type::Form#width] and [HexaPDF::Type::Form#height] for compatibility with [HexaPDF::Type::Image]
- [HexaPDF::Layout::ImageBox] for displaying an image inside a frame
🔄 Changed
- [HexaPDF::Revision#each] to allow iteration over loaded objects only
- [HexaPDF::Document#each] method argument from
current
toonly_current
- [HexaPDF::Object#==] and [HexaPDF::Reference#==] so that Object and Reference objects can be compared
- 🔨 Refactored [HexaPDF::Layout::Frame] to allow separate fitting, splitting and drawing of boxes
- 💅 [HexaPDF::Layout::Style::LineSpacing::new] to allow setting of line spacing via a single hash argument
- 💅 Made [HexaPDF::Layout::Style] copyable
🛠 Fixed
- 🔧 Configuration so that annotation objects are correctly mapped to classes
- 🛠 Fix problem with [HexaPDF::Filter::Predictor] due to behaviour change of Ruby
2.6.0 in
String#setbyte
- Fitting of [HexaPDF::Layout::TextBox] when the box has padding and/or borders
- Fitting of [HexaPDF::Layout::TextBox] when width and/or height has been set
- Fitting of absolutely positioned boxes in [HexaPDF::Layout::Frame]
- 🛠 Fix bug in variable width line wrapping due to not considering line spacing correctly ([HexaPDF::Layout::Line::HeightCalculator#simulate_height] return value needed to be changed for this fix)
-
v0.8.0 Changes
October 26, 2018➕ Added
- [HexaPDF::Layout::Frame] for box positioning and easier text layouting inside an arbitrary polygon
- [HexaPDF::Layout::TextBox] for displaying text in a rectangular and for flowing text inside a frame
- [HexaPDF::Layout::WidthFromPolygon] for getting a width specification from a polygon for use with the text layouting engine
- [HexaPDF::Type::Image#width] and [HexaPDF::Type::Image#height] convenience methods
- 👍 [HexaPDF::Type::FontType3] for Type 3 font support
- 👍 [HexaPDF::Content::GraphicObject::Geom2D] for Geom2D object drawing support
- [HexaPDF::Type::Page#orientation] for easy determination of page orientation
- [HexaPDF::Type::Page#rotate] for rotating a page
- 💅 [HexaPDF::Layout::Style::Quad#set] for setting all values at once
🔄 Changed
- [HexaPDF::Document#validate] to also yield the object that failed validation
- [HexaPDF::Type::Page#box] to allow setting the value for a box
- [HexaPDF::Layout::TextLayouter#fit] to allow fitting text into arbitrarily shaped areas
- [HexaPDF::Layout::TextLayouter] to return a new
[HexaPDF::Layout::TextLayouter::Result] structure when
#fit
is called that includes the#draw
method - [HexaPDF::Layout::TextLayouter#fit] to require the height argument
- 🔨 Refactored [HexaPDF::Layout::Box] to make using it a bit easier
🛠 Fixed
- Validation and conversion of dictionary fields with multiple possible types
- Box border drawing when border width is greater than edge length
-
v0.7.0 Changes
June 19, 2018🔄 Changed
- 💎 All Ruby source files use frozen string literal pragma
- [HexaPDF::MalformedPDFError::new] method signature
- [HexaPDF::Layout::TextFragment::new] and [HexaPDF::Layout::TextFragment::create] method signatures
- [HexaPDF::Encryption::SecurityHandler#set_up_encryption] argument
force_V4
toforce_v4
- HexaPDF::Layout::TextLayouter#draw to return result of #fit if possible
✂ Removed
- Optional
leading
argument to HexaPDF::Content::Canvas#font_size method
🛠 Fixed
- Misspelt variable name in [HexaPDF::Layout::TextLayouter::SimpleLineWrapping]
- [HexaPDF::Layout::TextLayouter::SimpleTextSegmentation] to work if the last character in a text fragment is \r
- [HexaPDF::Layout::TextLayouter] to work if an optional break point (think soft-hyphen) is followed by whitespace
- 🏗 [HexaPDF::Font::TrueType::Builder] to correctly order the entries in the table directory
- 🏗 [HexaPDF::Font::TrueType::Builder] to pad the table data to achieve the correct alignment
- [HexaPDF::Filter::FlateDecode] by removing the Zlib pools since they were not thread safe
- All color space classes to accept the color space definition as argument to
::new
-
v0.6.0 Changes
October 27, 2017➕ Added
- [HexaPDF::Layout::Box] as base class for all layout boxes
- 💅 More styling properties for [HexaPDF::Layout::Style]
- 💅 Methods for checking whether styling properties in [HexaPDF::Layout::Style] have been accessed or set
- [HexaPDF::FontLoader::FromFile] to allow specifying a font file directly
- Configuration option 'page.default_media_orientation' for settig the default orientation of new pages
- Convenience methods for getting underline and strikeout properties from fonts
- 💅 Configuration option 'style.layers_map' for pre-defining overlay and underlay callback objects for [HexaPDF::Layout::Style]
- [HexaPDF::Type::Action] as well as specific implementations for the GoTo, GoToR, Launch and URI actions
- [HexaPDF::Type::Annotation] as well as specific implementations for the Text Link annotations
- 💅 [HexaPDF::Layout::Style::LinkLayer] for easy adding of in-document, URI and file links
🔄 Changed
- 👍 [HexaPDF::Layout::TextFragment] to support more styling properties
- 📜 Cross-reference subsection parsing can handle missing whitespace
- 📇 Renamed HexaPDF::Layout::LineFragment to [HexaPDF::Layout::Line]
- 📇 Renamed HexaPDF::Layout::TextBox to [HexaPDF::Layout::TextLayouter]
- [HexaPDF::Layout::TextFragment::new] and [HexaPDF::Layout::TextLayouter::new] to either take a Style object or style options
- [HexaPDF::Layout::TextLayouter#fit] method signature
- [HexaPDF::Layout::InlineBox] to wrap a generic box
- HexaPDF::Document::Fonts#load to [HexaPDF::Document::Fonts#add] for consistency
- [HexaPDF::Document::Pages#add] to allow setting the paper orientation when creating new pages
- [HexaPDF::Filter::Predictor] to allow correcting some common problems depending on the new configuration option 'filter.predictor.strict'
- 🔧 Moved configuration options 'encryption.aes', 'encryption.arc4', 'encryption.filter_map', 'encryption.sub_filter.map', 'filter.map', 'image_loader' and 'task.map' to the document specific configuration object
- 🔧 [HexaPDF::Configuration#constantize] can now dig into hierarchical values
- 🔧 [HexaPDF::Document#wrap] class resolution and configuration option structure of 'object.subtype_map'
✂ Removed
- HexaPDF::Dictionary#to_hash method
🛠 Fixed
- [HexaPDF::Layout::TextLayouter#fit] to split text fragment into parts if the fragment doesn't fit on an empty line
- 📜 Parsing of PDF files containing a loop with respect to cross-reference tables
- [HexaPDF::Layout::InlineBox] to act as placeholder if no drawing block is given
- Undefined method error in [HexaPDF::Content::Canvas] by raising a proper error
- Invalid handling of fonts by [HexaPDF::Content::Canvas] when saving and restoring the graphics state
- [HexaPDF::Layout::TextLayouter] so that text fragments don't pollute the graphics state
- [HexaPDF::Content::Operator::SetTextRenderingMode] to normalize the value
- [HexaPDF::Stream#stream_source] to always return a decrypted stream
- [HexaPDF::Layout::TextLayouter] to correctly indent all paragraphs, not just the first one
- One-off error in [HexaPDF::Filter::LZWDecode]
- 🔧 [HexaPDF::Configuration#merge] to duplicate array values to avoid unwanted modifications
- [HexaPDF::Dictionary#key?] to return false if the key is present but nil
- [HexaPDF::DictionaryFields::FileSpecificationConverter] to convert hash and dictionaries
- Field /F definition in [HexaPDF::Stream]
-
v0.5.0 Changes
June 24, 2017➕ Added
- HexaPDF::Layout::TextBox for easy positioning and layouting of text
- HexaPDF::Layout::LineFragment for single text line layout calculations
- [HexaPDF::Layout::TextShaper] for text shaping functionality
- [HexaPDF::Layout::TextFragment] for basic text metrics calculations
- 🛠 [HexaPDF::Layout::InlineBox] for fixed size inline graphics
- 💅 [HexaPDF::Layout::Style] as container for text and graphics styling properties
- 👌 Support for kerning of TrueType fonts via the 'kern' table
- 👌 Support for determining the features provided by a font
🔄 Changed
- Handling of invalid glyphs is done using the special [HexaPDF::Font::InvalidGlyph] class
- Configuration option 'font.on_missing_glyph'; returns an invalid glyph instead of raising an error
- Bounding box of TrueType glyphs without contours is set to
[0, 0, 0, 0]
- Ligature pairs for AFM fonts are stored like kerning pairs
- Use TrueType configuration option 'font.true_type.unknown_format' in all places where applicable
- 👍 Allow passing a font object to [HexaPDF::Content::Canvas#font]
- 🖐 Handle invalid entry in TrueType format 4 cmap subtable encountered in the wild gracefully
- Invalid positive descent values in font descriptors are now changed into negative ones by the validation feature
- 👍 Allow specifying the page media box or a page format when adding a new page through [HexaPDF::Document::Pages#add]
🛠 Fixed
- [HexaPDF::Task::Dereference] to work correctly when encountering invalid references
- 📜 [HexaPDF::Tokenizer] and HexaPDF::Content::Tokenizer to parse a solitary plus sign
- Usage of Strings instead of Symbols for AFM font kerning and ligature pairs
- 🖨 Processing the contents of form XObjects in case they don't have a resources dictionary
- ⚡️ Deletion of valid page node when optimizing page trees with the
hexapdf optimize
command - [HexaPDF::Type::FontType0] to always wrap the descendant font even if it is a direct object