- [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
- 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]
- [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
- [HexaPDF::Type::FontType0] and [HexaPDF::Type::CIDFont] for composite font support
- Complete support for CMaps for use with composite fonts; the interface for [HexaPDF::Font::CMap] changed to accomodate this
- CLI command
hexapdf batch
for batch execution of a single command for multiple input files - CLI option
--verbose
for more verbose output; also changed the default verbosity level to only display warnings and not informational messages - CLI option
--quiet
for suppressing additional and diagnostic output - CLI option
--strict
for enabling strict parsing and validation; also changed the default from strict to non-strict parsing/validation - CLI optimization option
--optimize-fonts
for optimizing embedded fonts - Method
#word_spacing_applicable?
to font types - Support for marked-content points and sequences in [HexaPDF::Content::Canvas]
- Support for property lists in a page's resource dictionary
- Show file name and size in
hexapdf info
output - [HexaPDF::Type::Font#font_file] for getting the embedded font file
- [HexaPDF::Font::TrueType::Optimizer] for optimizing TrueType fonts
- Configuration option 'filter.flate_memory' for configuring memory use of the [HexaPDF::Filter::FlateDecode] filter
- Method [HexaPDF::Content::Canvas#show_glyphs_only] for faster glyph showing without text matrix calculations
- Methods for caching expensive computations of PDF objects ([HexaPDF::Document#cache] and others)
- Enabled in-place processing of PDF files for all CLI commands
- Show warning instead of exiting when extracting images with
hexapdf images
and an image format is not supported - Handling of character code to Unicode mapping:
- [HexaPDF::Font::CMap#to_unicode], [HexaPDF::Font::Encoding::Base#unicode]
and [HexaPDF::Font::Encoding::GlyphList#name_to_unicode] return
nil
instead of an empty string - Font dictionaries use the new configuration option
'font.on_missing_unicode_mapping' in their
#to_utf8
method
- [HexaPDF::Font::CMap#to_unicode], [HexaPDF::Font::Encoding::Base#unicode]
and [HexaPDF::Font::Encoding::GlyphList#name_to_unicode] return
- [HexaPDF::Configuration#constantize] to raise error if constant is not found
- Extracted TrueType font file building code into new module [HexaPDF::Font::TrueType::Builder]
- [HexaPDF::Filter::FlateDecode] filter to use pools of Zlib inflaters and deflaters to conserve memory
- Use of wrong glyph IDs for glyph width entries and unicode mapping for subset TrueType fonts
- Invalid document reference when importing wrapped direct objects with [HexaPDF::Importer]
- Invalid type of /DW key in CIDFont dictionary when embedding TrueType fonts
- Caching problem in [HexaPDF::Document::Fonts] which lead to multiple instances of the same font
- Bug in handling of word spacing with respect to offset calculations when showing or extracting text
- Incorrect handling of page rotation values in
hexapdf merge
- Missing handling of certain rotation values in
hexapdf modify
- Removal of unused pages in
hexapdf modify
- Handling of invalid page numbers in CLI commands
- Useless multiple extraction of the same image in
hexapdf images
- Type of /VP entry of [HexaPDF::Type::Page]
- Parsing of inline images that contain the end-of-image marker
- High memory usage due to not closing
Zlib::Stream
objects in [HexaPDF::Filter::FlateDecode]
- TrueType font subsetting support
- Image extraction ability to CLI via
hexapdf images
command - [HexaPDF::Type::Image#write] for writing an image XObject to an IO stream or file
- [HexaPDF::Type::Image#info] for getting image properties of an image XObject
- CLI option
--[no-]force
to force overwriting existing files
- Refactor
hexapdf modify
command into three individual commandsmodify
,merge
andoptimize
- Rename
hexapdf extract
tohexapdf files
and the option--indices
to--extract
- Show PDF trailer by default with
hexapdf inspect
- Refactor CLI command classes to use specialized superclass [HexaPDF::CLI::Command]
- Optimize parsing of PDF files for better performance and memory efficiency
- Writing of hybrid-reference PDF files - they are written as standard PDF files since all current applications should be able to handle PDF 1.5
- Serialization of self-referential, indirect PDF objects
- Performance problem for
hexapdf inspect --pages
when inspecting huge files - TrueType compound glyph component offset calculation
- Parsing of TrueType data type 'fixed'
- Updating a PDF trailer's ID field when it isn't an array
- PDF file merge ability to
hexapdf modify
, i.e. adding pages from other PDFs - Page interleaving support to 'hexapdf modify'
- Step values in pages definitions for CLI commands
- Convenience class for working with pages through [HexaPDF::Document#pages] with a more Ruby-like interface
- Method [HexaPDF::Type::Form#canvas]
- Method [HexaPDF::Type::Page#index]
- Validation for [HexaPDF::Rectangle] objects
- [HexaPDF::Font::Type1::FontMetrics#weight_class] for returning the numeric weight
- Refactor document utilities into own classes with a more Ruby-like interface; concern fonts, images and files, now accessible through [HexaPDF::Document#fonts], [HexaPDF::Document#images] and [HexaPDF::Document#files]
- Validate nested collection values in [HexaPDF::Object]
- Allow [HexaPDF::Dictionary#[]] to always unwrap nil values
- Update [HexaPDF::Task::Optimize] to delete unused objects on
:compact
- Allow [HexaPDF::Type::PageTreeNode#delete_page] to take a page object or a page index
- Don't set /EFF key in encryption dictionary
- Better error handling for hexapdf CLI commands
- Show help output when no command is given for
hexapdf
CLI - Set /FontWeight in [HexaPDF::Font::Type1Wrapper]
- Use kramdown's man page support for the
hexapdf
man page instead of ronn
- Remove unneeded parts of TrueType implementation
- Problem with unnamed classes/modules on serialization
- Handle potentially indirect objects correctly in [HexaPDF::Object::deep_copy]
- [HexaPDF::Revisions#merge] for objects that appear in multiple revisions
- Output of
--pages
option of 'hexapdf inspect' command - Infinite recursion problem in [HexaPDF::Task::Dereference]
- Problem with iteration over images in certain cases
- [HexaPDF::Type::Page#[]] with respect to inherited fields
- Problems with access permissions on encryption
- Encryption routine of standard security handler with respect to owner password
- Invalid check in validation of standard encryption dictionary
- 'hexapdf modify' command to support files with many pages
- Validation of encryption key for encryption revision 6
- Various parts of the API documentation
- Initial release