_Toni_ Geschrieben 3. Februar 2010 Geschrieben 3. Februar 2010 Hallo, ich habe folgendes Problem: ich habe eine bereits fertige pdf und möchte diese anzeigen lassen. Das funzt mit der Library PDFRenderer soweit auch ganz gut. zumindest so lange ich das Programm in eclipse starte. Sobald ich daraus eine jar mache findet er die PDF nicht mehr. Die PDF (test.pdf) liegt als Ressource im default package. Hier mal der Code dazu: JFrame frame = new JFrame("Hilfe"); PagePanel panel = new PagePanel(); frame.add(panel); frame.setVisible(true); URL url = ClassLoader.getSystemResource("test.pdf"); File file = new File(url.getFile().replaceAll("%20", " ")); try { RandomAccessFile raf = new RandomAccessFile(file, "r"); FileChannel channel = raf.getChannel(); ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size()); PDFFile pdffile = new PDFFile(buf); PDFPage page = pdffile.getPage(1); panel.showPage(page); } catch (Exception f) {} Hat jemand ne Ahnung warum es innerhalb von Eclipse funzt aber als jar nicht? Zitieren
Jobe2009 Geschrieben 3. Februar 2010 Geschrieben 3. Februar 2010 Warum weiß ich auch nicht, ich weiß aber das das z.B. mit Bildern auch nicht funktioniert. Externe Reccourcen sind erst dann dabei, wenn sie "neben" dem jar-File liegen. Dazu müssen sie im Eclipse-Projekt ebenfalls neben dem src-Package liegen. Das ist manchmal etwas umständlich, vor allem, wenn es menge von externen Recourcen sind. Würde mich ebenfalls über eine professionelle Lösung freuen:D MFG Jobe Zitieren
kingofbrain Geschrieben 3. Februar 2010 Geschrieben 3. Februar 2010 Erhältst Du für "url" immer sinnvolle Werte, auch wenn das PDF im JAR liegt? Ich vermute, dass die Datei nur gelesen werden kann, wenn sie wirklich im Dateisystem liegt und nicht im JAR. Hol Dir den Dateiinhalt doch mit Class#getResourceAsStream(String), dann hast Du den Inhalt in der Hand und kannst ihn weiterverarbeiten. Und das auch aus dem JAR heraus. Peter Zitieren
_Toni_ Geschrieben 3. Februar 2010 Autor Geschrieben 3. Februar 2010 Also, für die URL erhalte ich nen sinnvollen wert. In Eclipse: D:\Documents and Settings\user\workspace\EIC\bin\test.pdf Als jar: file:\D:\Documents and Settings\user\Desktop\eic-help.jar!\test.pdf Der Code zu der Ausgabe: URL url = Main.class.getResource("test.pdf"); File file = new File(url.getFile().replaceAll("%20", " ")); MainFrame.setTextField(file.toString()); Die Sache ist ja, ich habe in dem Programm bereits eine XSL-Datei die ohne Probleme gelesen werden kann. Auch in der JAR. Den hole ich auch über getResourceAsStream. Problem ist aber, wenn ich mir die PDF so hole habe ich sie als InputStream ich brauche sie aber als File. Zitieren
kingofbrain Geschrieben 3. Februar 2010 Geschrieben 3. Februar 2010 Ich hab jetzt mit der Library und auch mit dem ByteBuffer noch nicht gearbeitet. Aber die API Dokumentation für ByteBuffer sagt mir, dass es eine Factory Method public static ByteBuffer wrap(byte[] array) gibt, bei der Du den Inhalt eines byte-Array in den ByteBuffer verpacken kannst. Damit hast Du dann den Puffer, den Du dem PDFFile geben kannst, ohne mit java.io.File zu arbeiten. In meinen Augen sollte aber die Library auch die Möglichkeiten bieten, anhand von Streams oder Readern zu arbeiten. Edit sagt: verwende doch bitte auch so schicke CODE-Tags wie ich, dann kann man Deinen Quelltext besser lesen. Schöne Grüße, Peter Zitieren
_Toni_ Geschrieben 8. Februar 2010 Autor Geschrieben 8. Februar 2010 also, die sache wurde nun wie folgt gelöst: try { InputStream is = this.getClass().getResourceAsStream("manual.pdf"); ByteArrayOutputStream out = new ByteArrayOutputStream(1024); byte[] tmp = new byte[1024]; while (true) { int r = is.read(tmp); if (r == -1) break; out.write(tmp, 0, r); } ByteBuffer buf = ByteBuffer.wrap(out.toByteArray()); pdffile = new PDFFile(buf); // show the first page page = pdffile.getPage(1); panel.showPage(page); } catch (Exception f) { } Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.