Category:Scripts: Difference between revisions

From Scribus Wiki
Jump to navigation Jump to search
(27 intermediate revisions by 5 users not shown)
Line 1: Line 1:
[[Category:EN]] [[Category:Categories]]
[[Category:EN]] [[Category:Categories]]
'''Other languages:''' [[:Category:Skrypty_i_wtyczki|Polski (pl)]] [[:Category:Scripts_e_Plugins|Portuguese (pt_BR)]]
'''Other languages:''' [[:Category:Skrypty_i_wtyczki|Polski (pl)]] [[:Category:Scripts_e_Plugins|Portuguese (pt_BR)]]
 
{{TOC right}}
= Scripter =
= Scripter =
<div style="border:2px solid lightgrey;padding:2px">
Note: The new script engine "ScripterNG" is currently being integrated into Scribus. The next steps will be:
* get the script engine to work (should already be ok)
* get the editor to work (i'm stuck there)
* revise the structure of the API
* add new functions to the API
[[Scripter Architecture|Scripter NG non-complete documentation about architecture]]
</div>


Here ist documentation about the current scripting component in Scribus:
Here ist documentation about the current scripting component in Scribus:
Line 18: Line 8:
* [[Scripter API]] -- Routines which can be used in scripts to control Scribus
* [[Scripter API]] -- Routines which can be used in scripts to control Scribus
* [[Scripter/Databases| Databases]] -- Scripts can interact with database software like MySQL or SQLite
* [[Scripter/Databases| Databases]] -- Scripts can interact with database software like MySQL or SQLite
* Alessandro Rimoldi's blog series on scripter functions - [http://www.graphicslab.org/Blog/Blog a_l_e's blog]


This wiki is capable of letting users download raw code embedded into the pages. Here is how: - [[Raw_Code_Download| Wikitext for Raw Code Download]]
This wiki is capable of letting users download raw code embedded into the pages and have it appear syntax highlighted.
* So as to cite python script code with proper syntax hilight, use the following tag <nowiki><syntaxhighlight lang='python'></nowiki> instead of using the usual HTML tag <nowiki><pre></nowiki>.
* See example and other possible tags : [[Raw_Code_Download| Wikitext for Raw Code Download]]
 
Note : A new script engine is currently being integrated into Scribus. The next steps will be to get the script engine to work (should already be ok), get the editor to work, revise the structure of the API, add new functions to the API and mostly : port scripts to the new scripter. See [[Scripter Architecture|Scripter NG non-complete documentation about architecture]]


== Pure Python Functions ==
== Pure Python Functions ==
Line 55: Line 48:


===Iterate over all elements on a page===
===Iterate over all elements on a page===
<pre>
<syntaxhighlight lang='python'>
page = 1
page = 1
pagenum = scribus.pageCount()
pagenum = scribus.pageCount()
Line 65: Line 58:
         // do something
         // do something
     page += 1
     page += 1
</pre>
</syntaxhighlight>


===Get content like text from a frame===
===Get content like text from a frame===
<pre>
<syntaxhighlight lang='python'>
content = []
content = []
d = scribus.getPageItems()
d = scribus.getPageItems()
Line 79: Line 72:
         elif (item[1] == 2):
         elif (item[1] == 2):
             imgname = scribus.getImageFile(item[0])
             imgname = scribus.getImageFile(item[0])
</pre>
</syntaxhighlight>


ITEM TYPE
ITEM TYPE
Line 96: Line 89:


From Scribus User http://meiradarocha.jor.br  Mailinglist Feb. 2012
From Scribus User http://meiradarocha.jor.br  Mailinglist Feb. 2012
<pre>
<syntaxhighlight lang='python'>
d = dir(scribus)
d = dir(scribus)
for j in d:
for j in d:
Line 114: Line 107:
           exec 'print repr('+j+')\n'
           exec 'print repr('+j+')\n'
       else:
       else:
           print '\FUNCTION:\n'+j+'\n\nSINTAX:'
           print '\nFUNCTION:\n'+j+'\n\nSINTAX:'
           print res
           print res
   except: pass
   except: pass
</pre>
</syntaxhighlight>


==Image Manipulation==
==Image Manipulation==
Line 124: Line 117:


==Beginners Scripts==
==Beginners Scripts==
{| cellpadding=5px |
{| cellpadding=5px | borders=1px
! Link to Script !! Scripter commands demonstrated
! Script (w/ Screenshot) !! Scripter commands demonstrated
|-
|-
| width=390px |
| width=390px |<center>[[Elementary Rectangle]]</center> [[Image:Elementary_rectangle.png|frame|link=Elementary Rectangle|200x300px|center|alt=simple rectangle made with scribus python script|Elementary Rectangle generated from python]]
* [[Elementary Rectangle]]
|newDocument, createRect, setCornerRadius, setLineWidth, setFillColor, setLineColor, saveDocAs  
| newDocument, createRect, setCornerRadius, setLineWidth, setFillColor, setLineColor, saveDocAs
|-
|-
|
| width=390px |<center>[[Drawing Circles with Radii]]</center> [[Image:myCircles.png|frame|link=Drawing Circles with Radii|200x300px|center|alt=Drawing Circles w/ Radii made with scribus python script|Drawing Circles with Radii generated from python]]
* [[Drawing Lines and Python "For loops"]]
| newDocument, createLine, setLineWidth, setLineColor, setFillShade, createRect, saveDocAs
|-
|
* [[Drawing Circles with Radii]]
| newDocument, createLine, setLineWidth, setLineColor, zoomDocument, saveDocAs
| newDocument, createLine, setLineWidth, setLineColor, zoomDocument, saveDocAs
|-
|-
|
| width=390px |<center>[[Making a dot gradient]]</center> [[Image:DotGradient.png|frame|link=Making a dot gradient|200x300px|center|alt=Making a dot gradient made with scribus python script|Making a dot gradient generated from python]]
* [[Making a dot gradient]]
| newDocument, createEllipse, setLineWidth, setFillColor, setFillShade, saveDocAs, currentPage, setHGuides, messageBox, statusMessage, progressReset
| newDocument, createEllipse, setLineWidth, setFillColor, setFillShade, saveDocAs, currentPage, setHGuides, messageBox, statusMessage, progressReset
|-
|-
|
| width=390px |<center>[[Adding 'DRAFT' to a document]]</center> [[Image:Draft_example.png|frame|link=Adding 'DRAFT' to a document|200x300px|center|alt=Adding 'DRAFT' to a document made with scribus python script|Adding 'DRAFT' to a document generated from python]]
* [[Adding 'DRAFT' to a document]]
| haveDoc, createLayer, getActiveLayer, setActiveLayer, createText, setUnit, setText, setTextColor, setFontSize, rotateObject
| haveDoc, createLayer, getActiveLayer, setActiveLayer, createText, setUnit, setText, setTextColor, setFontSize, rotateObject
|-
|-
|
|
Line 161: Line 146:
|
|
* [[Bleed, create markers and export a document to pdf]]
* [[Bleed, create markers and export a document to pdf]]
|-
|
* [[Drawing Lines and Python "For loops"]]
| newDocument, createLine, setLineWidth, setLineColor, setFillShade, createRect, saveDocAs
|-
|-
|
|
Line 177: Line 166:
| width=550px| haveDoc, createLine, setLineWidth, setLineColor, setFillColor, createText, setFont, setFontSize, setTextAlignment, valueDialog, messageBox, docChanged
| width=550px| haveDoc, createLine, setLineWidth, setLineColor, setFillColor, createText, setFont, setFontSize, setTextAlignment, valueDialog, messageBox, docChanged
|-
|-
|
| createColor(),
* [[A Standard Form with Barcodes and Custom Entries]]
* [[A Standard Form with Barcodes and Custom Entries]]
| newDoc, createLine, setLineWidth, setLineColor, setFillColor, createLayer, setActiveLayer, createText, setFont, setFontSize, setTextAlignment, selectText, setTextDistances, valueDialog, messageBox
| newDoc, createLine, setLineWidth, setLineColor, setFillColor, createLayer, setActiveLayer, createText, setFont, setFontSize, setTextAlignment, selectText, setTextDistances, valueDialog, messageBox
Line 268: Line 257:
* [[copyObject() and pasteObject()]]
* [[copyObject() and pasteObject()]]
| haveDoc, selectionCount, messageBox, valueDialog, getSelectedObject, pageCount, currentPage, gotoPage. Also shows use of Python split function for parsing the input from valueDialog. copyObject and pasteObject are new commands that you will only have once you follow the directions to install them into your svn directory and rebuild Scribus.
| haveDoc, selectionCount, messageBox, valueDialog, getSelectedObject, pageCount, currentPage, gotoPage. Also shows use of Python split function for parsing the input from valueDialog. copyObject and pasteObject are new commands that you will only have once you follow the directions to install them into your svn directory and rebuild Scribus.
|-
|
* [[Convert RGB imported colors to CMYK]]
| getColors(), defineColor(), replaceColor(), deleteColor()
|-
|
* [[Convert all colors to CMYK]]
| getColors(), defineColor(), replaceColor(), deleteColor()
|-
|
|-
|}
|}


Line 277: Line 277:
* [[Enlarge2Page]] - Enlarge an object to the size of the page.
* [[Enlarge2Page]] - Enlarge an object to the size of the page.
* [[Making Guides at an Object's Borders]]
* [[Making Guides at an Object's Borders]]
* [[Date Setting by Script]]
* [[Using the new applyMasterPage() command]]


==Full functional scripts==
==Full functional scripts==
Line 293: Line 293:
* [[Image crop, resize and color conversion GUI]]
* [[Image crop, resize and color conversion GUI]]
* [[Apply basic ligatures to a document]]
* [[Apply basic ligatures to a document]]
* [[Import CSV Data]]
* [[Automatic story formatting]]
* [[Clean-up the imported text based on the Slovak typographic rules]]


==Scripting new Scribus' functions==
==Scripting new Scribus' functions==
Line 308: Line 311:


* [[Known Scripter Issues]]
* [[Known Scripter Issues]]
[[Scrambling Text]]


= Other =
= Other =
Line 315: Line 320:
* [[Printing_4-up_tickets_to_hard_copy_printer]] Shows a) automatic numbering in text boxes and b) hard-copy printing from script
* [[Printing_4-up_tickets_to_hard_copy_printer]] Shows a) automatic numbering in text boxes and b) hard-copy printing from script
* [[Using createParagraphStyle]]
* [[Using createParagraphStyle]]
* Alessandro Rimoldi's blog series on scripter functions - [http://www.graphicslab.org/Blog/Blog a_l_e's blog]

Revision as of 21:00, 5 February 2015

Other languages: Polski (pl) Portuguese (pt_BR)

Scripter

Here ist documentation about the current scripting component in Scribus:

  • Scripter API -- Routines which can be used in scripts to control Scribus
  • Databases -- Scripts can interact with database software like MySQL or SQLite

This wiki is capable of letting users download raw code embedded into the pages and have it appear syntax highlighted.

  • So as to cite python script code with proper syntax hilight, use the following tag <syntaxhighlight lang='python'> instead of using the usual HTML tag <pre>.
  • See example and other possible tags : Wikitext for Raw Code Download

Note : A new script engine is currently being integrated into Scribus. The next steps will be to get the script engine to work (should already be ok), get the editor to work, revise the structure of the API, add new functions to the API and mostly : port scripts to the new scripter. See Scripter NG non-complete documentation about architecture

Pure Python Functions

The open() function is a pure python function and does not involve any Scribus code. Here are some pages with advices on how to handle unicode file names in python:

- http://docs.python.org/tutorial/inputoutput.html - http://www.evanjones.ca/python-utf8.html - http://boodebr.org/main/python/all-about-python-and-unicode

The string returned by the Scribus fileDialog() function is always Unicode UTF-8 encoded.

If file is not closed after python error within Scribus: This is up to you to handle python exceptions, Scribus cannot do that in your place

Script snippets

Needs some snippets

This section contains snippets you can use to create your own scripts.

It features:

  • reading a file
  • updating a status bar
  • selecting a frame
  • pausing the screen update

Script Template

Here is a script template with all setups. Use it as a starting point for writing your own script, fill in your application specific code. script template main(). There is also a template called boilerplate.py within Scribus Script directory.

Iterate over all elements on a page

page = 1
pagenum = scribus.pageCount()
content = []
while (page <= pagenum):
    scribus.gotoPage(page)
    d = scribus.getPageItems()
    for item in d:
        // do something
    page += 1

Get content like text from a frame

content = []
d = scribus.getPageItems()
for item in d:
    if (item[1] == 4):
        contents = scribus.getAllText(item[0])
        if (contents in content):
            contents = 'Duplication, perhaps linked-to frame'
            content.append(contents)
        elif (item[1] == 2):
            imgname = scribus.getImageFile(item[0])

ITEM TYPE

  • ItemType1 = 1,
  • ImageFrame = 2,
  • ItemType3 = 3,
  • TextFrame = 4,
  • Line = 5,
  • Polygon = 6,
  • PolyLine = 7,
  • PathText = 8,
  • LatexFrame = 9,
  • Multiple = 99

Auto-Output all Scripter Commands

From Scribus User http://meiradarocha.jor.br Mailinglist Feb. 2012

d = dir(scribus)
for j in d:
   try:
       exec 'res = '+j+'.__doc__'
       if res[0:5] == 'float':
           print '\nCONSTANT:\n',j,'\nVALUE: float'
           exec 'print '+j+'\n'
       elif res[0:5] == 'int(x':
           print '\nCONSTANT:\n',j,'\nVALUE: integer'
           exec 'print '+j+'\n'
       elif res[0:5] == 'tuple':
           print '\nTUPLE:\n',j,'\nVALUE:'
           exec 'print repr('+j+')\n'
       elif res[0:4] == 'str(':
           print '\nSTRING:\n',j,'\nVALUE:'
           exec 'print repr('+j+')\n'
       else:
           print '\nFUNCTION:\n'+j+'\n\nSINTAX:'
           print res
   except: pass

Image Manipulation

  • Objects: Images -- Example Scripts that manipulate images in a Scribus document

Beginners Scripts

Script (w/ Screenshot) Scripter commands demonstrated
Elementary Rectangle
simple rectangle made with scribus python script
Elementary Rectangle generated from python
newDocument, createRect, setCornerRadius, setLineWidth, setFillColor, setLineColor, saveDocAs
Drawing Circles with Radii
Drawing Circles w/ Radii made with scribus python script
Drawing Circles with Radii generated from python
newDocument, createLine, setLineWidth, setLineColor, zoomDocument, saveDocAs
Making a dot gradient
Making a dot gradient made with scribus python script
Making a dot gradient generated from python
newDocument, createEllipse, setLineWidth, setFillColor, setFillShade, saveDocAs, currentPage, setHGuides, messageBox, statusMessage, progressReset
Adding 'DRAFT' to a document
Adding 'DRAFT' to a document made with scribus python script
Adding 'DRAFT' to a document generated from python
haveDoc, createLayer, getActiveLayer, setActiveLayer, createText, setUnit, setText, setTextColor, setFontSize, rotateObject
haveDoc, valueDialog, getUnit, setUnit, getPageSize, getPageMargins,
defineColor, createEllipse, setLineWidth, setLineColor, setFillColor, createLine, getPageSize, createRect
valueDialog, getColor, getLayers, createLayer, setActiveLayer, setHGuides, setVGuides, getHGuides, getVGuides, createText, setTextColor, insertText, setFontSize, setLineSpacing, defineColor, createRect, groupObjects, createLine, setLineColor, setLineWidth, createEllipse, haveDoc, messageBox
newDocument, createLine, setLineWidth, setLineColor, setFillShade, createRect, saveDocAs
haveDoc, getUnit, setUnit, getPageSize, getPageMargins, setMargins, messageBox, statusMessage, progressReset
haveDoc, setUnit, valueDialog, createLine, setLineWidth, setLineColor, setFillColor
haveDoc, createLine, setLineWidth, setLineColor, setFillColor, createText, setFont, setFontSize, setTextAlignment, valueDialog, messageBox, docChanged
createColor(), newDoc, createLine, setLineWidth, setLineColor, setFillColor, createLayer, setActiveLayer, createText, setFont, setFontSize, setTextAlignment, selectText, setTextDistances, valueDialog, messageBox
haveDoc, valueDialog, createLine, setLineWidth, setLineColor, setFillColor, createText, setTextColor, setText, setTextAlignment, setFont, setFontSize, rotateObject
haveDoc, valueDialog, setUnit, createLine, setLineWidth, setLineColor, setFillColor, createText, setTextColor, setText, setTextAlignment, setFont, setFontSize
fileDialog, haveDoc, setUnit, valueDialog, createLine, setLineWidth, setLineColor, setFillColor, createPolyLine
valueDialog, messageBox, haveDoc, importSVG – much of the script involves mathematical calculations
getPageSize, fileDialog, createImage, setScaleImageToFrame, setFillColor, setLineColor, getImageScale, sizeObject, haveDoc, messageBox
This is an old script (Scribus 1.3.3.3), so be sure to check the precise names of commands. If you find errors, let us know or edit the wiki page to correct.
messageBox, createLine, setLineColor, haveDoc, statusMessage, progressReset
There is a minor usage of Scribus commands here, but it does show how to set up a Tkinter dialog for multiple variable entry.
newDoc, newPage, createText, setText, setTextAlignment, setFont, setFontSize
This is almost a script fragment even though it could work on its own. What it shows is the basic operation to import information from a simple structured text file and incorporate into a document. Could be adapted for mail merge, for example.
haveDoc, selectionCount, getSelectedObject, setScaleImageToFrame, getImageScale, scaleImage, docChanged
not sure if this script works
haveDoc, selectionCount, getSelectedObject, setProperty, moveObject, docChanged
replaceColor, docChanged
This is a "script-let" really, but quickly shows how to change or delete colors in a document. No checking for errors.
haveDoc, fileDialog, messageBox, pageCount, getPageItems, gotoPage, getAllText, getImageFile
valueDialog, messageBox
This is a utility that just happens to run in Scribus, using the valueDialog and messageBox to do what the title says.
getPageSize, getPageMargins, createText, setFontSize, setTextAlignment, insertText, getColorNames, statusMessage, progressTotal, getColor, progressSet, haveDoc, openDoc, fileDialog, messageBox, getColorsFromDocument, newDocument, setUnit, deleteColor, defineColor, valueDialog, newPage, createRect, setFillColor, setLineColor
messageBox, valueDialog
haveDoc, selectionCount, messageBox, valueDialog, getSelectedObject, pageCount, currentPage, gotoPage. Also shows use of Python split function for parsing the input from valueDialog. copyObject and pasteObject are new commands that you will only have once you follow the directions to install them into your svn directory and rebuild Scribus.
getColors(), defineColor(), replaceColor(), deleteColor()
getColors(), defineColor(), replaceColor(), deleteColor()

Basic scripts

Scripts which give you ideas how you can solve your tasks.

Full functional scripts

Scripts that are ready for achieving specific tasks

Scripting new Scribus' functions

Scripts which sketch new features which may be included in future releases of Scribus

Extension scripts and PyQt

Python issues

Scrambling Text

Other

Pages in category "Scripts"

The following 103 pages are in this category, out of 103 total.