Inhaltsverzeichnis
Scripte
In Scribus lassen sich mit in der Programmiersprache Python geschriebenen Scripten zahlreiche Aktionen automatisieren. Weitere Informationen finden sich in der Kategorie Scripter. Einige dieser Scripte sollen auf dieser Seite gesammelt werden.
Wenn sie eines davon benutzen möchten, laden sie es durch Klicken auf den Dateinamen über der Code-Box herunter und öffnen es in Scribus über den Menüpunkt Script → Script ausführen…
Automatische Textrahmen nach Erzeugung eines Dokuments anwenden
Dieses – auf eine Frage im Forum hin entstandene – Script ahmt das Verhalten der Funktion „Automatische Textrahmen“ nach, allerdings mit der Verbesserung, dass man sich entscheiden kann, ob die Rahmen verkettet werden sollen, und selber die Abmessungen bestimmt.
duplicateObject
. Leider scheint es so, als könnte man es nicht auf eine andere Seite übernehmen:import scribus # zu kopierender Textrahmen ist ausgewählt # und befindet sich auch Seite 1 scribus.gotoPage(2) # Textrahmen wird auf Seite 1 eingefügt scribus.duplicateObject('Text1') scribus.setText('Hallo Welt!')
Vorgehen:
- Dokument in Scribus öffnen
- dort Seiten anlegen bzw. Seiten, auf denen Textrahmen vorkommen sollen, vorsehen
- auf der ersten neu angelegten Seite einen Textrahmen mit den gewünschten Abmessungen erstellen und diesen Textrahmen auswählen
- das Script über das „Script“-Menü ausführen.
- Anschließend fragt das Script dann ab, bis zu welcher Seite Textrahmen erstellt und ob diese verlinkt werden sollen.
- scribusTextFrames.py
# -*- coding: utf-8 -*- from scribus import * def createTextFrames(start, end, linkFrames=True): width,height = getSize() pos_x, pos_y = getPosition() name_prev = getSelectedObject() for page in xrange(start, end): gotoPage(page+1) name_next = createText(pos_x, pos_y, width, height) if linkFrames: linkTextFrames(name_prev, name_next) name_prev=name_next if haveDoc() == False: messageBox("Kein Dokument geöffnet", "Um dieses Script auszuführen zu können, muss ein Dokument geöffnet sein.", icon=ICON_WARNING) elif selectionCount()==1: end=int(valueDialog("Seitenzahl eingeben", "Bis zu welcher Seite sollen Textrahmen erzeugt werden?")) start = currentPage() if start > end: messageBox("Seitenzahl ist kleiner als aktuelle Seite", "Die gewählte Seitenzahl ist kleiner als die der aktuellen Seite, sie muss aber größer sein, weil von der aktuellen Seite aus beginnend Textrahmen angelegt werden.", icon=ICON_WARNING) else: link=messageBox("Textrahmen verketten?", "Sollen Textrahmen verlinkt werden?", button1=BUTTON_YES, button2=BUTTON_NO) if link==BUTTON_YES: link=True else: link=False createTextFrames(start, end, link) docChanged(True) else: messageBox("Element auswählen", "Es muss ein Element ausgewählt sein, es sind aber "+str(selectionCount())+" ausgewählt.", icon=ICON_WARNING)
Scribus 1.5-Dokumente in 1.4.x öffnen
In Scribus 1.4.x ausgeführt, ermöglicht dieses Kompatibilitätsscript das Öffnen einfacher Dokumente, die mit 1.5 erstellt wurden.
- 1.5zu1.4.py
#!/usr/bin/env Python # -*- coding: utf-8 -*- import scribus, re slafile = scribus.fileDialog("Bitte eine Scribus 1.5.x Datei auswählen.", "Scribus-Dateien (*.sla)") filecontent = open(slafile, "r").read() filecontent = filecontent.replace('<SCRIBUSUTF8NEW Version="1.5.', '<SCRIBUSUTF8NEW Version="1.4.') filecontent = filecontent.replace('<DefaultStyle/>', '') filecontent = filecontent.replace('</StoryText>', '') filecontent = filecontent.replace('<StoryText>', '') filecontent = filecontent.replace('</Cell>', ' ') filecontent = filecontent.replace('</TableData>', '') filecontent = filecontent.replace('PTYPE="12"', 'PTYPE="7"') filecontent = filecontent.replace('PTYPE="16"', 'PTYPE="4"') # quick and dirty workaround for setting PRINTABLE attribute to 1 if not already set: filecontent = filecontent.replace('CLIPEDIT="1" PWIDTH=', 'CLIPEDIT="1" PRINTABLE="1" PWIDTH=') filecontent = filecontent.replace('CLIPEDIT="0" PWIDTH=', 'CLIPEDIT="0" PRINTABLE="1" PWIDTH=') filecontent = re.sub(r"(<DefaultStyle[^>].*?>)", "", filecontent) filecontent = re.sub(r"(<TableData[^>].*?>)", "", filecontent) filecontent = re.sub(r"(<Cell [^>].*?>)", "", filecontent) newfile = slafile.replace(".sla", "_1-4.sla") if os.path.isfile(newfile): scribus.messageBox("Fehler: Datei bereits vorhanden", "Die Datei „"+newfile+"“ ist bereits vorhanden.\nDas Script wurde abgebrochen; Geben sie einen anderes Suffix an oder verschieben sie die Datei.") else: ofile = open(newfile, "w").write(filecontent) scribus.openDoc(newfile) anzahl = scribus.pageCount() for seite in range(1,anzahl+1): scribus.gotoPage(seite) objects = scribus.getAllObjects() for x in objects: width,height = scribus.getSize(x) scribus.sizeObject(100,100,x) scribus.sizeObject(width,height,x) scribus.setLineShade(100, x)
Mit Musterseiten hat das Script Probleme (der Scripter erlaubt nicht das Bearbeiten von Musterseiten), diese müssen ggf. von Hand nachbearbeitet werden (Objektgröße ändern, damit Texte und Bilder angezeigt werden). Von Tabellen bleibt nur der beinhaltende Text übrig, Bézierkurven aus 1.5 werden in 1.4 nicht angezeigt und der Fußnotentext bei Fußnoten wird nicht übernommen.
⇒ ZIP-Datei (1,4MB) mit Script und einem Beispieldokument.
PDF-Batch Export
Dieses Script öffnet und exportiert eine Auswahl von Scribus-Dateien als PDFs.
Wird das Script ausgeführt, erscheint ein Datei-Auswahl-Dialog, in dem per gedrückter [Strg] bzw. [Ctrl]-Taste mehrere Dateien ausgewählt werden können. Anschließend werden die Dateien mit einem angehängten Suffix dateiname.sla.pdf
im gleichen Ordner wie die Ausgangsdateien abgelegt.
Im Script selbst sind noch zwei Änderungen vorgesehen:
- Wird die Zeile
dateien = QtGui.QFileDialog.getOpenFileNames(None, 'Scribus Dateien ausw'+u„\u00E4“+'hlen',„“, „Scribus-Dateien (*.sla *.sla.gz);;Alle Dateien (*)“)
per vorangestelltem#
auskommentiert und das Kommentarzeichen vor der nächsten Zeile entfernt, erscheint keine Dateiabfrage mehr, sondern die zu exportierenden Dateien werden als Liste in der Zeile darunter festgelegt (siehe Beispiele; absolute Pfade verwenden!) - Wird die Zeile
pdf.file = str(datei)+'.pdf
' auskommentiert und das Kommentarzeichen vor der nächsten Zeile entfernt, werden die PDFs stattdateiname.sla.pdf
unterdateiname.pdf
abgespeichert.
- pdf-export.py
#!/usr/bin/env Python # -*- coding: utf-8 -*- import scribus import re from PyQt4 import QtGui dateien = QtGui.QFileDialog.getOpenFileNames(None, 'Scribus Dateien ausw'+u"\u00E4"+'hlen',"", "Scribus-Dateien (*.sla *.sla.gz);;Alle Dateien (*)") #dateien = ['/home/julius/Schreibtisch/Scribus-Experimente/testdokument1.sla', '/home/julius/Schreibtisch/Scribus-Experimente/testdatei.sla', '/home/julius/Schreibtisch/Scribus-Experimente/test.sla'] counter = 0 for datei in dateien: scribus.messagebarText("Bearbeite Datei „"+datei+"“") scribus.openDoc(datei) pdf = scribus.PDFfile() pdf.file = str(datei)+'.pdf' #pdf.file = re.sub(r"(.sla)?(.sla)$", ".pdf", str(datei)) pdf.save() scribus.closeDoc() counter = counter + 1 if counter > 0: scribus.messageBox('Export beendet', 'PDF-Export erfolgreich beendet!') else: scribus.messageBox('PDF-Export', 'Keine Dateien ausgewählt!')
Fehlende Bilder finden
Dieses Skript findet fehlende Bilder und verlinkt sie.
https://github.com/aoloe/scribus-script-repository/tree/master/images-missing-relink
Monats-Kalender mit Scribus erzeugen
Erzeugt einen Monatskalender, der beispielsweise zu einem Fotokalender ausgebaut werden kann, ohne dass man den Kalender von Hand erzeugen müsste. Im Verlauf des Threads wird auch über das automatische Einbinden von Feiertagen nachgedacht.
https://www.scribus-user.de/forum/viewtopic.php?f=5&t=409#p3087
Weitere Skripte...
… finden sich jeweils in den entsprechenden Kategorien im Scribus-Wiki und im deutschen Forum in den Kategorien Plugins und Scripte sowie Ressourcen.