我已使用Assets
库https://github.com/jblough/Android-Pdf-Viewer-Library从Android 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>
请帮助解决可能出现的问题?
由于
答案 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);
}
}