javascript - 延迟加载:How to display multiple pdf documents as one with pdf.js?

标签 javascript java range pdf.js

我的目的是在惰性模式下使用pdf.js显示pdf,我有两个选择:

  1. 使用disableRange=false 在 Nginx 中使用 url 时效果很好,但是当我使用 java servlet url:/dowload/fileid/123 时,它不会通过 206 部分内容(范围请求)加载,而是通过 200 加载,然后在查看器中查看。<
class Scratch {
  public static void main(String[] args) {
    public void download (String identNo, HttpServletRequest request, HttpServletResponse response){
      File file = getFileFromServer(identNo);
      BufferedInputStream bis = null;
      OutputStream os = null;
      BufferedOutputStream bos = null;
      InputStream is = null;
      try {
        is = new FileInputStream(file);
        bis = new BufferedInputStream(is);
        os = response.getOutputStream();
        bos = new BufferedOutputStream(os);
        int startByte, endByte, totalByte;
        if (request != null && request.getHeader("range") != null) {
          String[] range = request.getHeader("range").replaceAll("[^0-9\\-]", "").split("-");
          totalByte = is.available();
          startByte = Integer.parseInt(range[0]);
          if (range.length > 1) {
            endByte = Integer.parseInt(range[1]);
          } else {
            endByte = totalByte - 1;
          }
          response.setStatus(206);
        } else {
          totalByte = is.available();
          startByte = 0;
          endByte = totalByte - 1;
          response.setHeader("Accept-Ranges", "bytes");
          response.setStatus(200);
        }
        int length = endByte - startByte + 1;
        response.setHeader("Accept-Ranges", "bytes");
        response.setHeader("Content-Range", "bytes " + startByte + "-" + endByte + "/" + totalByte);
        response.setContentType("Content-Type: application/octet-stream");
        response.setContentLength(length);
        bis.skip(startByte);
        int len = 0;
        byte[] buff = new byte[1024 * 64];
        while ((len = bis.read(buff, 0, buff.length)) != -1) {
          if (length <= len) {
            bos.write(buff, 0, length);
            break;
          } else {
            length -= len;
            bos.write(buff, 0, len);
          }
        }
      } catch (IOException e) {
      } finally {
        FileUtil.closeQuiet(bos);
        FileUtil.closeQuiet(os);
        FileUtil.closeQuiet(bis);
        FileUtil.closeQuiet(is);
      }

    }
  }
}
  • 在服务器端拆分大的pdf文件,然后使用pdf.js将多个pdf文档显示为一个
  • 我发现了这个:Is there a way to combine PDFs in pdf.js? 但它需要一次加载所有文件,我需要的是:当滚动到文件底部时,加载下一个文件,然后合并到当前pdf

    最佳答案

    1. PDF.js,设置参数: "disableAutoFetch": true, "disableStream": true
    2. 服务器支持接受范围,范围 然后 pdf.js 只获取页面中的数据,现在从服务器可见

    https://github.com/mozilla/pdf.js/issues/11933

    关于javascript - 延迟加载:How to display multiple pdf documents as one with pdf.js?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61401021/

    相关文章:

    javascript - 用 express 发回 CSV

    java - 记住 swing 中的窗口位置

    javascript - 用于提交的输入类型范围数组值和 ID

    java - SmartGwt:添加迄今为止的天数

    python - 如何指示 Pandas 数据框中特定列的四分位数?

    r - 获取数字范围内的数字列表

    javascript - AngularJS,使用 Ng-Repeat 和 Ng-Factory 显示 Json 数据

    javascript - 为什么 .attr() 对 $(this) 起作用,但对 every() 的参数不起作用?

    javascript - 在 Node module.exports 的对象方法中使用 'this'

    java - SimpleDateFormat 用当前日期解析时间字符串