【问题标题】:How to know the PDF Version using javascript + HTML5如何使用 javascript + HTML5 知道 PDF 版本
【发布时间】:2018-03-15 09:42:13
【问题描述】:

我想使用客户端可用选项(javascript、HTML5 或其他)检查 PDF 的版本,因为我必须验证 PDF 版本必须为 1.3,如果 PDF 版本为 1.3,则仅将其上传到服务器.

我知道有多种服务器端选项可用于识别 pdf 版本,但我希望客户端可用选项,因此如果不是 1.3 版,用户无需再次重新上传整个文件

提前致谢。

【问题讨论】:

    标签: javascript html pdf


    【解决方案1】:

    您必须使用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>

    【讨论】:

    • 谢谢.. 它有效.. 实际上经过研究我才知道阅读器 API 有另一种方法 readAsBinaryString 那么使用哪个更安全? readAsText 或 readAsBinaryString ?
    • @user2746557 根据 MDN 文章 readAsBinaryString 尚未“标准化”,实际上已于 2012 年 7 月弃用。readAsText 还允许您指定文本编码并假设 UTF-8除非另有说明。
    • @user2746557 进一步阅读w3.org readAsBinaryString 将只允许 ASCII 编码,这可能也足以满足您的需求,但仍不推荐使用。
    • @user2746557 如果它解决了您的问题,请考虑接受此答案
    猜你喜欢
    • 2011-05-15
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 2021-10-14
    相关资源
    最近更新 更多