Adding 'DRAFT' to a document
A script to place a light grey watermark 'DRAFT' on a new layer. Requires an existing document, but can be modified to create a new document if it does not exist.
Note that this script can be run on a Master Page, which allows you to apply this to as many pages as you wish, without needing to run the script again.
If it doesn't work for you, it may have something to do with your default font.
Save the following code as [{{#file: draft.py}} draft.py]
#!/usr/bin/env python
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
'''
A script to place a light grey watermark 'DRAFT' on a new layer.
Requires an existing document, but can be modified to
create a new document if it does not exist
uses (See the API in Help->Scribus Manual->For Developers->Scripter API;
haveDoc
createLayer
getActiveLayer
setActiveLayer
createText
setUnit
setText
setTextColor
setFontSize
rotateObject
Tested on 1.4.3 and A2, A4, A5, Letter.
'''
import scribus
#from scribus import *
# Could be expanded to include localization here
draft = "DRAFT"
#draft = "ENTWURF"
#draft = "BROUILLON"
L = len(draft) # The length of the word
# will determine the font size
defineColor("gray", 11, 11, 11, 11) # Set your own color here
if haveDoc():
u = getUnit() # Get the units of the document
al = getActiveLayer() # Identify the working layer
setUnit(UNIT_MILLIMETERS) # Set the document units to mm,
(w,h) = getPageSize() # needed to set the text box size
createLayer("c")
setActiveLayer("c")
# T = createText(w/6, 6*h/10 , h, w/2) # Create the box - here is the original line, which
# makes an excessively large frame (see pic above)
T = createText(w/6, 6*h/10 , 2h/3, w/5) # Create the box - I think you will find this is better
# by making a smaller frame
setText(draft, T) # Insert the text
setTextColor("gray", T) # Set the color of the text
setFontSize((w/210)*(180 - 10*L), T) # Set the font size according to length and width
rotateObject(45, T) # Turn it round antclockwise 45 degrees
setUnit(u) # return to original document units
setActiveLayer(al) # return to the original active layer
A note on style
The favored way to use a python script in Scribus is to use the command
import scribus
instead of
from scribus import *
The reason for this is that the latter method imports all of the Scribus python API into the interpreter, rather unnecessary. However, if you use this preferred method, then your Scribus commands need to use a prefix, for example
scribus.setActiveLayer(al)
This also applies to Scribus constants, for example scribus.UNIT_MILLIMETERS. If you're wondering which commands are those which belong to Scribus, generally speaking anything not highlighted in color above is a Scribus command, so from, import, and len are all basic python commands.