vomebook commited on
Commit
2b30920
·
verified ·
1 Parent(s): 098dd06

Fix blank scanned PDF pages

Browse files
scripts/copy_reader_vendor.mjs CHANGED
@@ -1,7 +1,7 @@
1
  import { createHash } from "node:crypto";
2
  import { mkdirSync, writeFileSync } from "node:fs";
3
  import { get } from "node:https";
4
- import { join } from "node:path";
5
 
6
  const output = process.argv[2] || "static/vendor";
7
  mkdirSync(output, { recursive: true });
@@ -42,6 +42,11 @@ async function main() {
42
  for (const [url, target, expected] of [
43
  ["https://cdn.jsdelivr.net/npm/pdfjs-dist@6.2.108/build/pdf.min.mjs", "pdf.min.mjs", "e0be3863c23c8af2305b16548febd58e7f8874a460253317d7771cddbc1c0f6d"],
44
  ["https://cdn.jsdelivr.net/npm/pdfjs-dist@6.2.108/build/pdf.worker.min.mjs", "pdf.worker.min.mjs", "0613f41490dd6aaceed7a93fbbd38c85e6d6aa60474b6588c6e7709cfbe18cb3"],
 
 
 
 
 
45
  ["https://cdn.jsdelivr.net/npm/epubjs@0.3.93/dist/epub.min.js", "epub.min.js", "06eae15745107b4aa508c95538275251f69bfb9f1175621fc458d9f42ed082d4"],
46
  ["https://cdn.jsdelivr.net/npm/marked@18.0.10/lib/marked.umd.js", "marked.min.js", "eaccee2fb9fb3b2c09e873a5504da82507850d9e677bd720122ac49e2a03982a"],
47
  ["https://cdn.jsdelivr.net/npm/dompurify@3.4.14/dist/purify.min.js", "purify.min.js", "c2f26ea4fc0d88141c9aa430eb515ac86fce59418ceebd85fa475b87a8d6c3e6"],
@@ -51,9 +56,11 @@ for (const [url, target, expected] of [
51
  const bytes = await downloadWithRetry(url);
52
  const actual = createHash("sha256").update(bytes).digest("hex");
53
  if (actual !== expected) throw new Error(`${url}: SHA-256 ${actual} does not match ${expected}`);
 
54
  writeFileSync(join(output, target), bytes);
55
  const dot = target.lastIndexOf(".");
56
  const versioned = `${target.slice(0, dot)}.${actual.slice(0, 12)}${target.slice(dot)}`;
 
57
  writeFileSync(join(output, versioned), bytes);
58
  }
59
  }
 
1
  import { createHash } from "node:crypto";
2
  import { mkdirSync, writeFileSync } from "node:fs";
3
  import { get } from "node:https";
4
+ import { dirname, join } from "node:path";
5
 
6
  const output = process.argv[2] || "static/vendor";
7
  mkdirSync(output, { recursive: true });
 
42
  for (const [url, target, expected] of [
43
  ["https://cdn.jsdelivr.net/npm/pdfjs-dist@6.2.108/build/pdf.min.mjs", "pdf.min.mjs", "e0be3863c23c8af2305b16548febd58e7f8874a460253317d7771cddbc1c0f6d"],
44
  ["https://cdn.jsdelivr.net/npm/pdfjs-dist@6.2.108/build/pdf.worker.min.mjs", "pdf.worker.min.mjs", "0613f41490dd6aaceed7a93fbbd38c85e6d6aa60474b6588c6e7709cfbe18cb3"],
45
+ ["https://cdn.jsdelivr.net/npm/pdfjs-dist@6.2.108/wasm/jbig2.wasm", "wasm/jbig2.wasm", "e6bee67724a7b5436fe8162638e3708cfc8d52b6342db69a49715e30ff27cfdc"],
46
+ ["https://cdn.jsdelivr.net/npm/pdfjs-dist@6.2.108/wasm/jbig2_nowasm_fallback.js", "wasm/jbig2_nowasm_fallback.js", "04c795a6657a4553a64b781ea3e85256203d913c3b71b72b85fa3ce00622f458"],
47
+ ["https://cdn.jsdelivr.net/npm/pdfjs-dist@6.2.108/wasm/openjpeg.wasm", "wasm/openjpeg.wasm", "004a0e62db930ba9ff2a22212f4554d0bb57a0635a8287caf70f98117cee14ba"],
48
+ ["https://cdn.jsdelivr.net/npm/pdfjs-dist@6.2.108/wasm/openjpeg_nowasm_fallback.js", "wasm/openjpeg_nowasm_fallback.js", "0f998419819da4491d8302222aa9e2ff2494685641aa2a6c21c3760c29f3e319"],
49
+ ["https://cdn.jsdelivr.net/npm/pdfjs-dist@6.2.108/wasm/qcms_bg.wasm", "wasm/qcms_bg.wasm", "663d86126d5f5fcb1c61490f94353e2a8375660b8c5498ab3ebab5a34b08800e"],
50
  ["https://cdn.jsdelivr.net/npm/epubjs@0.3.93/dist/epub.min.js", "epub.min.js", "06eae15745107b4aa508c95538275251f69bfb9f1175621fc458d9f42ed082d4"],
51
  ["https://cdn.jsdelivr.net/npm/marked@18.0.10/lib/marked.umd.js", "marked.min.js", "eaccee2fb9fb3b2c09e873a5504da82507850d9e677bd720122ac49e2a03982a"],
52
  ["https://cdn.jsdelivr.net/npm/dompurify@3.4.14/dist/purify.min.js", "purify.min.js", "c2f26ea4fc0d88141c9aa430eb515ac86fce59418ceebd85fa475b87a8d6c3e6"],
 
56
  const bytes = await downloadWithRetry(url);
57
  const actual = createHash("sha256").update(bytes).digest("hex");
58
  if (actual !== expected) throw new Error(`${url}: SHA-256 ${actual} does not match ${expected}`);
59
+ mkdirSync(dirname(join(output, target)), { recursive: true });
60
  writeFileSync(join(output, target), bytes);
61
  const dot = target.lastIndexOf(".");
62
  const versioned = `${target.slice(0, dot)}.${actual.slice(0, 12)}${target.slice(dot)}`;
63
+ mkdirSync(dirname(join(output, versioned)), { recursive: true });
64
  writeFileSync(join(output, versioned), bytes);
65
  }
66
  }
static/reader.js CHANGED
@@ -1,5 +1,6 @@
1
  const PDFJS_URL = "/static/vendor/pdf.min.e0be3863c23c.mjs";
2
  const PDFJS_WORKER_URL = "/static/pdf-worker-wrapper.mjs";
 
3
  const EPUB_URL = "/static/vendor/epub.min.06eae1574510.js";
4
  const MARKED_URL = "/static/vendor/marked.min.eaccee2fb9fb.js";
5
  const PURIFY_URL = "/static/vendor/purify.min.c2f26ea4fc0d.js";
@@ -404,7 +405,7 @@ async function start() {
404
  } catch (error) { console.error(error); fail("原文件加载失败,请检查网络后重试,或下载原文件。"); }
405
  }
406
  function prepareDocument() {
407
- if (capability.mode === "pdf") return import(PDFJS_URL).then((pdfjs) => { pdfjs.GlobalWorkerOptions.workerSrc = PDFJS_WORKER_URL; return pdfjs.getDocument({ url: contentUrl, withCredentials: false }).promise.catch(() => pdfjs.getDocument({ url: sourceUrl, withCredentials: false }).promise); });
408
  if (capability.mode === "markdown") return Promise.all([fetch(contentUrl), Promise.all([loadScript(MARKED_URL), loadScript(PURIFY_URL)])]).then(([response, engines]) => ({ response, engines }));
409
  if (capability.mode === "text") return fetch(contentUrl).then((response) => ({ response }));
410
  if (capability.mode === "epub") return Promise.all([fetch(contentUrl), loadScript(JSZIP_URL).then(() => loadScript(EPUB_URL))]);
 
1
  const PDFJS_URL = "/static/vendor/pdf.min.e0be3863c23c.mjs";
2
  const PDFJS_WORKER_URL = "/static/pdf-worker-wrapper.mjs";
3
+ const PDFJS_WASM_URL = "/static/vendor/wasm/";
4
  const EPUB_URL = "/static/vendor/epub.min.06eae1574510.js";
5
  const MARKED_URL = "/static/vendor/marked.min.eaccee2fb9fb.js";
6
  const PURIFY_URL = "/static/vendor/purify.min.c2f26ea4fc0d.js";
 
405
  } catch (error) { console.error(error); fail("原文件加载失败,请检查网络后重试,或下载原文件。"); }
406
  }
407
  function prepareDocument() {
408
+ if (capability.mode === "pdf") return import(PDFJS_URL).then((pdfjs) => { pdfjs.GlobalWorkerOptions.workerSrc = PDFJS_WORKER_URL; const options = (url) => ({ url, wasmUrl: PDFJS_WASM_URL, withCredentials: false }); return pdfjs.getDocument(options(contentUrl)).promise.catch(() => pdfjs.getDocument(options(sourceUrl)).promise); });
409
  if (capability.mode === "markdown") return Promise.all([fetch(contentUrl), Promise.all([loadScript(MARKED_URL), loadScript(PURIFY_URL)])]).then(([response, engines]) => ({ response, engines }));
410
  if (capability.mode === "text") return fetch(contentUrl).then((response) => ({ response }));
411
  if (capability.mode === "epub") return Promise.all([fetch(contentUrl), loadScript(JSZIP_URL).then(() => loadScript(EPUB_URL))]);