Zum Inhalt springen

pdf wird in der jar nicht mehr gefunden


_Toni_

Empfohlene Beiträge

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

		}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...