Creating a TOC with Scripter: Difference between revisions
Line 56: | Line 56: | ||
</pre> | </pre> | ||
===Using the Script=== | ===Using the Script=== | ||
{| | |||
|[[File:CreateTOC2.png]] | |||
| | |||
{| | |||
|Here is a simple artificial document, with sample text and an image frame, copied four times, then arbitrary images loaded. I've changed the frame names as we'll see. | |||
We simply run this script, which asks for a filename to store our text for the table of contents. Next, make a text frame, then using ''Get Text'', load this text, and you get what you see below to the left. | |||
|- | |||
{| | |||
|[[File:CreateTOC.png]] | |||
| | |||
|[[File:CreateTOC1.png]] | |||
|} | |||
|} | |||
|} |
Revision as of 03:04, 7 August 2011
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('_',' ') # where we switch underline to space 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)