0.9.2 2025-02-19T06:57:42+13:00 - Further fixes to Y offset placement. 0.9.1 2025-02-18T08:55:20+13:00 - Fix text-flow regression. Noticed in PDF-API6/t/colors.t rendering. 0.9.0 2025-02-18T06:23:36+13:00 - Add margins (top left bottom right) and offset[dx,dy] to text boxes. 0.8.16 2025-02-08T08:45:59+13:00 - Fix text-box rendering bug with changing the height of the first line. 0.8.15 2024-12-25T07:56:04+13:00 - Delegate font encoding and hyphen processing from text box to text style. - Select either \c[HYPEN] and \c[HYPHEN-MINUS] from fonts 0.8.14 2024-12-24T07:43:50+13:00 - Handle partial and multiple space characters: \c[EN SPACE] \c[EM SPACE] \c[THIN SPACE] \c[HAIR SPACE] \c[THREE-PER-EM SPACE] \c[FOUR-PER-EM SPACE] \c[SIX-PER-EM SPACE] 0.8.13 2024-12-23T07:09:50+13:00 - Handle zero width spaces. - Accept both \c[HYPEN] and \c[HYPHEN-MINUS] as a continuation hyphen in input text and for font rendering. 0.8.12 2024-12-09T07:07:11+13:00 - Tweak current-point() for #28 and also to more faithfully follow the spec. Return and undefined list, if there's no current point, rather than (undef, undef). 0.8.11 2024-12-06T17:19:32+13:00 - Handle "\c[HYPHENATION POINT]" characters in input text. They may converted to actual hyphens to facilitate line-breaking, but are otherwise ignored. - Tweak justification of partial lines. Add `:max-word-gap` option. Perform text block alignment early to facilitate introspection. Make line word-gap() into a read/write assessor to allow adjustments. 0.8.10 2024-10-15T07:18:16+13:00 - Fix X::PDF::Content::Image subclassing - Implement core-font-name(), is-embedded(), is-subset() and is-core-font() methods in PDF::Content::FontObj role - Add target-class() to PDFTiny::Loader 0.8.9 2024-09-29T06:36:58+13:00 - Add replace ad-hoc "Illegal nesting of marked content" with specific X::PDF::Content::OP::BadNesting::MarkedContent exception - Rename exceptions X::PDF::Image:: to X::PDF::Content::Image:: - Create a compilation unit for X::PDF::Content exceptions 0.8.8 2024-09-22T10:10:22+12:00 - Add Page-Tree global-resources-scope() rw accessor #24 0.8.7 2024-09-17T07:31:52+12:00 - Allow canvas resource-key() method to be used as a setter. See t/do.t 0.8.6 2024-09-06T07:49:22+12:00 - Fix off-by-one bug in 'Unexpected Operator' warnings - Rework matrix inverse() function 0.8.5 2024-07-31T06:33:26+12:00 - Add a PDF::Native v0.1.8+ fast-path for parsing and serializing graphics content. 0.8.4 2024-07-28T09:42:57+12:00 - Handle potential 2-dimensional kerning from PDF::Font::Loader shaping. 0.8.3 2024-07-23T05:41:11+12:00 - Fix inline-content() method, broken in 0.8.2 0.8.2 2024-07-23T05:12:02+12:00 - Support PDF 2.0 mandated /L (length) entry in inline XObject Images - Revised inline image handling for latest PDF and PDF::Grammar. 0.8.1 2024-02-27T08:11:19+13:00 - Support text box :shape, :!kern option combination. I.e. shaping, but without horizontal kerning. 0.8.0 2024-02-15T13:09:07+13:00 - Add text-box :$direction and :$bidi options. These require installation of the optional Text::FriBidi Raku module. 0.7.7 2024-02-07T08:26:57+13:00 - Store original text atoms in text lines @!decoded attribute. Fix text() method to return these rejoined, rather than encoded byte-strings. 0.7.6 2024-01-31T11:16:39+13:00 - Handle missing Ascender, Descender metric values in height calculations for ZapfDingbats & Symbol core fonts. 0.7.5 2024-01-28T12:02:11+13:00 - Implicitly set baseline to match valign so that the entire text box and, in particular, a single line of text is aligned as expected - see https://github.com/pdf-raku/PDF-API6/issues/17 0.7.4 2024-01-21T10:47:12+13:00 - Add encoding allocate-cid() method - for PDF::Font::Loader v0.8.0+ shaping. 0.7.3 2024-01-02T07:45:29+13:00 - Add core-font shape method with ligatures and kerning. - Add PDF::Content::Font::Encoder interface role 0.7.2 2023-10-17T06:40:11+13:00 - Fix local-glyph-name return value. Was causing regressions in PDF::To::Cairo 0.7.1 2023-09-17T08:37:57+12:00 - Fix Canvas `has-pre-gfx()` return value. Was causing regressions in PDF::Font::Loader. - Refactor text-box text positioning calculations 0.7.0 2023-09-11T08:09:51+12:00 - Tone down text-box :valign to only affect the text flow of multi- line text boxes. This removes the overlap with :baseline-shift. They no longer combine to allow shifting of Text boxes by up to two lines #16 0.6.16 2023-09-08T08:29:55+12:00 - Make text-box text() method a rw accessor - Fix text box rendering x, y returned position - Fix text flow with horizontal and vertical alignment 0.6.15 2023-08-26T07:00:47+12:00 - Breakup README.md add source-level POD. Add Makefile with 'doc' target to build markdown under 'docs/' directory - Add return constraints to methods/subs (mostly to improve POD) 0.6.14 2023-08-02T15:25:37+12:00 - Exclude invisible text from text-flow calculations 0.6.13 2023-08-02T13:02:41+12:00 - Fixes to return positional values of Graphics .print and .say methods: my ($x0, $y0, $x1, $y1) = $gfx.print("text"); -- Track and take account of current text flow in computing $x0, $x1: This is only an issue if the text is continuing the current line -- Add any :$baseline offset to $y0, $y1. 0.6.12 2023-06-30T07:17:24+12:00 - Export PDF::Content::Font::Enc::Type1 :Type1EncodingScheme - Fix over-generalised caching of fonts 0.6.11 2023-06-29T08:23:35+12:00 - Add PDF::Content user-coords() method. This is the inverse of the existing base-coords() method. - Added automatic font object loading from the content stream. See tests in t/text-box.t. Also requires PDF::Font::Loader. - Added type() and encoding() methods to core fonts for improved compatibility with PDF::Font::Loader::FontObj objects. 0.6.10 2023-03-15T07:04:53+13:00 - Add PDF::Content::API role. A set of base methods for content APIs (PDF::Class, PDF::Lite). - Make to-landscape() available as an exportable sub 0.6.9 2022-11-28T07:27:39+13:00 - Fix font over-encoding of glyphs not actually present in particular core fonts, - Restore backwards compatibility to Rakudo 2011.12 0.6.8 2022-11-24T09:55:04+13:00 - Handle /ReversedChars tags in content stream. - Fix setting text-position, when only X is specified. 0.6.7 2022-08-03T08:36:45+12:00 - Added MiterLimit and BlendMode graphics variables 0.6.6 2022-07-26T16:44:19+12:00 - Fix page to-object() form construction 0.6.5 2022-07-03T07:54:38+12:00 - Protect a potential race in setting font encoding - Revert loading of tag dictionaries from 0.6.4 release 0.6.4 2022-06-09T09:35:37+12:00 - Convert ops to PDF 0.5.8+ :lite AST 0.6.3 2022-06-07T16:49:54+12:00 - Adjust tests for PDF 0.5.8. Use PDF::COS::Util from-ast() sub in PDF::Content::Ops for proper encapsulation 0.6.2 2022-05-26T15:12:29+12:00 - Fix PDF::Content::PageTree add-pages() method 0.6.1 2022-05-11T07:50:18+12:00 - Fix PDF::Class regression in 0.6.0 - Add Cache subclass to PDF::Font::CoreFont. Use it in PDFTiny test class for PDF level caching #15 0.6.0 2022-05-10T11:01:38+12:00 This release targets parallel thread-safe page construction - Bump dependents PDF and Font::AFM to thread-safe versions - Add PDF::Content::PageTree page-fragment() and pages-fragment() methods. These are individual pages or page-trees for concurrent composition. They can be built in parallel and in any order before being added sequentially using the add-page() method. - Make core-fonts and 'require' of classes thread safe. These seem to be the main internal areas of thread-safety contention 0.5.17 2022-03-25T08:53:53+13:00 - Add text box Str() method - Add final TextNewLine (T*) Op on text overflow. This sets the text position to the bottom of the rendered text. Also assists PDF::Tags::Reader to accurately detect new-lines. - Suppress actual-test collection in content marked as 'Artifact' - move module from CPAN to zef 0.5.16 2021-12-29T08:09:53+13:00 - Fix text-box overflow handling. 0.5.15 2021-12-20T12:38:25+13:00 - Fix PDF::Font::Loader regression in 0.5.14 release 0.5.14 2021-12-20T09:19:19+13:00 - Fixed duplication in ExtGState graphics resources. For example `$gfx.FillAlpha = 0.5; $gfx.FillAlpha = 0.5` was resulting in two separate resource entries. 0.5.13 2021-12-16T09:14:53+13:00 - Replaced $*ActualText with PDF::Content.actual-text() attribute - Treat trailing space as significant in print() method - Performance tweaks in PDF::Content and PDF::Content::ResourceDict 0.5.12 2021-12-11T08:23:28+13:00 - Add underline-position() and underline-thickness() methods. Unscaled in PDF::Content::FontObj and scaled in PDF::Content::Text::Box. Available also in PDF::Font::Loader::FontObj v0.5.16+. - Add iterate-pages() method 0.5.11 2021-12-03T12:10:07+13:00 - Renamed PDF::Content::Tag enumeration InlineElemTags::Code -> InlineElemTags::CODE; to avoid clashes with standard Raku classes. - Fixes to newly introduced text-box verbatim mode - Add missing tag enumeration :TableHead, renamed enumeration :TableFooter -> :TableFoot - Implement PDF::Context::Text::Box clone() method 0.5.10 2021-11-20T17:02:59+13:00 - Added PDF::Content:Text::Box option/attributes: -- indent: similar to CSS text-indent property; indents the first line. -- verbatim: similar to Latex /verbatim mode: disables kerning, breaks on newlines and preserves spaces - Fixes to PDF::Content::CoreFont load-font() method 0.5.9 2021-10-12T17:38:03+13:00 - Deprecate PDF::Content::Tags owner() in favour of canvas() 0.5.8 2021-10-08T14:36:22+13:00 - Deprecate canvas(&code) for drawing to an HTML::Canvas in favour of html-canvas(&code). - canvas() method now returns the PDF::Content::Canvas containing object, either a Page, XObject Form or Pattern. 0.5.7 2021-10-02T08:19:46+13:00 - Use PDF::Content v0.5.7+ PDF::Content::Canvas role for composing XObject Forms and Tiling Pattern classes 0.5.6 2021-09-14T09:24:28+12:00 - Fix PDF::Content do() positioning for XObject Forms - Changed PDF::Context::Text::Style handling of :$baseline option. Use font.ascender as top point, rather than font.bbox.y 0.5.5 2021-07-16T14:26:05+12:00 - Added block form of paint() method. $gfx.paint(&code, |c)) is equivalent to $gfx.Save; code(gfx); $gfx.paint(|c); $gfx.Restore; - make page bbox() method order from bottom left corner. So a page with /MediaBox [ 0 0 612 -792 ] is returned as [0, -792, 612, 0] 0.5.4 2021-07-07T11:28:02+12:00 PDF::Font::Loader v0.5.5+ compatibility: - Font decoding now has three stages decode($bytes, :cids), decode($bytes, :ords) and decode() [text-string, default]. - Font encoding has two stages encode($text, :cids), encode($text) [byte-string, default]. - type-check text-box() arguments. Make sure we've got a font dictionary or a font object 0.5.3 2021-07-02T13:37:20+12:00 - Add cid-map-glyph() callback for PDF::Font::Loader 0.5.2 2021-06-23T13:43:44+12:00 - Fix PDF::Content::Font cb-finish() method and invocation 0.5.1 2021-04-29T12:03:00+12:00 - Declare additional content tags: /OC /TagSuspect /ReversedChars /Clip - Pass through parameters in PDF::Content draw() method 0.5.0 2021-03-25T09:36:34+13:00 - Add PDF::Content::FontObj - interface role for font manipulation objects. - core-font() method now returns the font-object of type PDF::Content::FontObj, rather than font dictionary. This is for consistency with PDF::Font::Loader. This allows type-checking. Also, a font object is more likely to be useful to an end user. 0.4.13 2021-03-13T14:33:18+13:00 - Fix :WordSpacing option in text boxes #13 0.4.12 2021-03-11T11:35:37+13:00 - Fix use-font() method to simply check for uniqueness of the font dictionary. The former (deep) equivalence check is incompatible with PDF::Font::Loader 0.4.0+, which builds font dictionaries lazily. - Add a current-point() accessor; valid during path construction 0.4.11 2021-02-08T16:42:42+13:00 - Add matrix reflection method. Put its order to be applied after rotation and before skew. - Add requirement for Font::AFM version 1.24.4+. - Add tests for the new method. - Deprecate PDF::Content::Text::Block class in favor of PDF::Content::Text::Box and text-block() method in favour of text-block(). "Text blocks" already commonly refers to BeginText .. EndText regions in a content stream. Call them "text boxes" instead. 0.4.10 2021-01-21T14:04:44+13:00 - Fix paint() method use of ClosePath op - Fix nesting of text blocks in :trace output - Refactor Ops class. Remove track-graphics method. 0.4.9 2021-01-12T06:12:47+13:00 - Support IS0-32000 MacExpertEncoding (mac-extra). This is a supplement to MacRomanEncoding that includes various additional characters Release 0.4.8 - Fixed missing renaming of PDF::Writer to PDF::IO::Writer in test suite. Release 0.4.7 - Update to PDF 0.4.5. PDF::Writer has been renamed to PDF::IO::Writer to free up PDF::Writer for ecosystem usage. Release 0.4.6 - Allow unknown operations in 'BX' .. 'EX' extension blocks - Fix accidental error suppression in resource cb-finish() invocations - Added encode %.charset accessor; used for font subsetting - Fix array flattening issue in SetDashPattern. Release 0.4.5 - Fix for PDF::API6 #8 - truncation of large JPEG images - Renamed github project/Rep - Text blocks now preserve multi spaces by default. :squish option gives old behaviour - collapse multiple spaces to a single space; Thanks Tom Browder Release 0.4.4 - Remove PDF::Content::Tag::* sub-classes. Strip back to content related tags only. Functionality exported to PDF::Tags (under construction). - PDF::Content.print() method now aggregates printed text in $*ActualText if this variable is present in the lexpad. Utilized by the .mark() method in PDF::TAGS::Elem. Release 0.4.3 - withdrew implicit content tagging in .print() and .do() methods - replaced with new PDF::Content::Tag::Elem .mark() and .do() methods - add PDF::Content::Tag::Root - explicit struct tree root - remove FakeGfxParent role from test suite. Just use PDFTiny. - fixed building of Structured Parent Tree Release 0.4.2 - rename class PDF::Content::Tag::Marked -> PDF::Content::Tag::Mark - remove tag-name check on marked content tags. Anything is allowed (it's only struct elem nodes that need to be named correctly). - also remove BBox attribute from Marked content and rename tags to /Text and /Image respectively. Release 0.4.1 - .print() and .say() methods now always return block coordinates - .tag() returns the return value of the executed block - the .do() method now accepts a :position argument; compatible with .print() - text blocks now bind the TextRender and Font graphics settings. - allow color(r, g, b) instead of color([r, g, b]), etc Release 0.4.0 - Rename modules *.pm -> *.rakumod Release 0.3.2 - [PDF::Content::Graphics] - remove $.gfx(:render, ...) option - $.render() method now only renders once Release 0.3.1 - [PDF::Content] Add $.tag method. Deprecate $.marked-content() - [PDF::Content::Interface] new role for PDF implementations - [t/ops.t] fix text for PDF v0.3.8- (issue #3) Release 0.3.0 - [PDF::Content::Ops] Added graphics-state :delta option: -- rename :comment-ops option to :comment -- rename :debug option to :trace -- .graphics-state(:delta) returns variables updated since last Save('q') -- .gsave(:delta) returns an array that summarizes updated variables on the graphics stack. The final entry is the same as .graphics-state(:delta) -- improved !debug() method. Uses .graphics-state(:delta) and dumps JSON. -- Setting both :comment and :trace now causes tracing to be written as comments to PDF content streams - [PDF::Content::Text::{Block|Line|Style}] -- Defer font encoding until rendering -- Add comments displaying original text when $gfx :comment option is True Release 0.2.9 - Add $gfx(:debug) option - Fix handling of 'std' encoding in PDF::Content::Font::Enc::Glyphic Release 0.2.8 - Allow named page sizes: $page.media-box = 'Letter'; - Add type-checking/coercement to Type1 encoder differences array Release 0.2.7 - Added $page.bleed() method. Convenience method for getting or setting bleed as a gutter around the crop box. - Fix tests for Rakudo 2018.12+ blead Release 0.2.6 - $gfx.do() and $text-block.print() now return rectangles representing the display coordinates - Added method user-default-coords() to convert coordinates or rectangles from transformed user-space to default user-space. Release 0.2.5 - Streamline Save(q) and Restore(Q) methods in PDF::Content::Ops - Fixed Extended Graphics State Smoothness method. Renamed BlackGenerationFunction -> BlackGeneration and UnderColorRemovalFunction -> UnderColorRemoval Release 0.2.4 - Added PDF::Content::Tag and $.marked-content method for tag extraction - Added PDF::Content::Font::Enc::Glyphic role - Keep space characters when rendering text blocks. Conform with [PDF 32000 - 14.8.2.5: Identifying Word Breaks] Release 0.2.3 - open() method moved from PDF::Content::Image to PDF::Content::XObject - fix spelling of rendering intent 'RelativeColorimetric' Release 0.2.2 - Changed $.gfx method to not render by default - Added some structured exceptions to PDF::Content::Ops - Add $gfx.char-width, .char-height and .char-bbox attributes. - Track operators d0 (SetCharWidth) and d1 (SetCharWidthBBox) Release 0.2.1 - Tweak handling of BX .. EX compatibility blocks - Fix BDC op (BeginMarkedContentDict) to allow dict or name as second argument - Correct sequencing checks on 'sh' (ShFill) operator Release 0.2.0 - Adjust to PDF ver 0.2.8. PDF::DAO classes have been renamed to PDF::COS. Release 0.1.2 - Withdrew PDF::Content::Text::Reserved. - Fix PDF::Content::Image.data-uri encoding. Release 0.1.1 - $gfx.FillColor, $gfx.StrokeColor now register unknown colors in the graphics parent's resource dictionary. Release 0.1.0 - Changed structure of PDF::Content::XObject[Image] to match PDF::Content::Font. It now has a $.image-obj handler object, similar to the PDF::Content::Font $.font-obj attribute. - Fixed assignment to page boxes, e.g.: $page.art-box - Work-around PDF WordSpacing restrictions in multiple-byte encoded fonts (issue #2) - Add 'std' (StandardEncoding) encoding table Release 0.0.9 - PDF::Content::Font::Enc::Type1 - Optimised encoding to always handle subsets up to a maximum of 255 characters. Glyphs are mapped as they are encountered: -- firstly, as defined by the requested encoding scheme -- secondly to unmapped codes in the encoding scheme -- thirdly to mapped, but unused character encodings - PDF::Content::Graphics - fixed graphics update bug Release 0.0.8 - Replace PDF::Content::Util::Font module with class PDF::Content::Font::CoreFont Release 0.0.7 - Replaced $gfx.TextMove() with $gfx.text-position Release 0.0.6 - Initial release