使用PDFTron转换PDF到PDF/A-3时遇协议不支持NetworkError求助
问题原因与解决方案
原因
PDFNet.PDFACompliance.createFromUrl 方法是为加载网络协议地址(如 http://、https:// 开头的资源)设计的,你传入的 ./utils/test.pdf 是本地相对文件路径,不属于该方法支持的网络协议范畴,因此触发了「不支持的协议」错误。
解决方案
根据运行环境选择对应处理方式:
1. Node.js 环境
改用 createFromFile 方法加载本地文件,修改后的代码如下:
var input_url = './utils/'; var input_filename = 'test.pdf'; var output_filename = 'test_pdfa.pdf'; var convert = true; var pwd = ''; var exceptions; var max_ref_objs = 10; var file_path = input_url + input_filename; console.log('Converting input document: ' + input_filename); var pdfa = await PDFNet.PDFACompliance.createFromFile(true, file_path, '', PDFNet.PDFACompliance.Conformance.e_Level2B, exceptions, max_ref_objs); // 补充保存输出文件的逻辑 pdfa.saveAs(output_filename, false); pdfa.destroy();
2. 浏览器环境
浏览器无法直接通过相对路径访问本地文件,需通过用户上传获取 File 对象后,转为 ArrayBuffer 再用 createFromBuffer 方法处理:
// 假设通过页面上的文件选择框获取文件 const fileInput = document.getElementById('fileInput'); fileInput.addEventListener('change', async (e) => { const file = e.target.files[0]; const arrayBuffer = await file.arrayBuffer(); var output_filename = 'test_pdfa.pdf'; var convert = true; var pwd = ''; var exceptions; var max_ref_objs = 10; console.log('Converting input document: ' + file.name); var pdfa = await PDFNet.PDFACompliance.createFromBuffer(true, arrayBuffer, '', PDFNet.PDFACompliance.Conformance.e_Level2B, exceptions, max_ref_objs); // 生成并下载转换后的文件 const outputBuffer = await pdfa.saveMemoryBuffer(false); const blob = new Blob([outputBuffer], { type: 'application/pdf' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = output_filename; a.click(); URL.revokeObjectURL(url); pdfa.destroy(); });
内容的提问来源于stack exchange,提问作者OrYo
相关产品推荐
相关产品推荐

