Difference between revisions of "Creating a TOC with Scripter"

From Scribus Wiki
Jump to: navigation, search
Line 6: Line 6:
  
 
To use this script, although it's not a requirement, it is useful to rename the frames to something useful in a TOC. One problem with this is that you will find that, at least when you edit the frame name, you cannot have spaces, so instead of ''First Article'' we'll use ''First_Article'', substituting an underline for the space – don't worry, we take care of that in the script.
 
To use this script, although it's not a requirement, it is useful to rename the frames to something useful in a TOC. One problem with this is that you will find that, at least when you edit the frame name, you cannot have spaces, so instead of ''First Article'' we'll use ''First_Article'', substituting an underline for the space – don't worry, we take care of that in the script.
 +
===createTOC.py===
 +
<pre>
 +
#!/usr/bin/env python
 +
# File: createTOC.py - Creates a Table of Contents from text
 +
# and image frames, using frame names as the reference
 +
# This version 2011.08.06
 +
# 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.
 +
 +
import scribus
 +
 +
def exportText(textfile):
 +
    page = 1
 +
    pagenum = scribus.pageCount()
 +
    T = []
 +
    while (page <= pagenum):
 +
        scribus.gotoPage(page)
 +
        d = scribus.getPageItems()
 +
        strpage = str(page)
 +
        for item in d:
 +
            if (item[1] == 4):
 +
                rawname = item[0]
 +
                newname = rawname.replace('_',' ')
 +
                T.append(newname + '\t'+ strpage + '\n')
 +
            elif (item[1] == 2):
 +
                rawname = item[0]
 +
                newname = rawname.replace('_',' ')
 +
                T.append(newname + ' (image)' + '\t' + strpage + '\n')
 +
        page += 1
 +
    output_file = open(textfile,'w')
 +
    output_file.writelines(T)
 +
    output_file.close()
 +
    endmessage = textfile + ' was created'
 +
    scribus.messageBox("Finished", endmessage,icon=0,button1=1)
 +
if scribus.haveDoc():
 +
    textfile = scribus.fileDialog('Enter name of file to save to', filter='Text Files (*.txt);;All Files (*)')
 +
    try:
 +
        if textfile == '':
 +
            raise Exception
 +
        if (textfile[-4:] != '.txt'):
 +
            textfile = textfile + '.txt'
 +
        exportText(textfile)
 +
    except Exception, e:
 +
        print e
 +
else:
 +
    scribus.messageBox('Export Error', 'You need a Document open, and a frame selected.', icon=0, button1=1)
 +
</pre>

Revision as of 02:45, 7 August 2011

This article is part of the Scripts series.

While working on some documentation for generating a TOC in something of an automatic way with Scribus, it seemed to me that this seems rather complex, and I wondered if there might be a better way to do this with Scripter.

I had already written a script that could analyze the content of a document and extract text and filenames of the images in the file, page by page. What follows is a modification of that script for creating a table of contents.

To use this script, although it's not a requirement, it is useful to rename the frames to something useful in a TOC. One problem with this is that you will find that, at least when you edit the frame name, you cannot have spaces, so instead of First Article we'll use First_Article, substituting an underline for the space – don't worry, we take care of that in the script.

createTOC.py

#!/usr/bin/env python
# File: createTOC.py - Creates a Table of Contents from text
# and image frames, using frame names as the reference
# This version 2011.08.06
# 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.

import scribus

def exportText(textfile):
    page = 1
    pagenum = scribus.pageCount()
    T = []
    while (page <= pagenum):
        scribus.gotoPage(page)
        d = scribus.getPageItems()
        strpage = str(page)
        for item in d:
            if (item[1] == 4):
                rawname = item[0]
                newname = rawname.replace('_',' ')
                T.append(newname + '\t'+ strpage + '\n')
            elif (item[1] == 2):
                rawname = item[0]
                newname = rawname.replace('_',' ')
                T.append(newname + ' (image)' + '\t' + strpage + '\n')
        page += 1
    output_file = open(textfile,'w')
    output_file.writelines(T)
    output_file.close()
    endmessage = textfile + ' was created'
    scribus.messageBox("Finished", endmessage,icon=0,button1=1)
if scribus.haveDoc():
    textfile = scribus.fileDialog('Enter name of file to save to', filter='Text Files (*.txt);;All Files (*)')
    try:
        if textfile == '':
            raise Exception
        if (textfile[-4:] != '.txt'):
            textfile = textfile + '.txt'
        exportText(textfile)
    except Exception, e:
        print e
else:
    scribus.messageBox('Export Error', 'You need a Document open, and a frame selected.', icon=0, button1=1)