# JEditorPane & copy'n'paste



## ulr!ch (21. Aug 2007)

Hi JavaGemeinde,

folgendes Problem: Ich stelle einen formatierten html-Text + Bilder in einem JEditorPane dar. Der User kann dann den Text bearbeiten (die Bilder sollen so bleiben wie sie sind). Der Editor hat einige Funktionen (fett, kursiv, hochstellen...), aber natürlich nicht den Funktionsumfang von professioneller Textverarbeitungs-Software. Soweit - sogut.

Ich hätte aber gerne eine Möglichkeit, den Text auch in einem anderen Programm weiterverarbeiten zu können, aber
a) per Copy & Paste verschwinden die Graphiken
b) entweder gibt's die Möglichkeit nur Graphiken oder nur Text zu kopieren (flavour-Geschichten)
c) Rtf-Kit ist wohl 'ne tolle Idee, aber auf dem Stand einer Idee geblieben
d) per Screenshot kann man den Text nicht mehr weiterverarbeiten.

Wie machen denn die Browser das? Da kann ich mit Strg+A alles markieren und nach Word rüberkopieren. So etwas wäre toll. Die Threads zu dem Thema hier auch im Forum haben mich leider noch nicht weitergebracht.

Vielleicht gibt's ja eine Möglichkeit, an die ich bisher noch nicht gedacht habe und einer kann mir die nennen.

Alles Gute,
Ulr!ch


----------



## André Uhres (21. Aug 2007)

poi apache soll word unterstützen


----------



## Wildcard (21. Aug 2007)

André Uhres hat gesagt.:
			
		

> poi apache soll word unterstützen


Aufgrund des miserablen Dateiformats (Gott bewahre uns vor einem ISO zertifizierten OpenXML) aber nur sehr sehr rudimentär bis gar nicht.


----------



## André Uhres (21. Aug 2007)

Wildcard hat gesagt.:
			
		

> ..aber nur sehr sehr rudimentär bis gar nicht.


Aha, dann geht's wohl nicht damit?


----------



## Wildcard (21. Aug 2007)

Apache sagt dazu:


> HWPF is still in early development. It is in the  scratchpad section of the SVN. You will need to ensure you either have a recent SVN checkout, or a recent SVN nightly build (including the scratchpad jar!)


Gleich danach kommt die Bitte nach jemandem der sich um das Projekt kümmert, weil sie zZ nicht weiterentwicklen  :wink:
Wie du Copy Paste nach MS-Word hinbekommst kann ich dir leider auch nicht sagen.
Aber du könntest zB die OpenOffice API verwenden um ein OpenDocument oder von mir aus auch ein .doc zu erstellen.


----------



## ulr!ch (21. Aug 2007)

Wildcard hat gesagt.:
			
		

> Aber du könntest zB die OpenOffice API verwenden um ein OpenDocument oder von mir aus auch ein .doc zu erstellen.


Mhm :### Mhmmm... :autsch:
Ich versteh' nur Bahnhof. Das ist doch 'ne library, die ich genauso einbinde wie z. B. JFreeChart, oder?
Kann mir jemand was verständliches zum Einstieg schicken, die API liest sich wie ein Telefonbuch.

Dank!
Ulr!ch


----------



## ulr!ch (21. Aug 2007)

Also das mit OpenOffice ist IMHO auch nur theoretisch möglich.
Ich möchte doch einfach nur Text + Images in einem Format abspeichern, das hinterher irgendjemand lesen und bearbeiten kann. Und odt-Files kann man nicht ohne Weiteres in einem JEditorPane darstellen.
rtf - keine Bilder, html - das eine oder das andere, odt - nicht im JEditorPane - ich krieg' 'n Krampf.
 :cry: 

LG,
Ulrich


----------



## Wildcard (21. Aug 2007)

Aber du könntest zB OpenOffice in einem JFrame darstellen...
Dann müsste auch das Copy Paste funktionieren.


----------



## ulr!ch (21. Aug 2007)

Wildcard hat gesagt.:
			
		

> Aber du könntest zB OpenOffice in einem JFrame darstellen...
> Dann müsste auch das Copy Paste funktionieren.


Aber dann müsste der User ja OO installiert haben, oder?

LG,
Ulrich


----------



## Wildcard (21. Aug 2007)

Man kann auch OpenOffice Portable mit ausliefern. Mach ich auch so.


----------



## ulr!ch (21. Aug 2007)

Wildcard hat gesagt.:
			
		

> Man kann auch OpenOffice Portable mit ausliefern. Mach ich auch so.


Wie ist es denn da mit den Lizenzen, Wildcard?
Kann man das bei kommerzieller Software mitliefern?
Wenn ja, wie kann man OO in einem Frame darstellen?   
Gibt's da 'ne Anleitung irgendwo?

Dank vorab,
Ulr!ch


----------



## Wildcard (21. Aug 2007)

OpenOffice ist LGPL, insofern kein Problem.
OOO stellt eine OfficeBean zur Verfügung, damit lässt sich OOO in einem AWT Panel darstellen.
Am leichtesten dürfte es dir mit dem UNO Wrapper NOA fallen
http://ubion.ion.ag/loesungen/004niceofficeaccess


----------



## ulr!ch (22. Aug 2007)

Hi Wildcard,

das scheint ja der Stein der Weisen zu sein.   
Hoffnung in Sicht...
Eine kurze Frage hab' ich aber dann doch noch: Also braucht NOA unbedingt Eclipse / SWT... ne oder?

Danke schon mal vorab,
Ulr!ch


----------



## Wildcard (22. Aug 2007)

Nein, NOA hat mit Eclipse/SWT nichts zu tun.
Du meinst wahrscheinlich NOA4e, das integriert OpenOffice in Eclipse.


----------



## ulr!ch (22. Aug 2007)

Ja, dann ist ja alles prächtig. Vielen Dank schon einmal.  Echt toll!
Hast du 'ne Ahnung, woran diese Fehlermeldung liegen könnte?
Ich habe schon unterschiedliche JDKs ausprobiert.


> java.lang.UnsupportedClassVersionError: ag/ion/bion/officelayer/application/OfficeApplicationException (Unsupported major.minor version 49.0)
> at java.lang.ClassLoader.defineClass0(Native Method)
> at java.lang.ClassLoader.defineClass(ClassLoader.java:539)
> at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
> ...



LG,
Ulr!ch


----------



## Wildcard (22. Aug 2007)

Ist ein Java 4!=5 Fehler. NOA sollte aber AFAIK auch mit Java 4 funktionieren.
Was hast du denn gemacht?


----------



## Wildcard (22. Aug 2007)

Übrigens, falls du's noch nicht selbst hinbekommen hast, so wird OOO integriert:

```
final JPanel panel = new JPanel(new BorderLayout());
		panel.setVisible(true);
		frame.add(panel, BorderLayout.CENTER);
		try {
	
			HashMap<String, String> configuration = new HashMap<String, String>();
			configuration.put(IOfficeApplication.APPLICATION_HOME_KEY, "/Path/to/OpenOffice");
			configuration.put(IOfficeApplication.APPLICATION_TYPE_KEY, IOfficeApplication.LOCAL_APPLICATION);
			try {
				officeApplication=OfficeApplicationRuntime.getApplication(configuration);
				officeApplication.setConfiguration(configuration);
				officeApplication.activate();
				
			} catch (OfficeApplicationException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	

			IFrame officeFrame = officeApplication.getDesktopService().constructNewOfficeFrame(panel);
// create a new document
			IDocument document=officeApplication.getDocumentService().constructNewDocument(officeFrame, IDocument.WRITER, DocumentDescriptor.DEFAULT);
```


----------



## ulr!ch (22. Aug 2007)

Oh Mann!
 :roll: 
Eine Fehlermeldung jagt die die nächste.
Aktuell bin ich bei:


> 22.08.2007 14:00:52 ag.ion.bion.officelayer.internal.application.connection.LocalOfficeConnection openConnection
> INFO: Opening local OpenOffice.org connection.
> #
> # An unexpected error has been detected by Java Runtime Environment:
> ...



Liegt das am JRE?

Liebe Grüße,
Ulr!ch


----------



## ulr!ch (22. Aug 2007)

Geil, es funzt!

Die Lösung: Der Frame muss Sichtbar sein!
Vielen lieben Dank,
Ulr!ch


----------



## Wildcard (22. Aug 2007)

Die ganzen Menüleisten, Toolbars und Controls kannst du übrigens selektiv programmatisch entfernen.
OOO ist schon 'ne ganz feine Sache


----------



## ulr!ch (22. Aug 2007)

Man muss aber dann die komplette OO partable ausliefern, oder?

LG,
Ulr!ch


----------



## Wildcard (22. Aug 2007)

Ja. das muss sein. Da lohnt sich auch kein Abspecken, da die einzelnen Komponenten Writer/Impress/Calc/... im vergleich zum Kern sehr klein sind.


----------



## ulr!ch (22. Aug 2007)

Wildcard hat gesagt.:
			
		

> Die ganzen Menüleisten, Toolbars und Controls kannst du übrigens selektiv programmatisch entfernen.
> OOO ist schon 'ne ganz feine Sache


Da stimme ich dir zu, dass das 'ne feine Sache ist. 
Kann du mit noch verraten, wie man die Menüleiste bzw. die Toolbars entfernt?

Vielen Dank vorab,
Ulr!ch


----------



## ulr!ch (22. Aug 2007)

Wildcard hat gesagt.:
			
		

> Ja. das muss sein. Da lohnt sich auch kein Abspecken, da die einzelnen Komponenten Writer/Impress/Calc/... im vergleich zum Kern sehr klein sind.


Alles klar!
Das ist ja stand-alone, muss also vom Nutzer nicht manuell installiert werden.
Das ist doch so korrekt, oder?

LG,
Ulr!ch


----------



## Wildcard (22. Aug 2007)

Ja, das ist korrekt. 
Allerdings solltest du vor dem ausliefern einmal die Portable Version von Hand starten und einen Benutzer anlegen. 
Sonst kann es bei einem embedded Frame eventuell zu Problemen kommen.


----------



## ulr!ch (22. Aug 2007)

Wildcard hat gesagt.:
			
		

> Ja, das ist korrekt.
> Allerdings solltest du vor dem ausliefern einmal die Portable Version von Hand starten und einen Benutzer anlegen.
> Sonst kann es bei einem embedded Frame eventuell zu Problemen kommen.


Daran hatte ich auch schon gedacht, danke für den Hinweise!
Super!  

LG,
Ulr!ch


----------



## ulr!ch (22. Aug 2007)

Wildcard hat gesagt.:
			
		

> Die ganzen Menüleisten, Toolbars und Controls kannst du übrigens selektiv programmatisch entfernen.
> OOO ist schon 'ne ganz feine Sache


Manchmal denkt man glaube ich zu kompliziert: Du meinst einfach, dass man (vor Auslieferung) den Menü- und Symbolleisten anpasst, das wird in irgendeiner Konfigurationsdatei gespeichert, so dass man automatisch das Layout hat, was man halt haben möchte. Right?

LG,
Ulr!ch


----------



## Wildcard (22. Aug 2007)

So geht's auch, bei mir ist OOO allerdings in verschiedenen Bereichen integriert, daher muss ich die Menüleiste programmatisch konfigurieren.


----------



## Leroy42 (22. Aug 2007)

ulr!ch hat gesagt.:
			
		

> Kann mir jemand was verständliches zum Einstieg schicken, _die API liest sich wie ein Telefonbuch._


LOL
Damit hatte ich auch zu kämpfen!


----------



## ulr!ch (22. Aug 2007)

Hi Wildcard,

habe doch noch eine Frage, ich habe nun OO komplett deinstalliert und nur eine Portable Version auf meinem Rechner, um zu überprüfen, ob es dann auch noch so schön glatt läuft, und prompt...
Nun steht hier:

```
HashMap<String, String> configuration = new HashMap<String, String>();
	    configuration.put(IOfficeApplication.APPLICATION_HOME_KEY, System.getProperty("user.dir")+"\\OpenOfficePortable");
	    configuration.put(IOfficeApplication.APPLICATION_TYPE_KEY, IOfficeApplication.LOCAL_APPLICATION);
```

Die dazugehörige Fehlermeldung lautet ungefähr so:





> ag.ion.bion.officelayer.application.OfficeApplicationException: com.sun.star.lib.connections.pipe.PipeConnection.createJNI(Ljava/lang/StringI
> at ag.ion.bion.officelayer.internal.application.LocalOfficeApplication.openConnection(LocalOfficeApplication.java:161)
> at ag.ion.bion.officelayer.internal.application.AbstractOfficeApplication.activate(AbstractOfficeApplication.java:120)
> at ag.ion.bion.officelayer.internal.application.AbstractOfficeApplication.activate(AbstractOfficeApplication.java:142)


Er findet den Path nicht.  ???:L 
Du hast ja Erfahrung damit, wie hast du das Problem gelöst?

Dank vorab & LG,
Ulr!ch


----------



## Wildcard (22. Aug 2007)

Naja, halt den richtigen Pfad angeben  :lol: 
Ich glaube das Verzeichnis in dem die soffice.bin liegt, oder das darüber.


----------



## ulr!ch (22. Aug 2007)

Wildcard hat gesagt.:
			
		

> Naja, halt den richtigen Pfad angeben  :lol:
> Ich glaube das Verzeichnis in dem die soffice.bin liegt, oder das darüber.


:lol: Es ist das darüber, also \App\openoffice\

Langsam bekomme ich ein richtig schlechtes Gewissen, so viele Fragen, aber ich finde über google keine gewinnbringenden Einträge.

Es funktioniert! ABER er ruf es nun doch mit allen möglichen Symbolleisten (hier 7 Stück) auf, obwohl ich es anders definiert habe... Mhm... Kannst du mir vielleicht doch noch verraten, wie ich die programmatisch ausblenden kann?

Also noch einmal vielen, vielen Dank, kann man nicht Sternchen an besonders verdienstvolle Beiträgsschreiber verleihen  na wenigstens: :applaus:  

LG,
Ulr!ch


----------



## Wildcard (22. Aug 2007)

Ich glaube die Toolbar config wird im Dokument und nicht global abgelegt.
Über den LayoutManager kannst du das beeinflussen:

```
ILayoutManager layoutManager = frame.getLayoutManager();
```
Hier gibt's hideAll() um alle zu verstecken.
Selektiv kannst du anhand der UNO URLs Teile entfernen, aber ich kann dir nicht mehr auswendig beantworten, ob der LayoutManager das kann, oder du dir die XComponent geben lassen musst.
Die zum entfernen notwendigen URLs gibt's hier:
http://www.openshortcut.org/ooo/function-uno.php
Danach ein 
	
	
	
	





```
frame.validate()
```

Mehr kann ich dir gerade nicht sagen, da ich meinen Code nicht zur Hand habe.
Sonderlich schwierig ist's aber nicht.


----------



## ulr!ch (22. Aug 2007)

Vielen Dank erstmal, dass schau' ich mir genauer an.
Alle verstecken klappt schon mal. 

Liebe Grüße,
Ulr!ch


----------



## JSteinhilber (17. Mrz 2008)

Tja, da habe ich wohl das selbe Problem wie Ulrich anno 2007...
...dabei ist der Frame sichtbar. 
Könnte es evtl. an der Java-Version 1.6.0_03-b05 liegen. Desweiteren benutze ich OpenOffice.org 2.3.

Hat jemand eine Idee in welcher Ecke ich suchen könnte?

Gruß Jürgen

#
# An unexpected error has been detected by Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x63bc1450, pid=3392, tid=3800
#
# Java VM: Java HotSpot(TM) Client VM (1.6.0_03-b05 mixed mode, sharing)
# Problematic frame:
# C  [officebean.dll+0x1450]
#
# An error report file with more information is saved as hs_err_pid3392.log
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#


----------

