mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-25 09:38:06 +02:00
XFA -- Load fonts permanently from the pdf
- Different fonts can be used in xfa and some of them are embedded in the pdf. - Load all the fonts in window.document. Update src/core/document.js Co-authored-by: Jonas Jenwald <jonas.jenwald@gmail.com> Update src/core/worker.js Co-authored-by: Jonas Jenwald <jonas.jenwald@gmail.com>
This commit is contained in:
parent
6cf3070008
commit
7e9579045f
8 changed files with 318 additions and 21 deletions
|
@ -19,6 +19,7 @@ import {
|
|||
bytesToString,
|
||||
objectSize,
|
||||
stringToPDFString,
|
||||
warn,
|
||||
} from "../shared/util.js";
|
||||
import { Dict, isName, isRef, isStream, RefSet } from "./primitives.js";
|
||||
|
||||
|
@ -376,6 +377,70 @@ function encodeToXmlString(str) {
|
|||
return buffer.join("");
|
||||
}
|
||||
|
||||
function validateCSSFont(cssFontInfo) {
|
||||
// See https://developer.mozilla.org/en-US/docs/Web/CSS/font-style.
|
||||
const DEFAULT_CSS_FONT_OBLIQUE = "14";
|
||||
// See https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight.
|
||||
const DEFAULT_CSS_FONT_WEIGHT = "400";
|
||||
const CSS_FONT_WEIGHT_VALUES = new Set([
|
||||
"100",
|
||||
"200",
|
||||
"300",
|
||||
"400",
|
||||
"500",
|
||||
"600",
|
||||
"700",
|
||||
"800",
|
||||
"900",
|
||||
"1000",
|
||||
"normal",
|
||||
"bold",
|
||||
"bolder",
|
||||
"lighter",
|
||||
]);
|
||||
|
||||
const { fontFamily, fontWeight, italicAngle } = cssFontInfo;
|
||||
|
||||
// See https://developer.mozilla.org/en-US/docs/Web/CSS/string.
|
||||
if (/^".*"$/.test(fontFamily)) {
|
||||
if (/[^\\]"/.test(fontFamily.slice(1, fontFamily.length - 1))) {
|
||||
warn(`XFA - FontFamily contains some unescaped ": ${fontFamily}.`);
|
||||
return false;
|
||||
}
|
||||
} else if (/^'.*'$/.test(fontFamily)) {
|
||||
if (/[^\\]'/.test(fontFamily.slice(1, fontFamily.length - 1))) {
|
||||
warn(`XFA - FontFamily contains some unescaped ': ${fontFamily}.`);
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
// See https://developer.mozilla.org/en-US/docs/Web/CSS/custom-ident.
|
||||
for (const ident of fontFamily.split(/[ \t]+/)) {
|
||||
if (
|
||||
/^([0-9]|(-([0-9]|-)))/.test(ident) ||
|
||||
!/^[a-zA-Z0-9\-_\\]+$/.test(ident)
|
||||
) {
|
||||
warn(
|
||||
`XFA - FontFamily contains some invalid <custom-ident>: ${fontFamily}.`
|
||||
);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const weight = fontWeight ? fontWeight.toString() : "";
|
||||
cssFontInfo.fontWeight = CSS_FONT_WEIGHT_VALUES.has(weight)
|
||||
? weight
|
||||
: DEFAULT_CSS_FONT_WEIGHT;
|
||||
|
||||
const angle = parseFloat(italicAngle);
|
||||
cssFontInfo.italicAngle =
|
||||
isNaN(angle) || angle < -90 || angle > 90
|
||||
? DEFAULT_CSS_FONT_OBLIQUE
|
||||
: italicAngle.toString();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
export {
|
||||
collectActions,
|
||||
encodeToXmlString,
|
||||
|
@ -391,6 +456,7 @@ export {
|
|||
readUint16,
|
||||
readUint32,
|
||||
toRomanNumerals,
|
||||
validateCSSFont,
|
||||
XRefEntryException,
|
||||
XRefParseException,
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue