Für den Export von Text stellt Scribus tatsächlich nur den Export der Inhalte von Textrahmen im reinen Textformat zur Verfügung, alle Formatierungen gehen also verloren. Export als HTML usw. geht nicht.
Mit dem Export ist es ähnlich wie mit dem Import - solche Funktionen sind schwer zu programmieren, weil sich ein grundlegendes Problem stellt: Ein DTP-Programm ist keine eierlegende Wollmilchsau. Ein Seitenlayoutprogramm ist zur freien Gestaltung von Seiten gemacht und soll dabei der Kreativität keine Grenzen setzen: Wer einen bunten Buchstabensalat produzieren möchte, kann es tun. Formate wie HTML, EPUB usw. beruhen hingegen auf Strukturinformationen, sie setzen eine regelmäßige Struktur voraus. Bekanntlich kann man z.B. aus Word auch HTML-Dokumente erzeugen, aber das, was dabei herauskommt, ist alles andere als sauberes, effizientes HTML, sondern ein Wust, der sich schwer weiterverarbeiten lässt. Cross-Media-Publishing wird heute zunehmend verlangt, aber selbst bei den professionellen Programmen sind die dafür vorgesehenen Standardfunktionen mit Vorsicht zu genießen. (Man arbeitet dann am besten von vornherein mit einem gut durchdachten XML-Workflow, Scribus bietet diese Möglichkeit jedoch nicht.)
Ich erstelle mit Scribus regelmäßig einen Vereins-Newsletter mit einem zeitungsartigen Layout, der als PDF an die Empfänger verschickt wird, die ihn sich dann ausdrucken können. Unter den Empfängern gibt es auch Blinde. Diese haben das Problem, dass sie mehrspaltige PDF-Dokumente kaum lesen können - die Screenreader kommen mit Mehrspaltigkeit nicht zurecht. Deshalb erstelle ich immer auch eine reine Textversion. Dafür reicht im Prinzip die Text-Exportfunktion von Scribus aus. Allerdings ist es ein bisschen umständlich, weil ich immer alle einzelnen Artikel exportieren und dann zusammenfügen muss. Ich habe also überlegt, ob es dafür nicht eine bessere Lösung gibt.
Es gibt sie. Ein Vorteil von Scribus besteht darin, dass das *.sla-Dokumentformat nichts anderes ist als ein XML-Textformat (wenn auch mit einer etwas eigenwilligen Struktur). XML lässt sich prinzipiell in andere Formate transformieren - mit XSLT.
Dazu braucht man einen XSLT-Prozessor und eine XSL-Stylesheet-Datei, in der die Transformationsregeln festgelegt werden.
Ich habe mich also ein bisschen damit beschäftigt, wie man mit XSLT den Text aus Scribus-Dokumenten exportieren kann - und zwar den ganzen Text auf einmal. (Dabei werden keine Texte aus Musterseiten berücksichtigt - dies sind üblicherweise Standardseitenelemente, die außerhalb des Layouts meist nicht benötigt werden.)
Hier ist ein minimales XSLT-Stylesheet:
Code: Alles auswählen
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xhtml xsl xs">
<xsl:output method="text" encoding="utf-8"/>
<xsl:strip-space elements="*"/>
<xsl:template match="DOCUMENT">
<xsl:apply-templates/>
</xsl:template>
<!-- wir wollen keine Texte aus Musterseiten übernehmen -->
<xsl:template match="MASTEROBJECT"/>
<!-- Seitenobjekte nur verarbeiten, wenn sie Textknoten enthalten -->
<xsl:template match="PAGEOBJECT">
<xsl:if test="./ITEXT">
<xsl:apply-templates/>
<xsl:text> </xsl:text>
</xsl:if>
</xsl:template>
<!-- Absätze mit Leerzeilen ausgeben -->
<xsl:template match="para">
<xsl:apply-templates/>
<xsl:text> </xsl:text>
</xsl:template>
<!-- Text ausgeben -->
<xsl:template match="ITEXT">
<xsl:value-of select="@CH"/>
</xsl:template>
<!-- Handhabung verschiedener Zeichen -->
<xsl:template match="nbspace">
<xsl:text> </xsl:text>
</xsl:template>
<xsl:template match="tab">
<xsl:text>	</xsl:text>
</xsl:template>
<xsl:template match="breakline">
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
Der Code wird in einer Textdatei scrtext.xsl gespeichert (Codierung: UTF-8).
Der XSLT-Prozessor xsltproc muss installiert werden - er sollte in den Repositorien aller gängigen Distributionen verfügbar sein.
Die zu verarbeitende Datei scribusdokument.sla und das Stylesheet scrtext.xsl werden zusammen in ein Verzeichnis gelegt. In diesem Verzeichnis erfolgt dann der Terminalaufruf
$ xsltproc scrtext.xsl scribusdokument.sla > ausgabe.txt
Der gesamte Text aus dem Dokument wird dann in die Datei ausgabe.txt geschrieben.
(Windows- und Mac-Anwender müssen einen XSLT-Prozessor installieren und nach dessen Bedienungsanleitung verfahren.)
Nun ein Ansatz zu einer Verfeinerung für die Ausgabe von Text, der zu HTML weiterverarbeitet werden kann:
Das folgende Stylesheet gibt den Text mit einigen Elementen der Auszeichnungssprache Markdown (http://de.wikipedia.org/wiki/Markdown) aus, mit der auf einfache Weise HTML-Dokumente erzeugt werden können. Wenn im Scribus-Dokument Überschriften erster Ordnung mit einem Absatzstil HEAD1 und Überschriften zweiter Ordnung mit HEAD2 formatiert werden, so werden diese mit ===== und ----- unterstrichen ausgegeben - diese Unterstreichungen stehen in Markdown für die HTML-Elemente <h1> und <h2>. Alles, was mit Zeichenstilen formatiert wurde, wird in der Ausgabe mit *Asterisken* markiert, diese werden in Markdown kursiv formatiert.
Code: Alles auswählen
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xhtml xsl xs">
<xsl:output method="text" encoding="utf-8"/>
<xsl:strip-space elements="*"/>
<xsl:template match="DOCUMENT">
<xsl:apply-templates/>
</xsl:template>
<!-- wir wollen keine Texte aus Musterseiten übernehmen -->
<xsl:template match="MASTEROBJECT"/>
<!-- Seitenobjekte nur verarbeiten, wenn sie Textknoten enthalten -->
<xsl:template match="PAGEOBJECT">
<xsl:if test="./ITEXT">
<xsl:apply-templates/>
<xsl:text> </xsl:text>
</xsl:if>
</xsl:template>
<!-- Absätze mit Leerzeilen ausgeben, HEAD1 und HEAD2 als Überschriften -->
<xsl:template match="para">
<xsl:choose>
<xsl:when test="@PARENT = 'HEAD1'">
<xsl:text>
========================================================================</xsl:text>
</xsl:when>
<xsl:when test="@PARENT = 'HEAD2'">
<xsl:text>
------------------------------------------------------------------------</xsl:text>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
<xsl:apply-templates/>
<xsl:text> </xsl:text>
</xsl:template>
<!-- Text ausgeben -->
<xsl:template match="ITEXT">
<xsl:variable name="content">
<xsl:value-of select="@CH"/>
</xsl:variable>
<xsl:variable name="style">
<xsl:value-of select="@CPARENT|@FONT"/>
</xsl:variable>
<xsl:choose>
<!-- Zeichenstile werden mit * markiert -->
<xsl:when test="$style != ''">
<xsl:text>*</xsl:text>
<xsl:value-of select="$content"/>
<xsl:text>*</xsl:text>
</xsl:when>
<!-- alles Übrige wird als reiner Text ausgegeben -->
<xsl:otherwise>
<xsl:value-of select="$content"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- Handhabung verschiedener Zeichen -->
<xsl:template match="nbspace">
<xsl:text> </xsl:text>
</xsl:template>
<xsl:template match="tab">
<xsl:text>	</xsl:text>
</xsl:template>
<xsl:template match="breakline">
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
Für eine Ausgabe mit weiteren dokumentspezifischen Stilen müsste das Stylesheet entsprechend angepasst werden. Eines ist klar: Man kann sich mit XSLT maßgeschneiderte Lösungen für bestimmte Dokumentstandards schaffen. Eine allgemeine Lösung für alles und jedes ist nicht möglich - aus den oben angeführten Gründen.
Grundsätzlich kann man XML-Dateien mit XSLT natürlich direkt in HTML und beliebige andere textbasierte Formate transformieren. Eine direkte Lösung für die Umwandlung von Scribus-Dokumenten in HTML ist mir jedoch bislang nicht gelungen. Das Problem liegt darin, dass im Scribus-Dokumentformat eine, vorsichtig ausgedrückt, etwas eigenwillige XML-Struktur verwendet wird (in welcher der Text in Attributen [!] von ITEXT-Elementen abgelegt wird), die sich mit XSLT schwer parsen lässt.