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…
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:
# -*- 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)
In Scribus 1.4.x ausgeführt, ermöglicht dieses Kompatibilitätsscript das Öffnen einfacher Dokumente, die mit 1.5 erstellt wurden.
#!/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.
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:
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!)pdf.file = str(datei)+'.pdf
' auskommentiert und das Kommentarzeichen vor der nächsten Zeile entfernt, werden die PDFs statt dateiname.sla.pdf
unter dateiname.pdf
abgespeichert.#!/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!')
Dieses Skript findet fehlende Bilder und verlinkt sie.
https://github.com/aoloe/scribus-script-repository/tree/master/images-missing-relink
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
… finden sich jeweils in den entsprechenden Kategorien im Scribus-Wiki und im deutschen Forum in den Kategorien Plugins und Scripte sowie Ressourcen.