I have this pdf file to extract data from, but the problem is when I'm running this piece of code as a simple java program, it works like a charm but when I tried this code on JSP servlet it gave out this exception and I'm not being able to figure out what this exception is for? And I'm using iText API to extract texts from PDFs.

My code snippet:

<%
                String Source = "Resource/text.pdf";

                PdfReader reader;
                try {
                    //java.net.URL SourcePDF = getClass().getResource("RawMaterial/text.pdf");
                    reader = new PdfReader(Source);

                    PdfReaderContentParser parser = new PdfReaderContentParser(reader);

                    TextExtractionStrategy strategy = null;

                    for (int i = 1; i <= reader.getNumberOfPages(); i++) 
                    {
                        strategy = parser.processContent(i,new SimpleTextExtractionStrategy());
                        System.out.println(strategy.getResultantText());
                    }
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            %>

The exception is:

java.io.IOException: Resource/text.pdf not found as file or resource.
    at com.itextpdf.text.io.RandomAccessSourceFactory.createByReadingToMemory(RandomAccessSourceFactory.java:263)
    at com.itextpdf.text.io.RandomAccessSourceFactory.createBestSource(RandomAccessSourceFactory.java:173)
    at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:219)
    at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:207)
    at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:197)
    at org.apache.jsp.test_jsp._jspService(test_jsp.java:120)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Unknown Source)
2

There are 2 answers

0
Teddy Payne On BEST ANSWER

Finally, the problem is solved, I just added this one line of code in the beginning, before specifying the path -

<% 
    String relativePath = getServletContext().getRealPath("/");
    String Source = relativePath +"Resource/text.pdf";
    ...
    ...
%>
0
Sheetal Mohan Sharma On

Your file is not found as it may have been place in different location when packages as war/jar or whatever you choose. Check your war file you may fint it under /classes/some/package. So in this case read it as a resource with relative path.

Use classloader ...

ClassLoader.getResourceAsStream ("your/pkg/Resource/text.pdf");

or you can get it as url

URL url = getClass().getClassLoader().getResource("your/pkg/Resource/text.pdf");