Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Using pdfkit #1

Open
techtonik opened this issue May 1, 2017 · 7 comments
Open

Using pdfkit #1

techtonik opened this issue May 1, 2017 · 7 comments

Comments

@techtonik
Copy link

techtonik commented May 1, 2017

Maybe this will help to get width in different fonts. https://github.com/badges/shields/blob/105e383d93a4a333c2a7ee8038a492c8071f14a5/lib/measure-text.js

UPDATE (20180901): Update link to measure-text.js with archived copy. The code was replaced in badges/shields@cc9a6db853be

@adambisek
Copy link
Owner

@techtonik Thanks, this looks good, but I am not sure, how about rendering speed. Do you have any experience with speed? It looks like pdfkit is using its own rendering, that could be fast (faster than rendering into headless browser).

@techtonik
Copy link
Author

No, I haven't measured performance. Was looking for alternative library without PDF in its name.

@aquelehugo
Copy link

You can use the library PDFKit uses internally: https://github.com/foliojs/fontkit

Code for measuring string width would be as follows:

var fontkit = require('fontkit');

var font = fontkit.openSync('/path/to/font.ttf');

function getStringWidth(str, useKerning) {
    if (useKerning) {
        return font.layout(text).positions.reduce((widthSum, glyphPosition) => widthSum + glyphPosition.xAdvance, 0);
    }
    return font.glyphsForString(str).reduce((widthSum, glyph) => widthSum + glyph.advanceWidth, 0));
}

@adambisek
Copy link
Owner

adambisek commented Aug 24, 2018

Thanks for your advice. Will look at this.
But, one of the prerequisities when this package has been developed was speed. I am not sure that manipulating with PDF would be fast enough.

@aquelehugo
Copy link

It doesn't use PDF, it is the library for font loading only. I don't know how you would get the glyphs width in pixels exactly though, maybe you can get it from the pdfkit's implementation.
fontkit only provides width for glyphs in their original scale. That's enough for me because I just need the proportions.
Of course it will not be faster than your method which just access arrays, but there's a point you missed: kerning. Width for 'Vo' is not the same as the sum for 'V' and 'o' separately, for instance. The 'o' is rendered closer to the 'V' to improve readability.

@adambisek
Copy link
Owner

Wow, sounds very promising!
Will dive into when I have a little bit time!

@techtonik
Copy link
Author

Make sure to checkout badges/shields#1379 for performance discussion.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants