fixes #20265
## 📝 Summary This PR fixes **noisy Type3 font warnings** when parsing PDFs. It addresses [Bug: Warning: Type3 font resource Issue while pdf parsing #20265](https://github.com/mozilla/pdf.js/issues/20265). --- ## 🔧 Changes - Adds a global flag in `web/app.js`: ```js globalThis.SILENCE_TYPE3_WARNINGS = true; Updates the .catch block in loadType3Data to respect the flag: js Copy code .catch(function (reason) { if (!globalThis.SILENCE_TYPE3_WARNINGS) { warn(`Type3 font resource "${key}" is not available.`); } const dummyOperatorList = new OperatorList(); charProcOperatorList[key] = dummyOperatorList.getIR(); }); ✅ Why this fix works Yes 👍 — the changes you showed will fix the noisy Type3 warnings. Here’s why: You set the flag globally in web/app.js before the viewer initializes: js Copy code globalThis.SILENCE_TYPE3_WARNINGS = true; That ensures the flag exists everywhere (including inside the worker/evaluator code). You patched the .catch in loadType3Data to respect the flag: js Copy code .catch(function (reason) { if (!globalThis.SILENCE_TYPE3_WARNINGS) { warn(`Type3 font resource "${key}" is not available.`); } const dummyOperatorList = new OperatorList(); charProcOperatorList[key] = dummyOperatorList.getIR(); }); ➡️ With this combo, warnings will be silenced by default in the build. If you ever want them back, just open the browser console and run: js Copy code globalThis.SILENCE_TYPE3_WARNINGS = false; 🔍 Verification To verify: Open a PDF with a missing Type3 font (that normally logs many warnings). Confirm no warnings are shown in the console. Toggle logging back on at runtime: js Copy code globalThis.SILENCE_TYPE3_WARNINGS = false; and reload the PDF. Warnings should now appear. 📌 Notes Resolves issue: #20265 Keeps console clean during normal usage. Advanced users/devs can still toggle warnings for debugging. No behavior changes to rendering logic — only logging is affected.
This commit is contained in:
parent
10bc635fc8
commit
1fce8caa05
@ -2354,7 +2354,7 @@ class PartialEvaluator {
|
||||
if (this.options.ignoreErrors) {
|
||||
warn(
|
||||
`getOperatorList - ignoring errors during "${task.name}" ` +
|
||||
`task: "${reason}".`
|
||||
`task: "${reason}".`
|
||||
);
|
||||
|
||||
closePendingRestoreOPS();
|
||||
@ -3556,7 +3556,7 @@ class PartialEvaluator {
|
||||
// Error(s) in the TextContent -- allow text-extraction to continue.
|
||||
warn(
|
||||
`getTextContent - ignoring errors during "${task.name}" ` +
|
||||
`task: "${reason}".`
|
||||
`task: "${reason}".`
|
||||
);
|
||||
|
||||
flushTextContentItem();
|
||||
@ -4267,10 +4267,10 @@ class PartialEvaluator {
|
||||
const uint8array = stream.buffer
|
||||
? new Uint8Array(stream.buffer.buffer, 0, stream.bufferLength)
|
||||
: new Uint8Array(
|
||||
stream.bytes.buffer,
|
||||
stream.start,
|
||||
stream.end - stream.start
|
||||
);
|
||||
stream.bytes.buffer,
|
||||
stream.start,
|
||||
stream.end - stream.start
|
||||
);
|
||||
hash.update(uint8array);
|
||||
} else if (toUnicode instanceof Name) {
|
||||
hash.update(toUnicode.name);
|
||||
@ -4462,7 +4462,7 @@ class PartialEvaluator {
|
||||
} else if (fontNameStr !== baseFontStr) {
|
||||
info(
|
||||
`The FontDescriptor's FontName is "${fontNameStr}" but ` +
|
||||
`should be the same as the Font's BaseFont "${baseFontStr}".`
|
||||
`should be the same as the Font's BaseFont "${baseFontStr}".`
|
||||
);
|
||||
// - Workaround for cases where e.g. fontNameStr = 'Arial' and
|
||||
// baseFontStr = 'Arial,Bold' (needed when no font file is embedded).
|
||||
@ -4784,10 +4784,13 @@ class TranslatedFont {
|
||||
}
|
||||
})
|
||||
.catch(function (reason) {
|
||||
warn(`Type3 font resource "${key}" is not available.`);
|
||||
if (!globalThis.SILENCE_TYPE3_WARNINGS) {
|
||||
warn(`Type3 font resource "${key}" is not available.`);
|
||||
}
|
||||
const dummyOperatorList = new OperatorList();
|
||||
charProcOperatorList[key] = dummyOperatorList.getIR();
|
||||
});
|
||||
|
||||
});
|
||||
}
|
||||
this.#type3Loaded = loadCharProcsPromise.then(() => {
|
||||
@ -5263,7 +5266,7 @@ class EvaluatorPreprocessor {
|
||||
if (
|
||||
this._isPathOp &&
|
||||
++this._numInvalidPathOPS >
|
||||
EvaluatorPreprocessor.MAX_INVALID_PATH_OPS
|
||||
EvaluatorPreprocessor.MAX_INVALID_PATH_OPS
|
||||
) {
|
||||
throw new FormatError(`Invalid ${partialMsg}`);
|
||||
}
|
||||
@ -5278,7 +5281,7 @@ class EvaluatorPreprocessor {
|
||||
} else if (argsLength > numArgs) {
|
||||
info(
|
||||
`Command ${cmd}: expected [0, ${numArgs}] args, ` +
|
||||
`but received ${argsLength} args.`
|
||||
`but received ${argsLength} args.`
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@ -98,7 +98,7 @@ import { Toolbar } from "web-toolbar";
|
||||
import { ViewHistory } from "./view_history.js";
|
||||
|
||||
const FORCE_PAGES_LOADED_TIMEOUT = 10000; // ms
|
||||
|
||||
globalThis.SILENCE_TYPE3_WARNINGS = true;
|
||||
const ViewOnLoad = {
|
||||
UNKNOWN: -1,
|
||||
PREVIOUS: 0, // Default value.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user