我的目的是在惰性模式下使用pdf.js显示pdf,我有两个选择:
- 使用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
最佳答案
- PDF.js,设置参数: "disableAutoFetch": true, "disableStream": true
- 服务器支持接受范围,范围 然后 pdf.js 只获取页面中的数据,现在从服务器可见
关于javascript - 延迟加载:How to display multiple pdf documents as one with pdf.js?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61401021/