0

I have successfully displayed Pdf from Assets folder using Android Pdf Viewer library https://github.com/jblough/Android-Pdf-Viewer-Library. I am now trying to parse and display online pdf "http://www.gnostice.com/downloads/Gnostice_PathQuest.pdf" but it is giving the following error:

<code>
04-19 03:17:04.995: W/System.err(27806): java.io.IOException: This may not be a PDF File
04-19 03:17:04.995: W/System.err(27806):    at com.sun.pdfview.PDFFile.parseFile(PDFFile.java:1395)
04-19 03:17:04.995: W/System.err(27806):    at com.sun.pdfview.PDFFile.<init>(PDFFile.java:140)
04-19 03:17:04.995: W/System.err(27806):    at com.sun.pdfview.PDFFile.<init>(PDFFile.java:116)
04-19 03:17:04.995: W/System.err(27806):    at net.sf.andpdf.pdfviewer.PdfViewerActivity.openFile(PdfViewerActivity.java:909)
04-19 03:17:04.995: W/System.err(27806):    at net.sf.andpdf.pdfviewer.PdfViewerActivity$8.run(PdfViewerActivity.java:863)
04-19 03:17:04.995: W/System.err(27806):    at java.lang.Thread.run(Thread.java:1027)

</code>

I am opening URL Connection connection as :

<code>
fileUrl = new URL(filename);
                    HttpURLConnection connection = (HttpURLConnection)fileUrl.openConnection();
                    connection.connect(); 
                    InputStream is = connection.getInputStream();                   
                    byte[] bytes = new byte[is.available()];
                    is.read(bytes);
                    System.out.println("Byte Lenght: " + bytes.length);
                    ByteBuffer bb = ByteBuffer.NEW(bytes);
                    is.close();
                    openFile(bb, password);
</code>

Please help what can be the issue?

Thanks

Mustansar Saeed
  • 2,730
  • 2
  • 22
  • 46

1 Answers1

0

The way you read the stream is not correct. You can use these utility classes (taken from DavidWebb):

/**
 * Read an <code>InputStream</code> into <code>byte[]</code> until EOF.
 * <br/>
 * Does not close the InputStream!
 *
 * @param is the stream to read the bytes from
 * @return all read bytes as an array
 * @throws IOException
 */
public static byte[] readBytes(InputStream is) throws IOException {
    if (is == null) {
        return null;
    }
    byte[] responseBody;
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    copyStream(is, baos);
    baos.close();
    responseBody = baos.toByteArray();
    return responseBody;
}

/**
 * Copy complete content of <code>InputStream</code> to <code>OutputStream</code> until EOF.
 * <br/>
 * Does not close the InputStream nor OutputStream!
 *
 * @param input the stream to read the bytes from
 * @param output the stream to write the bytes to
 * @throws IOException
 */
public static void copyStream(InputStream input, OutputStream output) throws IOException {
    byte[] buffer = new byte[1024];
    int count;
    while ((count = input.read(buffer)) != -1) {
        output.write(buffer, 0, count);
    }
}
hgoebl
  • 12,637
  • 9
  • 49
  • 72