0

我正在使用pdf.js在我的 GWT 应用程序中查看 PDF 文件。我已经将查看器完全实现为自述文件中描述的构建操作的产品。

当我将查看器与静态 pdf 一起使用时,效果很好。但是,当我提供指向提供 pdf 的 servlet 的链接时,不会加载 pdf 查看器。

工作正常

http://127.0.0.1:8888/pdfjs/web/viewer.html?file=http://127.0.0.1:8888/staticpdf.pdf

不工作

http://127.0.0.1:8888/pdfjs/web/viewer.html?file=http://127.0.0.1:8888/api/getPdf?nodeRef=001

http://127.0.0.1:8888/api/getPdf?nodeRef=001产生一个pdf文件。servlet 一直有效。

这不起作用,因为pdf.js#getDocument继续进行不带参数的 GET 调用,而 servlet 需要 nodeRef:

GET http://127.0.0.1:8888/api/getPdf?nodeRef
HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Length: 0

我将如何实现 java servlet 并pdf.js能够查看给定 nodeRef 的 PDF 文件?(只有 servlet 知道如何将 nodeRef 转换为 PDF,我需要 PDF 的路径保持隐藏)

我一直在思考api/getPdf/001,但不知道如何在 tomcat 服务器上捕获它,以及是否可能。

4

2 回答 2

2

事实证明,我已经想了太多,pdf.js我一直在修补它几个小时,甚至这个问题本身也改变了十几次,因为我一直在寻找新的线索。

但是,我现在找到了一个简单的解决方案。

  • 我没有访问我的 servlet as /getPdf?nodeRef=001,而是访问它/getPdf/001
  • 我的 servlet 映射现在是/getPdf/*

servlet 在 doGet 中包含以下新代码:

String nodeRef = request.getPathInfo().substring(1);

这省略了GETurl 中基本参数的需要,至少在 format?a=1&b=2中,并且可以很好地将变量传递给使用pdf.js.

编辑:我已经编辑了我的问题标题以反映情况,以便那些偶然发现这个问题的人也可以在这里找到他们的答案。

于 2013-05-21T22:43:40.960 回答
1

如果您不想更改服务器映射,则应该对 URL 进行编码(例如,使用 encodeURIComponent):

http://127.0.0.1:8888/api/getPdf?nodeRef=001将变成http%3A%2F%2F127.0.0.1%3A8888%2Fapi%2FgetPdf%3FnodeRef%3D001pdf.js 将其作为“文件”参数值正确处理。

干杯!

于 2013-11-07T08:45:54.527 回答