从URL读取Pdf并使用Android PDF Viewer解析

时间:2014-04-18 22:11:04

标签: httpurlconnection urlconnection pdfviewer

我已使用Assetshttps://github.com/jblough/Android-Pdf-Viewer-LibraryAndroid Pdf Viewer文件夹成功显示了Pdf。我现在正在尝试解析和显示在线pdf" http://www.gnostice.com/downloads/Gnostice_PathQuest.pdf"但是它给出了以下错误:

<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>

我正在打开URL Connection连接:

<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>

请帮助解决可能出现的问题?

由于

1 个答案:

答案 0 :(得分:0)

您阅读流的方式不正确。您可以使用这些实用程序类(取自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);
    }
}