Release v2.9.0
- #529 by @bobsingor – Integrate cloudy border effect reading and writing in the PDFium engine. Annotations with
/BE /S /Cdictionaries now includecloudyBorderIntensityin their parsed objects, and creating/updating annotations writes the border effect dictionary viasetBorderEffect.
-
#514 by @bobsingor – Expose PDF annotation blend mode in base PDFium annotation properties.
PdfiumNativenow readsEPDFAnnot_GetBlendModeand includesblendModein the shared base annotation payload, so all annotation types parsed through the PDFium engine consistently receive their blend mode metadata.
- #529 by @bobsingor – Add
cloudyBorderIntensityproperty toPdfPolygonAnnoObjectfor cloudy border support on polygon annotations.
- #529 by @bobsingor – Add cloudy border AP generation in PDFium C++. New
cpdf_cloudy_border.cpp/.hgenerates scalloped border paths for Square, Circle, and Polygon annotations via the/BEborder effect dictionary. ExposesEPDFAnnot_SetBorderEffectandEPDFAnnot_ClearBorderEffectbindings.
-
#526 by @bobsingor – Fix
EPDF_GetPageSizeByIndexNormalizedreturning incorrect dimensions for PDFs with inherited MediaBox/CropBox.The function read
/MediaBoxand/CropBoxdirectly from the page dictionary viadict->GetRectFor(), which does not resolve PDF page tree attribute inheritance. Pages that inherit these attributes from a parent/Pagesnode would silently fall back to the default 612x792 (US Letter) size.Replaced the direct dictionary lookups with a
GetInheritedRecthelper that walks the/Parentchain, mirroring the inheritance logic used byCPDF_Page::GetPageAttr. The function remains lightweight (noCPDF_Pageconstruction) while correctly resolving inherited attributes.
- #529 by @bobsingor – Add cloudy border support for Circle, Square, and Polygon annotations across React, Vue, and Svelte renderers. Includes a framework-agnostic SVG path generator (
cloudy-border.ts), conditional rendering of scalloped<path>elements withstroke-linejoin: round, cloudy-aware hit areas, rectangle differences computation in handlers and patch functions, and polygon preview support.
-
#517 by @sebabal – Fix link annotation click not working in the Vue build.
The template expression
@pointerdown="hasIRT ? undefined : onClick"compiled to a function that returned theonClickreference instead of invoking it. Changed toonClick?.($event)so the handler is actually called on pointer down, restoring link selection and navigation. Thanks to @sebabal -
#530 by @bobsingor – Hide the group selection menu while group rotation is active. Previously the menu remained visible during rotation, which could overlap with rotation guide lines and the tooltip. This aligns the group selection box behavior with the single-annotation container, which already hides its menu during rotation.
-
#512 by @bobsingor – Add smart line recognition to the ink handler with horizontal/vertical axis snapping.
When
smartLineRecognitionis enabled on an ink tool, straight strokes drawn close to a horizontal or vertical axis are automatically snapped to a clean two-point line afterpointerUp. The snapped line is centred on the average position of all recorded points rather than being anchored to the start point. Diagonal straight strokes (outside the snap cone) are left untouched with their original points intact.New
InkBehaviorfields onAnnotationTool:snapAngleDeg— degrees from horizontal/vertical within which snapping is applied (default15). Strokes whose angle falls outside both snap zones are not reduced to two points.
- #529 by @bobsingor – Add cloudy border intensity options to the stroke style picker in the annotation sidebar for Circle, Square, and Polygon tools. Includes realistic semicircular arc SVG previews for intensity 1 and 2.
-
#512 by @bobsingor – Add
annotation:add-ink-highlightercommand and toolbar button for the ink highlighter tool.The command toggles the
inkHighlightertool, respects theModifyAnnotationspermission, and is registered under theannotationandannotation-inkcategories. The corresponding button is inserted into all relevant toolbar and mobile-menu slots next to the existing ink pen button.