Benutzer-Werkzeuge

Webseiten-Werkzeuge


ressourcen:scripte

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 ScriptScript ausführen…

Alle auf dieser Seite im Wiki enthaltenen Scripte stehen unter CC0. Das bedeutet, Sie können mit ihnen machen, was Sie wollen. Natürlich können Sie auch diese Seite als Quelle verlinken, wenn Sie das möchten ;-)

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.

Eine ähnliche Funktion hat der Rahmen einfügen-Dialog. Er beherrscht jedoch nicht das Übernehmen der Abmessungen vorhandener Textrahmen wie dieses Script es tut. Man könnte das Script allerdings so optimieren, dass es die Textrahmen kopiert (und damit alle Eigenschaften wie Abmessungen und Stile übernimmt). Die Methode heißt 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:

  1. Dokument in Scribus öffnen
  2. dort Seiten anlegen bzw. Seiten, auf denen Textrahmen vorkommen sollen, vorsehen
  3. auf der ersten neu angelegten Seite einen Textrahmen mit den gewünschten Abmessungen erstellen und diesen Textrahmen auswählen
  4. das Script über das „Script“-Menü ausführen.
  5. 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.

Wichtig: Bereits existierende PDF-Dateien mit dem gleichen Namen werden ohne vorherige Nachfrage überschrieben!

Im Script selbst sind noch zwei Änderungen vorgesehen:

  1. 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!)
  2. Wird die Zeile 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.
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.

ressourcen/scripte.txt · Zuletzt geändert: 2019/05/07 21:55 von julius