Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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?

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

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

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.

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

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

		}

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.