Creating a TOC with Scripter: Difference between revisions
No edit summary |
|||
Line 34: | Line 34: | ||
elif (item[1] == 2): | elif (item[1] == 2): | ||
rawname = item[0] | rawname = item[0] | ||
newname = rawname.replace('_',' ') | newname = rawname.replace('_',' ') # where we switch underline to space | ||
T.append(newname + ' (image)' + '\t' + strpage + '\n') | T.append(newname + ' (image)' + '\t' + strpage + '\n') | ||
page += 1 | page += 1 |
Revision as of 02:47, 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)