java - 将线性化 PDF 从 servlet 流式传输到浏览器(快速 Web View )

标签 java pdf servlets streaming linearization

我正在运行一个提供 servlet 的网络应用程序。此 servlet 从网络文件系统打开一个 pdf 文件,最后将其流式传输到请求浏览器。

所有 pdf 文件都由 adobe lifecycle pdf 生成器线性化,并准备好进行快速网络查看。

不幸的是,快速 WebView 不起作用。我猜这是一个如何在java代码中打开和流式传输文件以及响应头信息设置的问题。 如果我在我的 webapp 中部署一个测试 pdf 到 jboss AS 并通过 url 直接从浏览器打开它,增量加载工作。

谁能帮帮我?

这是我的 servlet 的代码:

response.setContentType("application/pdf");
response.setHeader("Expires", "0");
response.setHeader("Cache-Control",
    "must-revalidate, post-check=0, pre-check=0");
response.setHeader("Content-Disposition",
    "inline;filename=" + documentReference);
response.setHeader("Accept-Ranges", "bytes");

File nfsPDF = new File(NFS_DIRECTORY_PATH + documentReference);

FileInputStream fis = new FileInputStream(nfsPDF);
BufferedInputStream bis = new BufferedInputStream(fis);
ServletOutputStream sos = response.getOutputStream();
byte[] buffer = new byte[(int) nfsPDF.length()];
while (true) {
   int bytesRead = bis.read(buffer, 0, buffer.length);
   if (bytesRead < 0) {
      break;
   }
   sos.write(buffer, 0, bytesRead);
}
sos.flush();
//... closing...

最佳答案

让我们看看。您想分段发送文件,对吗?然后您应该检查范围 header (HTTP header )并仅发送此范围内的字节。我是对的吗?

关于java - 将线性化 PDF 从 servlet 流式传输到浏览器(快速 Web View ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3724767/

相关文章:

java - While 循环对于偶数/奇数无法正常工作

java - 自定义列表数组适配器不可点击

python - 菲茨 (ModuleNotFoundError : No module named 'frontend' ) error in docker

jsp - 收集多个动态 HTML 输入的提交值并将其保存回 servlet

java - Spring MVC 将 URL 一对一映射到 .HTML,而不暴露路径

java - 如何将对象从 servlet 传递到调用 JSP

java - StringBuffer 还是同步方法?

java - 无法让 HTMLUnit 跟踪使用 __doPostBack() 函数的页面上的链接

python - 使用 PdfPages 添加文本 - matplotlib

pdf - 如何在 PDF 中设置填充 Alpha