* fix: use dynamic count for beginbfrange declaration
Fixes garbled text copying in Chrome/Edge for PDFs with >256 unique characters
* Add changelog line
Addressed an issue with garbled text copying in Chrome/Edge for PDFs containing more than 256 unique characters.
* test: add tests for beginbfrange count declaration
Add test cases to verify that the beginbfrange count declaration
in ToUnicode CMap matches the actual number of bfrange entries.
- Test for fonts with >256 characters (multiple ranges)
- Test for fonts with <=256 characters (single range)
These tests ensure the fix for the beginbfrange count bug is
correct and prevent regression.
Related to #1659
* Revert "test: add tests for beginbfrange count declaration"
This reverts commit dda6f4a762acbaa09f5986502c494c97959c7643.
* Rewrite tests for beginbfrange count declaraton. Fix code style issue.
* fix(tests): remove unused variables in font.spec.js
Replace for loops with unused match variables with spread operator
to directly get array length, fixing ESLint no-unused-vars errors.
- Replace loop counting with [...rangeMatches].length
- Fixes ESLint errors at lines 152 and 197 in tests/unit/font.spec.js
- All tests pass successfully
---------
Co-authored-by: zhang_xiaoning <zxn@winning.com.cn>
* pdf/a1b support initial commit
Added mixin for support pdf/a1b and a few of the things it requires (xmp metadata, colour profile). Currently, the CIDSet stream is the only error it comes back with the test case I'm using, will try sorting it out next.
* Adding CIDSet when generating PDF/A
PDF/A1 b/a requires a CIDSet. This is not checked by a validator and other converters seem to add a CIDSet with a value of FF FF FF FF 0C, so this commit does the same. When extending support for PDF/A 2/3/4, we may not add a CIDSet (I think for PDF/A3 it's not required?) or we will look for a proper way to generate the CIDSet.
At this point, PDFKit should be able to generate PDF/A1b which can pass veraPDF validation and PDF/A1a if tagged is enabled.
All you have to do is set pdfa: '1a' or pdfa: '1b' in the options passed to new PDFDocument.
* pdf/a intro docs
* generalising subsets, reimplementing pdfa1 and added control over metadata
added a generalised subsets mixin which can pull in a subset at runtime.
reimplemented pdfa1 mixin as some features should be standardised across all subsets, such as storing /Info as xmp metadata for pdf >1.3
added a metadata class and mixing to control and write the metadata to a pdf
* added tests for pdfa1 and metadata and moved joinTokens in helpers
Addeds tests for pdfa1 subset and metadata.
Moved joinTokens into helpers.js as it's now used in at least two places.
Added tests for document to when metadata should be added (pdf version 1.4 or newer) and when it shouldn't (pdf version 1.3)
* updated pdf/a docs to reflect latest changes
* store color profile as icc file
* Updated changelog to include PDF/A support in Unreleased section
Caches the results of fontkit layout calls, which can be expensive depending on the opentype features in the font. Splits up text by words and shapes each individually to increase cache efficiency.
The data offset must be saved before parsing one entry and restored
thereafter. Otherwise only the first table is parsed properly, and garbage
is returned for the rest. Fails on i.e. georgiai.ttf.
When reading the glyphIds, divide count by 2 (we read 16-bit words).