## 📝 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:
Aditya kumar singh 2025-09-15 16:28:24 +05:30
parent 10bc635fc8
commit 1fce8caa05
2 changed files with 14 additions and 11 deletions

View File

@ -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.`
);
}

View File

@ -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.