我正在使用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服务器上捕获它,如果可能的话。
答案 0 :(得分:2)
事实证明我在pdf.js
内思考得太多了几个小时我一直在修补它,甚至这个问题本身也改变了十几次因为我不断找到新的线索。
但是,我现在找到了一个简单的解决方案。
/getPdf?nodeRef=001
访问我的servlet,而是访问/getPdf/001
/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'参数值。
干杯!