Open
Description
let pdf = new jspdf.jsPDF();
let page_height = pdf.internal.pageSize.getHeight();
let page_width = pdf.internal.pageSize.getWidth();
let x_center = page_width / 2;
let y1 = page_height / 3;
let y2 = y1 + 12;
let y3 = y1 + 24;
let txt = "The quick brown fox jumps over the lazy dog.";
pdf.text(txt, x_center, y1, { align: 'center', charSpace: 0 });
pdf.text(txt, x_center, y2, { align: 'center', charSpace: -1 });
pdf.text(txt, x_center, y3, { align: 'center', charSpace: 1 });
pdf.save('charspace_bug.pdf');
Expectation: All lines are centered around x_center.
Result: Only the { charSpace: 0 } line is centered. Other lines are left-aligned to that line's left edge.
Hypothesis: jsPDF calculates the starting coordinate before the charSpace transformation is applied?
Activity
avelican commentedon Apr 7, 2022
Attempted to work around this manually with pdf.getStringUnitWidth(); and discovered that this function always returns the same value regardless of the charSpace given:
avelican commentedon Apr 7, 2022
Added a workaround to my print function:
Arrived at this through trial and error and with a little help from WolframAlpha's formula simplification feature :)
HackbrettXXX commentedon Apr 14, 2022
Thanks for the report. Could you prepare a pull request?
fix: charSpace not being taken into account in string width calculation