Category:Scripts: Difference between revisions

From Scribus Wiki
Jump to navigation Jump to search
 
(99 intermediate revisions by 13 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 =
Here is documentation about the current scripting component in 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
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 ==


= Scripter =
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:


A new script engine is currently being integrated into Scribus. The next steps will be:
- http://docs.python.org/tutorial/inputoutput.html
* get the script engine to work (should already be ok)
- http://www.evanjones.ca/python-utf8.html
* get the editor to work (i'm stucked there)
- http://boodebr.org/main/python/all-about-python-and-unicode
* revise the structure of the API
* add new functions to the API


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


* [[Scripter Architecture]]
If file is not closed after python error within Scribus:
* [[Scripter API]]
This is up to you to handle python exceptions, Scribus cannot do that in your place
* [[Scripter/Images| Objects: Images]]
* [[Scripter/Databases| Databases]]
* Alessandro Rimoldi's blog series on scripter functions - [http://www.graphicslab.org/Blog/Blog a_l_e's blog]


== Script snippets ==
== Script snippets ==
<div style="border:2px solid lightgrey;padding:2px">Needs some snippets</div>


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


It will feature:
It features:


* reading a file
* reading a file
Line 28: Line 43:
* pausing the screen update
* 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.
[[Scripter/Snippet/Main| script template main()]]. There is also a template called [[boilerplate.py]] within Scribus Script directory.
You might also check out [[scriptmaker.py]], a Python script to run outside of Scribus to make the beginnings of a script that only runs inside of Scribus!
==[[Troubleshooting Scripts]]==
The content is on another page, since this one has gotten a bit out of control in terms of its size.
===Iterate over all elements on a page===
<syntaxhighlight lang='python'>
page = 1
pagenum = scribus.pageCount()
content = []
while (page <= pagenum):
    scribus.gotoPage(page)
    d = scribus.getPageItems()
    for item in d:
        // do something
    page += 1
</syntaxhighlight>
===Get content like text from a frame===
<syntaxhighlight lang='python'>
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])
</syntaxhighlight>
ITEM TYPE
*    ItemType1 = 1,
*    ImageFrame = 2,
*    ItemType3 = 3,
*    TextFrame = 4,
*    Line = 5,
*    Polygon = 6,
*    PolyLine = 7,
*    PathText = 8,
*    LatexFrame = 9,
*    Multiple = 99
=== Get some text frame page number===
Parsing the document's .sla file (which is just XML), here's the baseic gist to get the page number for a frame named "foo":
<syntaxhighlight lang='python'>
import xml.etree.ElementTree as ET
tree = ET.parse(scribus.getDocName()) # in a real script
# tree = ET.parse(getDocName())      # in the console
root = tree.getroot()
frame = "foo"
element = root.find(f'./DOCUMENT/PAGEOBJECT[@ANNAME="{frame}"]')
page_number = element.get("OwnPage")
</syntaxhighlight>
For this to work, the object has to manually have been given a name, not just leaving the auto-generated one, otherwise it's not stored in the .sla
file.
===Auto-Output all Scripter Commands===
From Scribus User http://meiradarocha.jor.br  Mailinglist Feb. 2012
The output for this script is collected in [[Automatic Scripter Commands list]].
<syntaxhighlight lang='python'>
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\nSYNTAX:'
          print res
  except: pass
</syntaxhighlight>
==Image Manipulation==


* [[Scripter/Snippet/Main| main()]]
* [[Scripter/Images| Objects: Images]] -- Example Scripts that manipulate images in a Scribus document


==Beginners Scripts==
==[[Beginners Scripts]]==
{| cellpadding=5px |
This content has been moved to a separate page to reduce the enormity of this one.
! Link to Script !! Scripter commands demonstrated
|-
| width=390px |
* [[Elementary Rectangle]]
| newDoc, createRect, setCornerRadius, setLineWidth, setFillColor, setLineColor, saveDocAs
|-
|
* [[Drawing Lines and Python "For loops"]]
| newDoc, createLine, setLineWidth, setLineColor, setFillShade, createRect, saveDocAs
|-
|
* [[Making a dot gradient]]
| newDoc, createEllipse, setLineWidth, setFillColor, setFillShade, saveDocAs, currentPage, setHGuides, messageBox, statusMessage, progressReset
|-
|
* [[Adding 'DRAFT' to a document]]
|  haveDoc, createLayer, getActiveLayer, setActiveLayer, createText, setUnit, setText, setTextColor, setFontSize, rotateObject
|-
|
* [[Making layout grid with guides]]
| haveDoc, valueDialog, getUnit, setUnit, getPageSize, getPageMargins,
|-
|
* [[Creating Markers for positioning and cutting]]
| defineColor, createEllipse, setLineWidth, setLineColor, setFillColor, createLine, getPageSize, createRect
|-
|
* [[Creating Markers - another version]]
| valueDialog, getColor, getLayers, createLayer, setActiveLayer, setHGuides, setVGuides, getHGuides, getVGuides, createText, setTextColor, insertText, setFontSize, setLineSpacing, defineColor, createRect, groupObjects, createLine, setLineColor, setLineWidth, createEllipse, haveDoc, messageBox
|-
|
* [[Bleed, create markers and export a document to pdf]]
|-
|
* [[Making margins in Gutemberg way]]
| haveDoc, getUnit, setUnit, getPageSize, getPageMargins, setMargins, messageBox, statusMessage, progressReset
|-
|
* [[Generate a ten page layout with three columns on each page]]
|-
|
* [[Generating a Postnet barcode]]
| haveDoc, setUnit, valueDialog, createLine, setLineWidth, setLineColor, setFillColor
|-
|
* [[Generating a Code39 Barcode]]
| width=550px| haveDoc, createLine, setLineWidth, setLineColor, setFillColor, createText, setFont, setFontSize, setTextAlignment, valueDialog, messageBox, docChanged
|-
|
* [[A Standard Form with Barcodes and Custom Entries]]
| newDoc, createLine, setLineWidth, setLineColor, setFillColor, createLayer, setActiveLayer, createText, setFont, setFontSize, setTextAlignment, selectText, setTextDistances, valueDialog, messageBox
|-
|
* [[Automatically Creating a Graph]]
| haveDoc, valueDialog, createLine, setLineWidth, setLineColor, setFillColor, createText, setTextColor, setText, setTextAlignment, setFont, setFontSize, rotateObject
|-
|
* [[Creating a Graph, Part 2]]
| haveDoc, valueDialog, setUnit, createLine, setLineWidth, setLineColor, setFillColor, createText, setTextColor, setText, setTextAlignment, setFont, setFontSize
|-
|
* [[Advanced Graphing]]
| fileDialog, haveDoc, setUnit, valueDialog, createLine, setLineWidth, setLineColor, setFillColor, createPolyLine
|-
|
* [[Making a Pie Chart]]
| valueDialog, messageBox, haveDoc, importSVG &ndash; ''much of the script involves mathematical calculations''
|-
|
* [[Import an image in the way office-programs do]]
| getPageSize, fileDialog, createImage, setScaleImageToFrame, setFillColor, setLineColor, getImageScale, sizeObject, haveDoc, messageBox<br>''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.''
|-
|
* [[Drawing a grid]]
| messageBox, createLine, setLineColor, haveDoc, statusMessage, progressReset<br>''There is a minor usage of Scribus commands here, but it does show how to set up a Tkinter dialog for multiple variable entry.''
|-
|
* [[Importing addresses from a text file]]
| newDoc, newPage, createText, setText, setTextAlignment, setFont, setFontSize<br>''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.''
|-
|
* [[Scale an Image to Fill a Frame Proportionally]]
| haveDoc, selectionCount, getSelectedObject, setScaleImageToFrame, getImageScale, scaleImage, docChanged
|-
|
* [[Align an Image in its Frame]]
|-
|
* [[Image Wizard: Scale and Align an Image]]
|-
|
* [[Image Wizard Advanced]]
|-
|
* [[Discovering an Item's Properties]]
| ''not sure if this script works''
|-
|
* [[Un-Flip all Selected Items]]
| haveDoc, selectionCount, getSelectedObject, setProperty, moveObject, docChanged
|-
|
* [[Remove Magenta Color]]
| replaceColor, docChanged<br>''This is a "script-let" really, but quickly shows how to change or delete colors in a document. No checking for errors.''
|-
|
* [[Extracting All Text from a Document]]
| haveDoc, fileDialog, messageBox, pageCount, getPageItems, gotoPage, getAllText, getImageFile
|-
|
* [[Convert RGB value to Hex]]
| valueDialog, messageBox<br>''This is a utility that just happens to run in Scribus, using the valueDialog and messageBox to do what the title says.''
|-
|
* [[Color Chart]]
| 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
|-
|
* [[Book Spine Calculator]]
| messageBox, valueDialog
|-
|
* [[create tables out of csv data]]
|-
|
* [[Reduce the size of Scribus generated PDFs]]
|-
|
* [[Convert Typewriter Quotes to Typographic Quotes]]
|-
|
* [[Autoquote2]] &ndash; a new and improved Autoquote.py
|}


==Basic scripts==
==Basic scripts==
Line 172: Line 149:


* [[Poor man's mail merge]]
* [[Poor man's mail merge]]
* [[Enlarge2Page]] - Enlarge an object to the size of the page.
* [[Making Guides at an Object's Borders]]
* [[Using the new applyMasterPage() command]]
* [[Swap Images]]
* [[Creating Text Frames for Image Captions]]
* [[Horizontal Rule over Text Frame]]
* [[Creating an Object-sized Document]]
* [[Translation helper]]


==Full functional scripts==
==Full functional scripts==


Scripts that are ready for achieving specific tasks
Scripts that are ready for achieving specific tasks
 
{|
|
* [[Export all text|Export all text]] from a Scribus file
* [[Export all text|Export all text]] from a Scribus file
* [[Export list of frames and page numbers]]
* [[Script Resize selected objects|Resize selected objects]]
* [[Script Resize selected objects|Resize selected objects]]
* [[formatxml|Import xml and apply styles]]
* [[formatxml|Import XML and apply styles]]
* [[align_to_left_page_margin|Align to the left page margin]] (after adding a new page in a double page document)
* [[align_to_left_page_margin|Align to the left page margin]] (after adding a new page in a double page document)
* [[Bullets]]. Make bulleted list.
* [[Bullets]] Make bulleted list
* [[Bullets_and_numbered_lists | Bullets and numbered lists]]
* [[Bullets_and_numbered_lists|Bullets and numbered lists]]
* [[Scribus_Generator | Scribus Generator]]. Extend Scribus with Mail Merge functionality.
* [[Scribus_Generator|Scribus Generator]] Extend Scribus with Mail Merge functionality
* [[Image crop, resize and CMYK conversion. Save and reload in TIFF format]].
|
* [[CalendarWizard]]
* [[Image crop, resize and CMYK conversion. Save and reload in TIFF format]]
* [[Image crop, resize and color conversion GUI]]
* [[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 191: Line 186:


* [[Adjust a text frame to fit its content|Adjust the text frame size according to various factors]]
* [[Adjust a text frame to fit its content|Adjust the text frame size according to various factors]]
* [https://github.com/JLuc/scribus-project-manager Project manager] : create a book out of several parts documents, manage common format and styles, search across parts...


== Extension scripts and PyQt ==
== Extension scripts and PyQt ==
Line 206: Line 203:
* [[Imagemagick Imposition]] &ndash; a bash script doing simple imposition of PNG files exported from Scribus
* [[Imagemagick Imposition]] &ndash; a bash script doing simple imposition of PNG files exported from Scribus
* [[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]]
* [[Text and Text Manipulation]]
* Alessandro Rimoldi's blog series on scripter functions - [http://www.graphicslab.org/Blog/Blog a_l_e's blog]
* [[Windows Full Python Integration]]

Latest revision as of 08:43, 14 April 2022

Other languages: Polski (pl) Portuguese (pt_BR)

Scripter

Here is 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.

You might also check out scriptmaker.py, a Python script to run outside of Scribus to make the beginnings of a script that only runs inside of Scribus!

Troubleshooting Scripts

The content is on another page, since this one has gotten a bit out of control in terms of its size.

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


Get some text frame page number

Parsing the document's .sla file (which is just XML), here's the baseic gist to get the page number for a frame named "foo":

import xml.etree.ElementTree as ET
tree = ET.parse(scribus.getDocName()) # in a real script
# tree = ET.parse(getDocName())       # in the console
root = tree.getroot()
frame = "foo"
element = root.find(f'./DOCUMENT/PAGEOBJECT[@ANNAME="{frame}"]')
page_number = element.get("OwnPage")

For this to work, the object has to manually have been given a name, not just leaving the auto-generated one, otherwise it's not stored in the .sla file.

Auto-Output all Scripter Commands

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

The output for this script is collected in Automatic Scripter Commands list.

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\nSYNTAX:'
           print res
   except: pass

Image Manipulation

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

Beginners Scripts

This content has been moved to a separate page to reduce the enormity of this one.

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

  • Project manager : create a book out of several parts documents, manage common format and styles, search across parts...

Extension scripts and PyQt

Python issues

Other

Pages in category "Scripts"

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