From 1d7221d9113a5b32f7338f53a5fdacc59982e98e Mon Sep 17 00:00:00 2001 From: Lukas Hollaender Date: Mon, 10 Aug 2020 14:28:40 +0200 Subject: [PATCH] fix usage of custom fonts in context2d --- src/modules/context2d.js | 18 ++++++++++-------- test/reference/context2d-custom-fonts.pdf | Bin 0 -> 45491 bytes test/specs/context2d.spec.js | 19 +++++++++++++++++++ 3 files changed, 29 insertions(+), 8 deletions(-) create mode 100644 test/reference/context2d-custom-fonts.pdf diff --git a/src/modules/context2d.js b/src/modules/context2d.js index 2086b6be0..6bd5094e9 100644 --- a/src/modules/context2d.js +++ b/src/modules/context2d.js @@ -423,11 +423,15 @@ import { console } from "../libs/console.js"; var fontSizeUnit = rxFontSize.exec(fontSize)[2]; if ("px" === fontSizeUnit) { - fontSize = Math.floor(parseFloat(fontSize) * this.pdf.internal.scaleFactor); + fontSize = Math.floor( + parseFloat(fontSize) * this.pdf.internal.scaleFactor + ); } else if ("em" === fontSizeUnit) { fontSize = Math.floor(parseFloat(fontSize) * this.pdf.getFontSize()); } else { - fontSize = Math.floor(parseFloat(fontSize) * this.pdf.internal.scaleFactor); + fontSize = Math.floor( + parseFloat(fontSize) * this.pdf.internal.scaleFactor + ); } this.pdf.setFontSize(fontSize); @@ -450,21 +454,19 @@ import { console } from "../libs/console.js"; } var jsPdfFontName = ""; - var parts = fontFamily - .toLowerCase() - .replace(/"|'/g, "") - .split(/\s*,\s*/); + var parts = fontFamily.replace(/"|'/g, "").split(/\s*,\s*/); var fallbackFonts = { arial: "Helvetica", + Arial: "Helvetica", verdana: "Helvetica", + Verdana: "Helvetica", helvetica: "Helvetica", + Helvetica: "Helvetica", "sans-serif": "Helvetica", fixed: "Courier", monospace: "Courier", terminal: "Courier", - courier: "Courier", - times: "Times", cursive: "Times", fantasy: "Times", serif: "Times" diff --git a/test/reference/context2d-custom-fonts.pdf b/test/reference/context2d-custom-fonts.pdf new file mode 100644 index 0000000000000000000000000000000000000000..229f5adfbacfbe36a02dd715dbba7f2d5b09f4c0 GIT binary patch literal 45491 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 literal 0 HcmV?d00001 diff --git a/test/specs/context2d.spec.js b/test/specs/context2d.spec.js index 3b4044916..8d7472553 100644 --- a/test/specs/context2d.spec.js +++ b/test/specs/context2d.spec.js @@ -146,6 +146,25 @@ describe("Context2D: standard tests", () => { comparePdf(doc.output(), "fonts.pdf", "context2d"); }); + it("context2d: custom fonts", () => { + var PTSans = loadBinaryResource("reference/PTSans.ttf"); + + var doc = new jsPDF({ + orientation: "p", + unit: "pt", + format: "a4", + floatPrecision: 2 + }); + doc.addFileToVFS("PTSans.ttf", PTSans); + doc.addFont("PTSans.ttf", "PTSans", "normal"); + + var ctx = doc.context2d; + ctx.font = "normal 16pt PTSans"; + ctx.fillText("А ну чики брики и в дамки!", 20, 20); + + comparePdf(doc.output(), "context2d-custom-fonts.pdf", "context2d"); + }); + it("context2d: css color names", () => { var doc = new jsPDF({ orientation: "p",