HexaPDF v0.24.0 Release Notes

Release Date: 2022-08-01 // 12 days ago
  • ➕ Added

    • [HexaPDF::Layout::ListBox] for rendering ordered and unordered lists
    • [HexaPDF::Layout::ColumnBox] for rendering content inside columns
    • [HexaPDF::Layout::BoxFitter] for placing boxes into multiple frames
    • 🆕 New configuration option 'debug' for enabling debug output
    • 🚚 [HexaPDF::Document::Pages#move] for moving pages around the same document
    • [HexaPDF::Composer#box] for drawing arbitrary, registered boxes
    • [HexaPDF::Layout::Box#split_box?] for determining whether a box is a split box, i.e. the continuation of another box
    • [HexaPDF::Document::Layout::ChildrenCollector] to provide an easy method for defining children boxes of a container box

    🔄 Changed

    • 💥 Breaking change: Refactored [HexaPDF::Layout::Frame] and associated data structures so that the complete result of fitting a box is returned
    • 👍 [HexaPDF::Layout::Frame] to use a better algorithm for trimming the shape
    • [HexaPDF::Layout::Frame::new] to allow setting the initial shape
    • 💥 Breaking change: Removed contour line from [HexaPDF::Layout::Frame]
    • 💥 Breaking change: Changed positional arguments of [HexaPDF::Layout::TextBox::new] and [HexaPDF::Layout::ImageBox::new] to keyword arguments for a consistent box initialization interface
    • 0️⃣ [HexaPDF::Layout::Box#split] to provide a default implementation that is useful for most subclasses
    • Layout box implementations to provide a #supports_position_flow? method that indicates whether the box supports flowing its content around other content.
    • hexapdf info --check to only check the current version of each object
    • [HexaPDF::Writer] to make sure the producer information is written when writing the file incrementally

    🛠 Fixed

    • [HexaPDF::Layout::TextLayouter] to freeze the new items when a text fragment needs to be split
    • [HexaPDF::Layout::TextLayouter] to avoid the possible splitting of a text fragment if there would not be enough height left anyway
    • [HexaPDF::Layout::WidthFromPolygon] to work correctly in case of very small floating point errors
    • HexaPDF::Layout::TextFragment#inspect to work in case of interspersed numbers
    • [HexaPDF::Layout::TextBox#split] to work for position :flow when box is wider than the initial available width
    • [HexaPDF::Layout::Frame#fit] to create minimally sized mask rectangles
    • [HexaPDF::Content::GraphicObject::Geom2D] to close the path when drawing polygons
    • [HexaPDF::Layout::WidthFromPolygon] to work for all counterclockwise polygons
    • 🚚 [HexaPDF::Type::PageTreeNode#move_page] to work in case the parent node of the moved node doesn't change
    • 🚚 [HexaPDF::Type::PageTreeNode#move_page] to use the correct target position when the moved node is before the target position
    • [HexaPDF::Document::Signatures#add] to work in case the signature object is the last object written
    • CLI command hexapdf inspect to show correct byte range of the last revision
    • [HexaPDF::Writer#write_incremental] to only use a cross-reference stream if a revision directly used one and not through an /XRefStm entry
    • 💎 [HexaPDF::Encryption::FastARC4] to use RubyARC4 as fallback if OpenSSL has RC4 disabled
    • [HexaPDF::Font::Encoding::GlyphList] to use binary reading to avoid problems on Windows
    • [HexaPDF::Document::Signatures#add] to use binary writing to avoid problems on Windows

Previous changes from v0.23.0

  • ➕ Added

    • [HexaPDF::Composer#create_stamp] for creating a form Xobject
    • [HexaPDF::Revision#reset_objects] for deleting all live loaded and added objects
    • 👌 Support for removing or flattening annotations to the hexapdf modify command
    • Option to CLI command hexapdf form to allow generation of a template file
    • 👌 Support for centering a floating box in [HexaPDF::Layout::Frame]
    • [HexaPDF::Type::Catalog#names] for easier access to the name dictionary
    • [HexaPDF::Type::Names#destinations] for easier access to the destinations name tree
    • [HexaPDF::Document::Destinations], accessible via [HexaPDF::Document#destinations], as convenience interface for working with destination arrays

    🔄 Changed

    • 💥 Breaking change: Refactored the [HexaPDF::Document] interface for working with objects and move parts into [HexaPDF::Revisions]
    • 💥 Breaking change: [HexaPDF::Layout::TextBox] to use whole available width when aligning to the center or right
    • 💥 Breaking change: [HexaPDF::Layout::TextBox] to use whole available height when vertically aligning to the center or bottom
    • CLI command hexapdf inspect to show the type of revisions, as well as the number of objects per revision
    • ⚡️ [HexaPDF::Task::Optimize] to allow skipping invalid content stream operations
    • [HexaPDF::Composer#image] to allow using a form xobject in place of the image

    🛠 Fixed

    • [HexaPDF::Writer#write] to write modified objects into the correct revision
    • [HexaPDF::Revisions::from_io] to correctly handle hybrid-reference files
    • [HexaPDF::Writer] to assign a valid object number to a created cross-reference stream in all cases
    • [HexaPDF::Type::AcroForm::TextField] to validate the existence of a /MaxLen value for comb text fields
    • [HexaPDF::Type::AcroForm::TextField#field_value=] to check for the existence of /MaxLen when setting a value for a comb text field
    • [HexaPDF::Type::AcroForm::TextField#field_value=] to check the value against /MaxLen
    • 💅 [HexaPDF::Layout::TextLayouter#fit] to not use style valign when doing variable width layouting
    • [HexaPDF::Utils::SortedTreeNode#find_entry] to work in case of a node without a container name or kids key
    • CLI command hexapdf form to allow setting array values when using a template
    • CLI command hexapdf form to allow setting file select fields