Java: Lesen einer pdf-Datei von URL in eine Byte-array/ByteBuffer in ein applet

Ich versuche, herauszufinden, warum dieser bestimmte code-snippet nicht für mich arbeiten. Ich habe ein applet soll zu Lesen .pdf und Anzeige mit einem pdf-renderer-Bibliothek, aber aus irgendeinem Grund, wenn ich in der lese .pdf-Dateien, die sitzen auf meinem server, Sie am Ende als korrupt. Ich habe es getestet, indem Sie die Dateien wieder raus.

Ich habe versucht, das betrachten der Applets im IE und Firefox und die beschädigten Dateien auftreten. Komisch ist, wenn ich versuche die Anzeige des Applets in Safari (für Windows), die Datei ist eigentlich in Ordnung! Ich verstehe die JVM vielleicht anders, aber ich bin immer noch verloren. Ich habe kompiliert in Java 1.5. JVMs sind 1.6. Das snippet liest die Datei ist unten.

public static ByteBuffer getAsByteArray(URL url) throws IOException {
        ByteArrayOutputStream tmpOut = new ByteArrayOutputStream();

        URLConnection connection = url.openConnection();
        int contentLength = connection.getContentLength();
        InputStream in = url.openStream();
        byte[] buf = new byte[512];
        int len;
        while (true) {
            len = in.read(buf);
            if (len == -1) {
                break;
            }
            tmpOut.write(buf, 0, len);
        }
        tmpOut.close();
        ByteBuffer bb = ByteBuffer.wrap(tmpOut.toByteArray(), 0,
                                        tmpOut.size());
        //Lines below used to test if file is corrupt
        //FileOutputStream fos = new FileOutputStream("C:\\abc.pdf");
        //fos.write(tmpOut.toByteArray());
        return bb;
}

Ich muss etwas fehlen, und ich habe schlug meinen Kopf zu versuchen, es herauszufinden. Jede Hilfe wird sehr geschätzt. Danke.


Edit:
Zur weiteren Klärung meiner situation, die Differenz, bevor Sie die Datei lese ich dann mit dem snippet und nach, ist, dass diejenigen, denen ich die Ausgabe nach der Lektüre sind deutlich kleiner, als Sie ursprünglich sind. Wenn Sie diese öffnen, werden Sie nicht anerkannt .pdf Dateien. Es gibt auch keine exceptions geworfen, die ich Ignoriere, und ich habe versucht, eine Spülung ohne Erfolg.

Dieses snippet funktioniert in Safari, das heißt, die Dateien werden gelesen in seiner Gesamtheit, mit keinen Unterschied in der Größe, und kann geöffnet werden mit jedem .pdf-reader. Im IE und Firefox werden die Dateien immer am Ende wird beschädigt, konsequent die gleiche geringere Größe.

Ich überwacht die len-variable (beim Lesen einer Datei 59kb), in der Hoffnung, um zu sehen, wie viele bytes zu Lesen bekommen in jeder Schleife. Im IE und Firefox, bei 18kb, die in.read(buf) liefert eine -1, wenn die Datei beendet ist. Safari tut dies nicht.

Werde ich halten, und ich Schätze all die Vorschläge so weit.

  • Wenn Sie sagen, dass die Datei beschädigt ist, was meinst du genau? Wenn du im Vergleich zu den ursprünglichen, was ist anders?
  • Beantworten Sie bitte den 2. Teil von Eddie ' s Frage. Auch ist der Wert von contentLength richtig?
InformationsquelleAutor Pol | 2009-03-12
Schreibe einen Kommentar