# PDF-Files laden und anzeigen



## jorgeHX (28. März 2005)

Hallo zusammen,
ich würde gerne PDF-Files in einer Pane anzeigen. Dafür müsste ich aber wissen, wie man solche Files lädt und eben anzeigen kann....

Wäre cool, wenn mir jemand weiterhelfen könnte.

Danke


----------



## Trice (29. März 2005)

Mit Java allein geht sowas nicht. 

Von Adobe gibts ne API dafür unter
Adobe Acrobat Reader for Java 

Ciao...


----------



## jorgeHX (29. März 2005)

Ist das Teil kostenpflichtig bzw. kann ich mein Programm weitervermarkten, wenn ich diesen Reader einbaue

Danke


----------



## torsch2711 (29. März 2005)

Alternativ hierzu gibt es noch die iText-API:


http://www.lowagie.com/iText/


 Viel Spass


----------



## Thomas Darimont (29. März 2005)

Hallo!

Schau mal hier:

```
/**
 * 
 */
package de.tutorials;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.ole.win32.OleAutomation;
import org.eclipse.swt.ole.win32.OleClientSite;
import org.eclipse.swt.ole.win32.OleFrame;
import org.eclipse.swt.ole.win32.Variant;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

/**
 * @author Administrator
 * 
 */
public class SWTPDFViewer {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);

        shell.setText("SWTPDFViewer");
        shell.setLayout(new FillLayout());

        OleFrame frm = new OleFrame(shell, SWT.NONE);

        OleClientSite site = new OleClientSite(frm, SWT.NONE, "PDF.PdfCtrl.6");
        OleAutomation auto = new OleAutomation(site);

        shell.open();

        int[] rgdispid = auto.getIDsOfNames(new String[] { "LoadFile" });
        int dispIdMember = rgdispid[0];

        Variant[] rgvarg = new Variant[1];
        rgvarg[0] = new Variant(
                "C:/Dokumente und Einstellungen/Administrator/Desktop/pdfs/Tutorial-1.2.2.pdf");

        Variant pVarResult = auto.invoke(dispIdMember, rgvarg);

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }

        int[] rgdispReleaseId = auto.getIDsOfNames(new String[] { "Release" });
        int dispIdMemberRelease = rgdispReleaseId[0];

        System.out.println(auto.invoke(dispIdMemberRelease));

        auto.dispose();

        frm.dispose();

        site.deactivateInPlaceClient();
        site.dispose();

    }
}
```

http://www-128.ibm.com/developerworks/library/os-activex/

Gruß Tom


----------



## jorgeHX (30. März 2005)

Hi Tom,
saucooles Teil,
besteht auch irgendwie die Möglichkeit, dass ich nur die PDF-File in meiner Pane anzeigen kann ohne die oberen und seitliche Menübar?

Ist das Teil auch wirklich kostenlos und kann ich gegebenfalls in ein kleines Prog einbauen, dass ich an meine Uni verhökern will?

Tausenddank


----------



## jorgeHX (10. April 2005)

Hallo zusammen,
ich benötige immernoch Hilfe beim Laden einer PDF. Toms Beispiel ist ziemlich geil und man den Code gut für eine Vollansicht nutzen.
Ich will aber nur eine PDF-File in meine TabPane laden und anzeigen lassen. Ohne irgendwelche Acrobet-Reader Funktionen einzublenden...

Ich hoffe super doll, dass das irgendwie möglich ist...
Wenn jemand eine Idee hat, so postet doch bitte...
Tausend Dank,
Jorge


----------



## jorgeHX (5. Mai 2005)

Hallo,
ich bin noch immer auf der Suche nach einer möglichst einfachen Weise, PDF-Files in einem JPanel anzeigen zu können. Mehr soll das ganze Teil nicht können. Ich will lediglich den Pfad einer PDF-Datei angeben und schon wird diese Datei in einem JPanel angezeigt. 

Irgendwie finde ich nur komplexe Sachen, die viel mehr als das können. Hat nicht jemand eine Idee, wie das gehen könnte? 
Toms Idee ist schon cool, nur wird das Progamm eigenständig gestartet.

Es wäre super dringend... Danke


----------



## jorgeHX (7. Mai 2005)

Ich versuche jetzt anstelle einer Shell, das Ganze in einem JPanel anzuzeigen? Geht das überhaupt?

Mein Problem ist, dass ich bislang ein ImageIcon (also ein Component) in mein BorderLayout geladen haben. Nun will ich aber mit SWT ein PDF dorthinein laden...

Ich hoffe wirklich, dass mir jemand weiterhelfen kann....

DANKE


----------



## Thomas Darimont (7. Mai 2005)

Hallo!

Um den Acrobat ohne Toolbar zu laden könntest du mal folgendes Versuchen ...
(Habe übrigens gerade gemerkt, dass das ganze mit Acrobat 7 NICHT funktioniert ... auch wenn ich die AppID entsprechend anpasse...)

Weiterhin könntest du das PDF DOkument über SWT / Swing Integration in einem TabbedPane öffnen.


```
/**
 * 
 */
package de.tutorials;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.ole.win32.OleAutomation;
import org.eclipse.swt.ole.win32.OleClientSite;
import org.eclipse.swt.ole.win32.OleFrame;
import org.eclipse.swt.ole.win32.Variant;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

/**
 * @author Administrator
 */
public class SWTPdfViewer {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Display display = new Display();
		Shell shell = new Shell(display);

		shell.setText("SWTPDFViewer");
		shell.setLayout(new FillLayout());

		OleFrame frm = new OleFrame(shell, SWT.NONE);

		OleClientSite site = new OleClientSite(frm, SWT.NONE, "PDF.PdfCtrl.6");
		OleAutomation auto = new OleAutomation(site);

		shell.open();

		int[] rgdispid = auto.getIDsOfNames(new String[] { "LoadFile" });
		int dispIdMember = rgdispid[0];

		Variant[] rgvarg = new Variant[1];
		rgvarg[0] = new Variant(
				"C:/Dokumente und Einstellungen/Tom/Desktop/PDF's/ejb-2_1-fr-spec.pdf");

		Variant pVarResult = auto.invoke(dispIdMember, rgvarg);

		rgdispid = auto.getIDsOfNames(new String[] { "setShowToolbar" });
		dispIdMember = rgdispid[0];
		rgvarg = new Variant[1];
		rgvarg[0] = new Variant(false);
		pVarResult = auto.invoke(dispIdMember, rgvarg);

		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}

		int[] rgdispReleaseId = auto.getIDsOfNames(new String[] { "Release" });
		int dispIdMemberRelease = rgdispReleaseId[0];

		System.out.println(auto.invoke(dispIdMemberRelease));

		auto.dispose();

		frm.dispose();

		site.deactivateInPlaceClient();
		site.dispose();

	}
}
```

Gruß Tom


----------



## jorgeHX (7. Mai 2005)

Hallo Tom,
danke für die superschnelle Antwort...
Wie meinste das mit "über SWT / Swing Integration in einem TabbedPane öffnen" ?

Ich bin mit Active-X ein absoluter Newbe, sorry. 

Danke


----------



## Thomas Darimont (7. Mai 2005)

Hallo!

Schau dir doch mal die Dokumentation zum SWT Package:
org.eclipse.swt.awt
an... 

Gruß Tom


----------



## jorgeHX (7. Mai 2005)

ich werde es lesen...
wenn du noch ein Example für das einbetten in eine TabPane hast, wäre ich aber noch viel mehr dankbar...
Schönes Wochenende noch, obwohl das Wetter saumäßig hier ist.
Ciao


----------



## jorgeHX (10. Mai 2005)

Irgendwie check ich das nicht richtig. Eigentlich müsste ich doch nur das pdf-file in einem JComponent anzeigen, anstelle von einer Shell-->Display, oder

Ich verzweifle leider etwas....

Ich habe folgende Dok. überflogen, ist das die richtige dafür?
http://www.dpunkt.de/leseproben/3-89864-281-X/Kapitel_8.pdf

Danke vielmals


----------

