Changeset 4167

Show
Ignore:
Timestamp:
08/21/08 12:30:40 (3 months ago)
Author:
diorgenes
Message:

The correction by tickets #3481 #3465

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • tracwikitopdfplugin/0.11/docs/trac.ini.example

    r4160 r4167  
     1[components] 
     2wikitopdf.* = enabled 
     3 
    14[wikitopdf] 
     5# base_dir is the Apache DocumentRoot, It is need to get PDF files with images. 
    26base_dir = /path/to/DocumentRoot 
    3 titlefile = /path/to/capa_file.html 
     7 
     8# path to folder used to get a cover files. 
     9pathtocover = /path/to/cover 
    410 
    511[wikitopdf-admin] 
     12# HTMLDOC options. See the link above. 
    613size = A4 
    714right = 1.5cm 
     
    1017bottom = 1.5cm 
    1118no-links = None 
    12 toctitle = Sumário 
     19toctitle = Summary 
    1320numbered = None 
    1421linkstyle = plain 
     
    1825 
    1926[wikitopdf-page] 
     27# HTMLDOC options. See the link above. 
    2028size = A4 
    2129right = 1.5cm 
     
    2836footer = .r1 
    2937logoimage = /path/to/header-logo.png 
     38 
  • tracwikitopdfplugin/0.11/setup.py

    r4160 r4167  
    88setup( 
    99    name = 'TracWikiToPdfPlugin', 
    10     version = '2.1.1', 
     10    version = '2.2', 
    1111    packages = ['wikitopdf'], 
    1212    package_data={ 'wikitopdf' : [ 'templates/*.cs', 'htdocs/js/*.js' ] },      
  • tracwikitopdfplugin/0.11/wikitopdf/formats.py

    r4160 r4167  
    2323 
    2424from api import IWikiToPdfFormat 
     25from wikitopdf import wiki_to_pdf, html_to_pdf 
    2526 
    2627EXCLUDE_RES = [ 
     
    3738    def wikitopdf_formats(self, req): 
    3839        yield 'pdf', 'PDF' 
    39 #        yield 'ps', 'PS' 
    4040         
    4141    def process_wikitopdf(self, req, format, title, subject, pages, version, date, pdfname): 
     
    4343        os.system("rm -f /tmp/tmp*wikitopdf") 
    4444 
    45        # Dump all pages to HTML files 
    46        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] 
    4747         
    4848        #Setup the title and license pages 
    4949        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 
    5152         
    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') 
    5555 
    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'] = '' 
    5960 
    60         htmldoc_format = {'pdf': 'pdf14', 'ps':'ps3'}[format] 
     61        htmldoc_args.update(dict(self.env.config.options('wikitopdf-admin'))) 
    6162 
    62         htmldoc_args = { 'book': None, 'format': htmldoc_format, 'titlefile': titlefile, 'charset': codepage } 
     63        #render 
     64        out = html_to_pdf(self.env, htmldoc_args, files) 
    6365 
    64         htmldoc_args.update(dict(self.env.config.options('wikitopdf-admin'))) 
    65  
    66         args_string = ' '.join(['--%s %s' % (arg, value or '') for arg, value 
    67                                         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              
    7666        # 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) 
    8069               
    8170        # Send the output 
     
    8776        req.write(out) 
    8877        raise RequestDone 
     78     
    8979 
    90     def _page_to_file(self, header, req, pagename, text=None): 
     80    def _page_to_file(self, header, req, pagename): 
    9181        """Slight modification of some code from Alec's PageToPdf plugin.""" 
    9282 
    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') 
    9685        base_dir = self.env.config.get('wikitopdf', 'base_dir') 
    9786         
     87        page = wiki_to_pdf(WikiPage(self.env, pagename).text, self.env, req, base_dir, codepage) 
     88         
     89        hfile, hfilename = mkstemp('wikitopdf') 
    9890        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) 
    12892        os.close(hfile) 
    12993        return hfilename 
    130              
     94     
     95     
    13196    def get_titlepage(self, template_path, title, subject, version, date): 
    13297 
    133        hfile, hfilename = mkstemp('wikitopdf') 
    134        codepage = Mimeview(self.env).default_charset 
     98        hfile, hfilename = mkstemp('wikitopdf') 
     99        codepage = Mimeview(self.env).default_charset 
    135100 
    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  
    3333    def get_htdocs_dirs(self): 
    3434        from pkg_resources import resource_filename 
    35        return [('wikitopdf', resource_filename(__name__, 'htdocs'))] 
     35        return [('wikitopdf', resource_filename(__name__, 'htdocs'))] 
    3636        #return [] 
    3737 
     
    4646 
    4747    def post_process_request(self, req, template, data, content_type): 
    48        return template, data, content_type     
     48        return template, data, content_type    
    4949 
    5050    def process_admin_request(self, req, cat, page, path_info): 
     
    6363            rightpages = req.args.get('rightpages_all') 
    6464            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') 
    6666            date = req.args.get('date').encode('latin-1'); 
    6767            version = req.args.get('version').encode('latin-1'); 
    68            toctitle = req.args.get('toctitle') 
    69            req.session['wikitopdf_rightpages'] = rightpages 
     68            toctitle = req.args.get('toctitle') 
     69            req.session['wikitopdf_rightpages'] = rightpages 
    7070            rightpages = rightpages.split(',') 
    7171            format = req.args.get('format') 
     
    8686        req.hdf['wikitopdf.default_format'] = formats.iterkeys().next() 
    8787 
    88        add_script(req, 'wikitopdf/js/admin_wikitopdf.js')  
     88        add_script(req, 'wikitopdf/js/admin_wikitopdf.js')  
    8989 
    9090        return 'admin_wikitopdf.cs', None 
  • tracwikitopdfplugin/0.11/wikitopdf/wikitopdf.py

    r4160 r4167  
    1313 
    1414EXCLUDE_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) 
    1818] 
     19 
     20 
     21def 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 
     54def 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 
    1976 
    2077class WikiToPdfPage(Component): 
     
    2279    implements(IContentConverter) 
    2380 
     81         
    2482    # IContentConverter methods 
    2583    def get_supported_conversions(self): 
     
    2886    def convert_content(self, req, input_type, text, output_type): 
    2987 
    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') 
    3191 
    32        base_dir = self.env.config.get('wikitopdf', 'base_dir'
     92        page = wiki_to_pdf(text, self.env, req, base_dir, codepage
    3393 
    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) 
    6896        os.close(hfile) 
    6997 
    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'))
    72100 
    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) 
    75103 
    76         htmldoc_args.update(dict(self.env.config.options('wikitopdf-page'))) 
    77  
    78         args_string = ' '.join(['--%s %s' % (arg, value or '') for arg, value 
    79                                 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) 
    88104        return (out, 'application/pdf')