I have written a simple program which reads from a pdf file, code is as shown below, I am uploading two pdf files which read the pdf and returns the data in string format, the problem is first pdf file is being read perfectly and when i try to read the same pdf again results in following error :
//Fetch media from media1
InputStream is;
is = media1.getStreamData();
PdfReaderUtility pru = new PdfReaderUtility();
String s1 = pru.readPdfFile(is);
tb1.setText(s1);
//Fetch media from media2
InputStream ins;
ins = media2.getStreamData();
PdfReaderUtility pru2 = new PdfReaderUtility();
pru2.readPdfFile(ins);
String s2 = pru.readPdfFile(ins);
tb2.setText(s2);
ERROR ::
12:31:18,763 SEVERE [org.zkoss] (http-localhost-127.0.0.1-8080-5) >>org.zkoss.zk.ui.UiException: com.lowagie.text.exceptions.InvalidPdfException: PDF header signature not found.
>>com.lowagie.text.exceptions.InvalidPdfException: PDF header signature not found.
>> at com.lowagie.text.pdf.PRTokeniser.checkPdfHeader(PRTokeniser.java:204)
>> at com.lowagie.text.pdf.PdfReader.readPdf(PdfReader.java:492)
>> at com.lowagie.text.pdf.PdfReader.<init>(PdfReader.java:233)
>> at com.lowagie.text.pdf.PdfReader.<init>(PdfReader.java:243)
>> at com.abc.utility.PdfReaderUtility.readPdfFile(PdfReaderUtility.java:15)
>> at com.abc.controller.ComparisonFormController.onClick$submitButton(ComparisonFormController.java:99)
>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>> at java.lang.reflect.Method.invoke(Method.java:606)
>> at org.zkoss.zk.ui.event.GenericEventListener.onEvent(GenericEventListener.java:82)
>> at org.zkoss.zk.ui.AbstractComponent.onEvent(AbstractComponent.java:2742)
>> at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:2713)
>> at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:2654)
>> at org.zkoss.zk.ui.impl.EventProcessor.process(EventProcessor.java:136)
>> at org.zkoss.zk.ui.impl.EventProcessingThreadImpl.process0(EventProcessingThreadImpl.java:534)
>> at org.zkoss.zk.ui.impl.EventProcessingThreadImpl.sendEvent(EventProcessingThreadImpl.java:126)
>> at org.zkoss.zk.ui.event.Events.sendEvent(Events.java:338)
>> at org.zkoss.zk.ui.event.Events.sendEvent(Events.java:348)
>> at org.zkoss.zk.ui.AbstractComponent$ForwardListener.onEvent(AbstractComponent.java:3180)
>> at org.zkoss.zk.ui.AbstractComponent.onEvent(AbstractComponent.java:2742)
>> at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:2713)
>> at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:2654)
>> at org.zkoss.zk.ui.impl.EventProcessor.process(EventProcessor.java:136)
>> at org.zkoss.zk.ui.impl.EventProcessingThreadImpl.process0(EventProcessingThreadImpl.java:534)
>> at org.zkoss.zk.ui.impl.EventProcessingThreadImpl.run(EventProcessingThreadImpl.java:461)
Any tip would be nice.
This is my PdfReaderUtility
public String readPdfFile(InputStream is) throws IOException {
// loads the pdf file.
PdfReader pr = new PdfReader(is);
// Used for the reading purpose
PdfTextExtractor pte = new PdfTextExtractor(pr);
int noOfPages = pr.getNumberOfPages();
String wholeText="";
String page="";
for(int i = 1 ; i <= noOfPages;i++) {
page = pte.getTextFromPage(i);
wholeText+=page;
}
wholeText.trim();
return wholeText;
}
Thank you.
In the second snippet of code your using pru
instead of pru2
.
String s2 = pru.readPdfFile(ins);
should be:
String s2 = pru2.readPdfFile(ins);
Full Source
//Fetch media from media1
InputStream is;
is = media1.getStreamData();
PdfReaderUtility pru = new PdfReaderUtility();
String s1 = pru.readPdfFile(is);
tb1.setText(s1);
//Fetch media from media2
InputStream ins;
ins = media2.getStreamData();
PdfReaderUtility pru2 = new PdfReaderUtility();
pru2.readPdfFile(ins);
String s2 = pru2.readPdfFile(ins); //replaced pru with pru2
tb2.setText(s2);
For the second file you use the input stream twice, and in the second use it must fail:
ins = media2.getStreamData();
PdfReaderUtility pru2 = new PdfReaderUtility();
pru2.readPdfFile(ins);
String s2 = pru.readPdfFile(ins);
Look at the last two lines.
I guess that is a copy&paste mistake anyway, those two lines should have been one:
ins = media2.getStreamData();
PdfReaderUtility pru2 = new PdfReaderUtility();
String s2 = pru2.readPdfFile(ins);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.