Creating a TOC with Scripter
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)