Creating a TOC with Scripter: Difference between revisions
No edit summary |
No edit summary |
||
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
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)