【发布时间】:2018-03-15 09:42:13
【问题描述】:
我想使用客户端可用选项(javascript、HTML5 或其他)检查 PDF 的版本,因为我必须验证 PDF 版本必须为 1.3,如果 PDF 版本为 1.3,则仅将其上传到服务器.
我知道有多种服务器端选项可用于识别 pdf 版本,但我希望客户端可用选项,因此如果不是 1.3 版,用户无需再次重新上传整个文件
提前致谢。
【问题讨论】:
标签: javascript html pdf
我想使用客户端可用选项(javascript、HTML5 或其他)检查 PDF 的版本,因为我必须验证 PDF 版本必须为 1.3,如果 PDF 版本为 1.3,则仅将其上传到服务器.
我知道有多种服务器端选项可用于识别 pdf 版本,但我希望客户端可用选项,因此如果不是 1.3 版,用户无需再次重新上传整个文件
提前致谢。
【问题讨论】:
标签: javascript html pdf
您必须使用FileReader API。
首先创建一个 FileReader 并注册一个 onload 处理程序。
由于 PDF 的前几个字节应该是纯 ASCII,我们可以将它们作为文本读取,并且应该看起来像 %PDF-1.3(其中 1.3 是版本)所以如果我们得到字节 5 到 7(是的,我知道说file.slice(5, 8)我没有写规范;))。
应该相当直接地进入表单验证。 留给读者作为练习
警告
这是一个简单的示例,适用于 x.x 版本,但如果不进行修改,将无法正确读取 x.xx 版本。
const pdfUpload = document.getElementById('pdfUpload');
const pdfVersion = document.getElementById('pdfVersion');
// wait for input to be "changed"
pdfUpload.addEventListener('change', (e) => {
// grab the selected file
let [file] = e.target.files;
if (!file) return;
// use a FileReader
let reader = new FileReader();
reader.onload = (e) => {
// read the content
let versionString = e.target.result;
pdfVersion.innerText = versionString;
};
// PDF file should start something like '%PDF-1.3'
// grab only the bits we need
reader.readAsText(file.slice(5, 8));
})
<input type="file" id="pdfUpload" />
<div>PDF Version: <span id="pdfVersion"></span></div>
【讨论】:
readAsBinaryString 尚未“标准化”,实际上已于 2012 年 7 月弃用。readAsText 还允许您指定文本编码并假设 UTF-8除非另有说明。
readAsBinaryString 将只允许 ASCII 编码,这可能也足以满足您的需求,但仍不推荐使用。