MobileBlur

Diff
Login

Differences From Artifact [163edc0937]:

To Artifact [3dda777bd7]:


22
23
24
25
26
27
28
29

30
31
32
33
34
35
36
37
38
39
40
41


42

43
44
45
46
47
48
49
22
23
24
25
26
27
28

29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

44
45
46
47
48
49
50
51







-
+












+
+
-
+







        g = int(color[3:5], 16)
        b = int(color[5:7], 16)
        return r, g, b

class HTML2FPDF(HTMLParser):
    "Render basic HTML to FPDF"

    def __init__(self, pdf, image_map):
    def __init__(self, pdf, image_map, **kwargs):
        HTMLParser.__init__(self)
        self.image_map = image_map
        self.style = {}
        self.pre = False
        self.href = ''
        self.align = ''
        self.page_links = {}
        self.font_list = ("times","courier", "helvetica")
        self.pdf = pdf
        self.r = self.g = self.b = 0
        self.indent = 0
        self.bullet = []
        self.font_face="times"      # initialize font      
        self.color=0                # initialize font color 
        self.set_font("times", 12)
        self.set_font(kwargs.get("font","times"), kwargs.get("fontsize",12))
        self.table = None           # table attributes
        self.table_col_width = None # column (header) widths
        self.table_col_index = None # current column index
        self.td = None              # cell attributes
        self.th = False             # header enabled
        self.tr = None
        self.theader = None           # table header cells
211
212
213
214
215
216
217
218
219


220
221
222
223
224
225
226
213
214
215
216
217
218
219


220
221
222
223
224
225
226
227
228







-
-
+
+







                self.set_text_color(*color)
                self.color = color
            if 'face' in attrs and attrs['face'].lower() in self.font_list:
                face = attrs.get('face').lower()
                self.pdf.set_font(face)
                self.font_face = face
            if 'size' in attrs:
                face = attrs.get('size')
                self.pdf.set_font('', size)
                size = int(attrs.get('size'))
                self.pdf.set_font(self.font_face, size=int(size))
                self.font_size = size
        if tag=='table':
            self.table = dict([(k.lower(), v) for k,v in attrs.items()])
            if not 'width' in self.table:
                self.table['width'] = '100%'
            if self.table['width'][-1]=='%':
                w = self.pdf.w - self.pdf.r_margin - self.pdf.l_margin
321
322
323
324
325
326
327
328
329
330



331
332
333
334
335
336
337
323
324
325
326
327
328
329



330
331
332
333
334
335
336
337
338
339







-
-
-
+
+
+







            self.table_col_index += int(self.td.get('colspan','1'))
            self.td = None
            self.th = False
        if tag=='font':
            if self.color:
                self.pdf.set_text_color(0,0,0)
                self.color = None
            if self.font:
                self.SetFont('Times','',12)
                self.font = None
            if self.font_face:
                self.set_font('Times',12)
                
        if tag=='center':
            self.align = None

    def set_font(self, face=None, size=None):
        if face:
            self.font_face = face
        if size:
376
377
378
379
380
381
382
383

384
385

386
387
388
389
390
391
392
378
379
380
381
382
383
384

385
386

387
388
389
390
391
392
393
394







-
+

-
+








    def put_line(self):
        self.pdf.ln(2)
        self.pdf.line(self.pdf.get_x(),self.pdf.get_y(),self.pdf.get_x()+187,self.pdf.get_y())
        self.pdf.ln(3)

class HTMLMixin():
    def write_html(self, text, image_map=lambda x:x):
    def write_html(self, text, image_map=lambda x:x, **kwargs):
        "Parse HTML and convert it to PDF"
        h2p = HTML2FPDF(self,image_map=image_map)
        h2p = HTML2FPDF(self,image_map=image_map,**kwargs)
        h2p.feed(text)

if __name__=='__main__':
    html="""
<H1 align="center">html2fpdf</H1>
<h2>Basic usage</h2>
<p>You can now easily print text mixing different
449
450
451
452
453
454
455
456

451
452
453
454
455
456
457
458
459








+
    #First page
    pdf.add_page()
    pdf.write_html(html)
    pdf.output('html.pdf','F')

    import os
    os.system("evince html.pdf")