You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Print.js打印PDF文件报CORS错误无法打印,求解决方案

问题原因

该报错属于Chrome浏览器的安全策略限制,和代码逻辑、Print.js引入方式无关:

  • Print.js打印PDF时会先通过XMLHttpRequest请求加载PDF文件,再做后续打印处理。你是直接双击本地HTML文件,用file://协议打开页面,Chrome默认禁止file://协议下发起的跨域请求,哪怕PDF和HTML文件存放在同一本地目录也会触发拦截。
  • 打印JPG正常是因为图片资源可以通过img标签直接加载,不需要走XMLHttpRequest请求,因此不会触发CORS限制。
可行解决方案

方案1:使用本地HTTP服务器运行页面(最推荐)

不要直接双击打开HTML文件,在项目目录启动一个本地HTTP服务后通过http://协议访问页面即可解决问题,常用的启动方式:

  • 如果你安装了Node.js,在项目目录执行命令:npx serve,访问控制台输出的服务地址(默认http://localhost:3000)即可
  • 如果你安装了Python,Python3环境执行命令:python -m http.server 8000,Python2环境执行命令:python -m SimpleHTTPServer 8000,访问http://localhost:8000即可
  • 如果你用VS Code开发,安装Live Server插件后,右键HTML文件选择「Open with Live Server」会自动启动服务并打开页面

方案2:直接传入PDF的base64内容(适合需要本地直接打开文件的场景)

如果不能启动HTTP服务,可以提前将test.pdf转换为base64格式字符串,修改Print.js的调用参数即可跳过文件请求步骤:

function sample(){
  printJS({
    printable: "替换为你的test.pdf对应的base64字符串",
    type: "pdf",
    base64: true
  });
}

方案3:关闭Chrome安全限制(仅适合本地调试使用)

如果仅用于本地临时调试,可以给Chrome添加启动参数关闭跨域限制,不建议给普通用户使用该方案:
右键Chrome快捷方式,选择「属性」,在「目标」输入框的原有内容末尾添加如下参数,保存后双击该快捷方式打开浏览器再访问本地HTML即可:

--allow-file-access-from-files --disable-web-security --user-data-dir="C:/ChromeTempData"

注意user-data-dir后面的路径可以自定义一个本地空目录。

内容的提问来源于stack exchange,提问作者user10333164

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 09:36:06