Changeset 4167
- Timestamp:
- 08/21/08 12:30:40 (3 months ago)
- Files:
-
- tracwikitopdfplugin/0.11/docs/trac.ini.example (modified) (4 diffs)
- tracwikitopdfplugin/0.11/setup.py (modified) (1 diff)
- tracwikitopdfplugin/0.11/TracWikiToPdfPlugin-2.1-py2.4.egg (added)
- tracwikitopdfplugin/0.11/wikitopdf/formats.py (modified) (4 diffs)
- tracwikitopdfplugin/0.11/wikitopdf/web_ui.py (modified) (4 diffs)
- tracwikitopdfplugin/0.11/wikitopdf/wikitopdf.py (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
tracwikitopdfplugin/0.11/docs/trac.ini.example
r4160 r4167 1 [components] 2 wikitopdf.* = enabled 3 1 4 [wikitopdf] 5 # base_dir is the Apache DocumentRoot, It is need to get PDF files with images. 2 6 base_dir = /path/to/DocumentRoot 3 titlefile = /path/to/capa_file.html 7 8 # path to folder used to get a cover files. 9 pathtocover = /path/to/cover 4 10 5 11 [wikitopdf-admin] 12 # HTMLDOC options. See the link above. 6 13 size = A4 7 14 right = 1.5cm … … 10 17 bottom = 1.5cm 11 18 no-links = None 12 toctitle = Sum ário19 toctitle = Summary 13 20 numbered = None 14 21 linkstyle = plain … … 18 25 19 26 [wikitopdf-page] 27 # HTMLDOC options. See the link above. 20 28 size = A4 21 29 right = 1.5cm … … 28 36 footer = .r1 29 37 logoimage = /path/to/header-logo.png 38 tracwikitopdfplugin/0.11/setup.py
r4160 r4167 8 8 setup( 9 9 name = 'TracWikiToPdfPlugin', 10 version = '2. 1.1',10 version = '2.2', 11 11 packages = ['wikitopdf'], 12 12 package_data={ 'wikitopdf' : [ 'templates/*.cs', 'htdocs/js/*.js' ] }, tracwikitopdfplugin/0.11/wikitopdf/formats.py
r4160 r4167 23 23 24 24 from api import IWikiToPdfFormat 25 from wikitopdf import wiki_to_pdf, html_to_pdf 25 26 26 27 EXCLUDE_RES = [ … … 37 38 def wikitopdf_formats(self, req): 38 39 yield 'pdf', 'PDF' 39 # yield 'ps', 'PS'40 40 41 41 def process_wikitopdf(self, req, format, title, subject, pages, version, date, pdfname): … … 43 43 os.system("rm -f /tmp/tmp*wikitopdf") 44 44 45 # Dump all pages to HTML files46 files = [self._page_to_file('', req, p) for p in pages]45 # Dump all pages to HTML files 46 files = [self._page_to_file('', req, p) for p in pages] 47 47 48 48 #Setup the title and license pages 49 49 title_template = self.env.config.get('wikitopdf', 'pathtocover') + '/cover.html' 50 titlefile = self.get_titlepage(title_template, title, subject, date, version) 50 self.log.debug('WikiToPdf => DFG %s', title_template) 51 titlefile = title_template and self.get_titlepage(title_template, title, subject, date, version) or None 51 52 52 # File to write PDF to 53 pfile, pfilename = mkstemp('wikitopdf') 54 os.close(pfile) 53 # Prepare html doc arguments 54 codepage = self.env.config.get('trac', 'charset', 'iso-8859-1') 55 55 56 # Render 57 os.environ["HTMLDOC_NOCGI"] = 'yes' 58 codepage = self.env.config.get('trac', 'charset', 'iso-8859-1') 56 htmldoc_args = { 'book': '', 'format': 'pdf14', 'charset': codepage } 57 58 if titlefile: htmldoc_args['titlefile'] = titlefile 59 else: htmldoc_args['no-title'] = '' 59 60 60 htmldoc_format = {'pdf': 'pdf14', 'ps':'ps3'}[format] 61 htmldoc_args.update(dict(self.env.config.options('wikitopdf-admin'))) 61 62 62 htmldoc_args = { 'book': None, 'format': htmldoc_format, 'titlefile': titlefile, 'charset': codepage } 63 #render 64 out = html_to_pdf(self.env, htmldoc_args, files) 63 65 64 htmldoc_args.update(dict(self.env.config.options('wikitopdf-admin')))65 66 args_string = ' '.join(['--%s %s' % (arg, value or '') for arg, value67 in htmldoc_args.iteritems()])68 69 cmd_string = 'htmldoc %s %s -f %s'%(args_string, ' '.join(files), pfilename)70 71 self.log.info('WikiToPdf: Running %r', cmd_string)72 os.system(cmd_string.encode('latin-1'))73 74 out = open(pfilename, 'rb').read()75 76 66 # Clean up 77 os.unlink(pfilename) 78 for f in files: 79 os.unlink(f) 67 if titlefile: os.unlink(titlefile) 68 for f in files: os.unlink(f) 80 69 81 70 # Send the output … … 87 76 req.write(out) 88 77 raise RequestDone 78 89 79 90 def _page_to_file(self, header, req, pagename , text=None):80 def _page_to_file(self, header, req, pagename): 91 81 """Slight modification of some code from Alec's PageToPdf plugin.""" 92 82 93 hfile, hfilename = mkstemp('wikitopdf') 94 codepage = self.env.config.get('trac', 'charset', 'iso-8859-1') 95 83 # htmldoc doesn't support utf-8, we need to use some other input encoding 84 codepage = self.env.config.get('trac', 'charset', 'iso-8859-1') 96 85 base_dir = self.env.config.get('wikitopdf', 'base_dir') 97 86 87 page = wiki_to_pdf(WikiPage(self.env, pagename).text, self.env, req, base_dir, codepage) 88 89 hfile, hfilename = mkstemp('wikitopdf') 98 90 self.log.debug('WikiToPdf => Writting %s to %s using encoding %s', pagename, hfilename, codepage) 99 100 page = text 101 if text is None: 102 text = WikiPage(self.env, pagename).text 103 for r in EXCLUDE_RES: 104 text = r.sub('', text) 105 page = wiki_to_html(text, self.env, req).encode(codepage, 'replace') 106 107 self.log.debug('WikiToPdf => Page text is: %r', page) 108 109 imgpos = page.find('<img') 110 while imgpos != -1: 111 addrpos = page.find('src=', imgpos) 112 base_dir = base_dir.encode('ascii') 113 page = page[:addrpos+5] + base_dir + page[addrpos+5:] 114 imgpos = page.find('<img', addrpos) 115 116 page = page.replace('<img', '<img border="0"') 117 page = page.replace('raw-attachment', 'attachments') 118 page = page.replace('?format=raw','') 119 page = page.replace('<pre class="wiki">', '<table align="center" width="95%" border="1" bordercolor="#d7d7d7"><tr>' 120 + '<td bgcolor="#f7f7f7"><pre class="wiki">') 121 page = page.replace('</pre>', '</pre></td></tr></table>') 122 page = page.replace('<table class="wiki">', '<table class="wiki" border="1" width="100%">') 123 124 self.log.debug('WikiToPdf => Page change text is: %r', page) 125 126 meta = ('<meta http-equiv="Content-Type" content="text/html; charset=%s"/>' % codepage).encode(codepage) 127 os.write(hfile, '<html><head>' + meta + '</head><body>' + page + '</body></html>') 91 os.write(hfile, page) 128 92 os.close(hfile) 129 93 return hfilename 130 94 95 131 96 def get_titlepage(self, template_path, title, subject, version, date): 132 97 133 hfile, hfilename = mkstemp('wikitopdf')134 codepage = Mimeview(self.env).default_charset98 hfile, hfilename = mkstemp('wikitopdf') 99 codepage = Mimeview(self.env).default_charset 135 100 136 file_page = open(template_path, 'r') 137 string_page = file_page.read() 138 string_page = string_page.replace('#TITLE#', title) 139 string_page = string_page.replace('#SUBJECT#', subject) 140 string_page = string_page.replace('#VERSION#', version) 141 string_page = string_page.replace('#DATE#', date) 142 string_page = string_page.replace('#PATHTOCOVER#', self.env.config.get('wikitopdf', 'pathtocover')) 143 os.write(hfile, string_page) 144 os.close(hfile) 145 return hfilename 146 101 try: 102 file_page = open(template_path, 'r') 103 string_page = file_page.read() 104 string_page = string_page.replace('#TITLE#', title) 105 string_page = string_page.replace('#SUBJECT#', subject) 106 string_page = string_page.replace('#VERSION#', version) 107 string_page = string_page.replace('#DATE#', date) 108 string_page = string_page.replace('#PATHTOCOVER#', self.env.config.get('wikitopdf', 'pathtocover')) 109 except: 110 os.close(hfile) 111 return None 112 113 os.write(hfile, string_page) 114 os.close(hfile) 115 116 return hfilename 117 tracwikitopdfplugin/0.11/wikitopdf/web_ui.py
r4160 r4167 33 33 def get_htdocs_dirs(self): 34 34 from pkg_resources import resource_filename 35 return [('wikitopdf', resource_filename(__name__, 'htdocs'))]35 return [('wikitopdf', resource_filename(__name__, 'htdocs'))] 36 36 #return [] 37 37 … … 46 46 47 47 def post_process_request(self, req, template, data, content_type): 48 return template, data, content_type48 return template, data, content_type 49 49 50 50 def process_admin_request(self, req, cat, page, path_info): … … 63 63 rightpages = req.args.get('rightpages_all') 64 64 title = req.args.get('title').encode('latin-1') or self.env.project_name.encode('latin-1') 65 subject = req.args.get('subject').encode('latin-1')65 subject = req.args.get('subject').encode('latin-1') 66 66 date = req.args.get('date').encode('latin-1'); 67 67 version = req.args.get('version').encode('latin-1'); 68 toctitle = req.args.get('toctitle')69 req.session['wikitopdf_rightpages'] = rightpages68 toctitle = req.args.get('toctitle') 69 req.session['wikitopdf_rightpages'] = rightpages 70 70 rightpages = rightpages.split(',') 71 71 format = req.args.get('format') … … 86 86 req.hdf['wikitopdf.default_format'] = formats.iterkeys().next() 87 87 88 add_script(req, 'wikitopdf/js/admin_wikitopdf.js')88 add_script(req, 'wikitopdf/js/admin_wikitopdf.js') 89 89 90 90 return 'admin_wikitopdf.cs', None tracwikitopdfplugin/0.11/wikitopdf/wikitopdf.py
r4160 r4167 13 13 14 14 EXCLUDE_RES = [ 15 re.compile(r'\[\[PageOutline([^]]*)\]\]'),16 re.compile(r'\[\[TracGuideToc([^]]*)\]\]'),17 re.compile(r'----(\r)?$\n^Back up: \[\[ParentWiki\]\]', re.M|re.I)15 re.compile(r'\[\[PageOutline([^]]*)\]\]'), 16 re.compile(r'\[\[TracGuideToc([^]]*)\]\]'), 17 re.compile(r'----(\r)?$\n^Back up: \[\[ParentWiki\]\]', re.M|re.I) 18 18 ] 19 20 21 def wiki_to_pdf(text, env, req, base_dir, codepage): 22 23 #Remove exclude expressions 24 for r in EXCLUDE_RES: 25 text = r.sub('', text) 26 27 env.log.debug('WikiToPdf => Wiki intput for WikiToPdf: %r' % text) 28 29 page = wiki_to_html(text, env, req).encode(codepage, 'replace') 30 page = page.replace('raw-attachment', 'attachments') 31 page = page.replace('<img', '<img border="0"') 32 page = page.replace('?format=raw','') 33 page = page.replace('<pre class="wiki">', '<table align="center" width="95%" border="1" bordercolor="#d7d7d7">' 34 + '<tr><td bgcolor="#f7f7f7"><pre class="wiki">') 35 page = page.replace('</pre>', '</pre></td></tr></table>') 36 page = page.replace('<table class="wiki">', '<table class="wiki" border="1" width="100%">') 37 38 imgpos = page.find('<img') 39 40 while imgpos != -1: 41 addrpos = page.find('src=',imgpos) 42 base_dir = base_dir.encode('ascii') 43 page = page[:addrpos+5] + base_dir + page[addrpos+5:] 44 imgpos = page.find('<img', addrpos) 45 46 meta = ('<meta http-equiv="Content-Type" content="text/html; charset=%s"/>' % codepage).encode(codepage) 47 48 page = '<html><head>' + meta + '</head><body>' + page + '</body></html>' 49 50 env.log.debug('WikiToPdf => HTML output for WikiToPdf in charset %s is: %r' % (codepage, page)) 51 52 return page 53 54 def html_to_pdf(env, htmldoc_args, files): 55 os.environ["HTMLDOC_NOCGI"] = 'yes' 56 57 args_string = ' '.join(['--%s %s' % (arg, value or '') for arg, value 58 in htmldoc_args.iteritems() if value != None]) 59 60 pfile, pfilename = mkstemp('wikitopdf') 61 os.close(pfile) 62 63 cmd_string = 'htmldoc %s %s -f %s'%(args_string, ' '.join(files), pfilename) 64 env.log.debug('WikiToPdf => Htmldoc command line: %s' % cmd_string) 65 os.system(cmd_string.encode(env.config.get('trac', 'charset', 'iso-8859-1'))) 66 67 infile = open(pfilename, 'rb') 68 out = infile.read() 69 infile.close() 70 71 os.unlink(pfilename) 72 73 return out 74 75 19 76 20 77 class WikiToPdfPage(Component): … … 22 79 implements(IContentConverter) 23 80 81 24 82 # IContentConverter methods 25 83 def get_supported_conversions(self): … … 28 86 def convert_content(self, req, input_type, text, output_type): 29 87 30 os.system("rm -f /tmp/tmp*wikitopdf") 88 # htmldoc doesn't support utf-8, we need to use some other input encoding 89 codepage = self.env.config.get('trac', 'charset', 'iso-8859-1') 90 base_dir = self.env.config.get('wikitopdf', 'base_dir') 31 91 32 base_dir = self.env.config.get('wikitopdf', 'base_dir')92 page = wiki_to_pdf(text, self.env, req, base_dir, codepage) 33 93 34 hfile, hfilename = mkstemp('wikitopdf') 35 # htmldoc doesn't support utf-8, we need to use some other input encoding 36 37 codepage = self.env.config.get('trac', 'charset', 'iso-8859-1') 38 39 for r in EXCLUDE_RES: 40 text = r.sub('', text) 41 42 page = wiki_to_html(text, self.env, req).encode(codepage, 'replace') 43 44 self.env.log.debug('WikiToPdf => HTML output for WikiToPdf in charset: %s' % codepage) 45 self.env.log.debug('WikiToPdf => HTML intput for WikiToPdf: %s' % text) 46 47 page = page.replace('<img', '<img border="0"') 48 page = page.replace('raw-attachment', 'attachments') 49 page = page.replace('?format=raw','') 50 page = page.replace('<pre class="wiki">', '<table align="center" width="95%" border="1" bordercolor="#d7d7d7">' 51 + '<tr><td bgcolor="#f7f7f7"><pre class="wiki">') 52 page = page.replace('</pre>', '</pre></td></tr></table>') 53 page = page.replace('<table class="wiki">', '<table class="wiki" border="1" width="100%">') 54 55 imgpos = page.find('<img') 56 57 while imgpos != -1: 58 addrpos = page.find('src=',imgpos) 59 base_dir = base_dir.encode('ascii') 60 page = page[:addrpos+5] + base_dir + page[addrpos+5:] 61 imgpos = page.find('<img', addrpos) 62 63 self.env.log.debug('WikiToPdf => Html code: %r' % page) 64 65 meta = ('<meta http-equiv="Content-Type" content="text/html; charset=%s"/>' % codepage).encode(codepage) 66 67 os.write(hfile, '<html><head>' + meta + '</head><body>' + page + '</body></html>') 94 hfile, hfilename = mkstemp('wikitopdf') 95 os.write(hfile, page) 68 96 os.close(hfile) 69 97 70 pfile, pfilename = mkstemp('wikitopdf')71 os.close(pfile)98 htmldoc_args = { 'webpage': '', 'format': 'pdf14', 'charset': codepage } 99 htmldoc_args.update(dict(self.env.config.options('wikitopdf-page'))) 72 100 73 os.environ["HTMLDOC_NOCGI"] = 'yes' 74 htmldoc_args = { 'webpage': None, 'format': 'pdf14', 'charset': codepage }101 out = html_to_pdf(self.env, htmldoc_args, [hfilename]) 102 os.unlink(hfilename) 75 103 76 htmldoc_args.update(dict(self.env.config.options('wikitopdf-page')))77 78 args_string = ' '.join(['--%s %s' % (arg, value or '') for arg, value79 in htmldoc_args.iteritems()])80 81 self.env.log.debug('WikiToPdf => Htmldoc code out: %s' % args_string)82 83 os.system('htmldoc %s %s -f %s' % (args_string, hfilename, pfilename))84 85 out = open(pfilename, 'rb').read()86 os.unlink(pfilename)87 os.unlink(hfilename)88 104 return (out, 'application/pdf')
