Zum Ende der Metadaten springen
Zum Anfang der Metadaten

Sie zeigen eine alte Version dieser Seite an. Zeigen Sie die aktuelle Version an.

Unterschiede anzeigen Seitenhistorie anzeigen

« Vorherige Version anzeigen Version 2 Nächste Version anzeigen »

Anforderung

Manchmal besteht der Wunsch das im Viewer angezeigte Dokument als Datei zu exportieren. In der jadice 4er Generation gab es zu diesem Zweck ein eigenes Command. Dieses Command öffnete ein zunächst Datei-Auswahl-Dialog. Hier konnte der Anwender entscheiden, wohin die Datei zu exportieren ist und wie der Name der Datei lauten sollte. Hat der Anwender sich für ein Datei-Ziel entschieden, wurden die Original-Daten des Dokuments an den Zielort kopiert. Bei zusammengesetzen Dokumenten aus unterschiedlichen Datenquellen exportierte das Command nur das erste Dokument.

Wie kann in der jadice 5er Welt kann dieser Funktion implementiert werden?

Lösungsmöglichkeit

Lösung:

Als ersten Schritt muß ein Ziel und Name der Ausgabe-Datei ermittelt werden. Dazu kann man sich eines JFileChooser Dialogs bedienen. Ist eine passende Ausgabe-Datei gefunden, müssen nur noch die Original-Daten des Douments exportiert werden. Idealerweise benötigt man dazu den ursprünglichen Dokument-Datenstrom, der zum Laden ds Dokuments bereitgestellt wurde. Leider ist dieser Datenstrom nicht immer zur Hand. Glücklicherweise bieten die PageSegment eine Zugriffsmöglichkeit auf ihre Originaldaten. Mithilfe diesen kleinen Trick können nun die Original-Daten des Dokuments exporttiert werden.
Im Folgenden ist ein Source Code Fragment, dass den beschriebenen Prozess verdeutlicht. Beispiel

File outputFile=...
UIDocument<Component> uiDocument = getPageView().getDocument();
if (uiDocument != null && //
    uiDocument.getState() == Document.BasicState.READY && //
    uiDocument.getPageCount() > 0) {
	final EventList<Page> pages = uiDocument.getPages();
	final ReadWriteLock lock = pages.getReadWriteLock();
	lock.readLock().lock();
	try {
		Page page = uiDocument.getPage(0);
		FileOutputStream fos = null;
		try {
			fos = new FileOutputStream(outputFile);
			final PageSegmentSource pss = page.getPageSegment(DocumentLayer.DEFAULT).getSource();
			final SeekableInputStream stream = pss.getStream();
			synchronized (stream) {
				stream.seek(0);
				IOUtils.copy(stream, fos);
			}
		} catch (final Exception e) {
			e.printStackTrace();
		} finally {
			if (fos != null) {
				try {
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	} finally {
		lock.readLock().unlock();
	}
}

  • Keine Stichwörter