在PDF Java Web中获取当前页面
我需要从我的web应用程序中读取当前页码。我有:在PDF Java Web中获取当前页面,java,javascript,pdf,Java,Javascript,Pdf,我需要从我的web应用程序中读取当前页码。我有: <iframe id="myPdf" src="C:\test.pdf#page=5" style="width: 650px; height: 550px;" /> 在第5页打开PDF,用户可以导航到另一页。然后,当用户单击按钮/链接时,我需要以PDF格式获取页面的当前索引 我的用户使用AcrobatReader,我不能使用非Adobe的插件。我可以使用Javascript/Java代码 谢谢 Tami我发现我可以使用iTe
<iframe id="myPdf" src="C:\test.pdf#page=5" style="width: 650px; height: 550px;" />
在第5页打开PDF,用户可以导航到另一页。然后,当用户单击按钮/链接时,我需要以PDF格式获取页面的当前索引
我的用户使用AcrobatReader,我不能使用非Adobe的插件。我可以使用Javascript/Java代码
谢谢
Tami我发现我可以使用iText(自由软件)将JavaScript注入pdf文件, PDF中的JS向html中的容器发送消息。 消息包含当前页面,每次页面更改时都会将其传递给容器 我使用pdfobject.js pdfobject.min.js创建捕获消息的PDFJS对象 将JS注入PDF的Java代码:
public String mAddJS()
{
InputStream vbReaderFile = null;
try
{
vbReaderFile = new FileInputStream("C:\\test.pdf");
PdfReader myReader = new PdfReader( vbReaderFile ); // throws IOException
PdfStamper myStamper = new PdfStamper( myReader, new FileOutputStream("C:\\outTest.pdf") ); // throws IOE, DocumentException
// add a page-open script, 1 is the first page, not zero0
PdfAction jsAction = PdfAction.javaScript ("app.alert('Think again next time!');", myStamper.getWriter());
int pageNum = myReader.getNumberOfPages();
for(int i=1 ; i<pageNum ; i++ )
{
jsAction = PdfAction.javaScript (
"this.disclosed=true;" +
"if(this.hostContainer){" +
"var names = new Array();names[0]=" + i + ";" +
"try{this.hostContainer.postMessage(names);}" +
"catch(e){app.alert(e.message); }"+
"}", myStamper.getWriter());
myStamper.setPageAction( PdfWriter.PAGE_OPEN, jsAction, i);
}
myStamper.close(); // write everything out, throws DocumentException, IOE
vPath = "C:\\outTest.pdf";
// JavascriptContext.addJavascriptCall(FacesContext.getCurrentInstance(), "mChangePDF('C:\\outTest.pdf');");
}
catch (Exception e) {
e.printStackTrace();
}
return null;
}
})
函数createMessageHandler(){
var PDFObject=document.getElementById(“myPDFObj”);
if(PDFObject==null)
警报(“e1”);
PDFObject.messageHandler={
onMessage:function(msg){
//警报(“应用程序”);
警报(消息[0]);
},
onError:function(error,msg){
警报('error.message');
}
}
}
谢谢!好主意,到目前为止,它在IE浏览器和FF浏览器中对我非常有效。我也尝试让它在FF和chrome浏览器中工作,就像这里最后一条评论所建议的那样,如果我记得IE以不同的方式读取pdf文件,则不会成功。因此IE在adobeReader插件中的JS函数是不同的。
<h:body >
<ice:form id="myForm">
<object id="myPDFObj" type="application/pdf" data="test.pdf#page=3"
height="550px" width="650px"></object>
<br/><ice:commandButton onclick="test();" value="test" ></ice:commandButton>
<ice:commandButton action="#{pDFTest.mAddJS}" value="JAVA" partialSubmit="false"></ice:commandButton>
<div id="myDivPdf">
</div>
</ice:form>
</h:body>
<script type="text/javascript">
var PDF1;
var PDF2;
window.onload = function(evt)
{
createPDF();
createMessageHandler();
}
PDF1 = new PDFObject({
url: "test.pdf#page=3",
id: "myPDFObj",
width: "500px",
height: "300px"
});
PDF2 = PDF1.embed("myForm:myDivPdf");
function createMessageHandler() {
var PDFObject = document.getElementById("myPDFObj");
if(PDFObject==null)
alert('e1');
PDFObject.messageHandler = {
onMessage: function(msg) {
// alert('app');
alert( msg[0]);
},
onError: function(error, msg) {
alert('error.message');
}
}
}
</script>