pdf.js:来自servlet的PDF文件,需要一个变量

时间:2013-05-21 22:18:20

标签: java servlets pdf.js

我正在使用pdf.js来查看我的GWT应用程序中的PDF文件。我完全按照readme中描述的构建操作的产品实现了查看器。

当我使用带有静态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

如何在给定某个nodeRef的情况下实现java servlet和pdf.js能够查看PDF文件?(只有servlet知道如何将nodeRef转换为PDF,我需要PDF的路径保持隐藏状态

我一直在考虑api/getPdf/001,但不知道如何在tomcat服务器上捕获它,如果可能的话。

2 个答案:

答案 0 :(得分:2)

事实证明我在pdf.js内思考得太多了几个小时我一直在修补它,甚至这个问题本身也改变了十几次因为我不断找到新的线索。

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

  • 我不是以/getPdf?nodeRef=001访问我的servlet,而是访问/getPdf/001
  • 我的servlet映射现在是/getPdf/*

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

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

这省略了对url中基本GET参数的需求,至少以?a=1&b=2格式,并且可以将变量传递给使用{{1}返回PDF文件的servlet。 }。

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

答案 1 :(得分:1)

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

http://127.0.0.1:8888/api/getPdf?nodeRef=001将转为http%3A%2F%2F127.0.0.1%3A8888%2Fapi%2FgetPdf%3FnodeRef%3D001,pdf.js会将其正确处理为'file'参数值。

干杯!