예제 #1
0
 def draw_image(self, x, y, width, height, imgref):
     name = self.current_page.add_image(imgref)
     self.current_page.write(
         'q %s 0 0 %s %s %s cm ' %
         (fmtnum(width), fmtnum(-height), fmtnum(x), fmtnum(y + height)))
     serialize(Name(name), self.current_page)
     self.current_page.write_line(' Do Q')
예제 #2
0
 def draw_image_with_transform(self,
                               imgref,
                               translation=(0, 0),
                               scaling=(1, 1)):
     name = self.current_page.add_image(imgref)
     self.current_page.write('q {} 0 0 {} {} {} cm '.format(
         *(tuple(scaling) + tuple(translation))))
     serialize(Name(name), self.current_page)
     self.current_page.write_line(' Do Q')
예제 #3
0
 def write_obj(self, stream, num, obj):
     stream.write(EOL)
     self._offsets[num - 1] = stream.tell()
     stream.write('%d 0 obj' % num)
     stream.write(EOL)
     serialize(obj, stream)
     if stream.last_char != EOL:
         stream.write(EOL)
     stream.write('endobj')
     stream.write(EOL)
예제 #4
0
 def write_obj(self, stream, num, obj):
     stream.write(EOL)
     self._offsets[num-1] = stream.tell()
     stream.write('%d 0 obj'%num)
     stream.write(EOL)
     serialize(obj, stream)
     if stream.last_char != EOL:
         stream.write(EOL)
     stream.write('endobj')
     stream.write(EOL)
예제 #5
0
파일: serialize.py 프로젝트: zyhong/calibre
 def draw_glyph_run(self, transform, size, font_metrics, glyphs):
     glyph_ids = {x[-1] for x in glyphs}
     fontref = self.font_manager.add_font(font_metrics, glyph_ids)
     name = self.current_page.add_font(fontref)
     self.current_page.write(b'BT ')
     serialize(Name(name), self.current_page)
     self.current_page.write(' %s Tf '%fmtnum(size))
     self.current_page.write('%s Tm '%' '.join(map(fmtnum, transform)))
     for x, y, glyph_id in glyphs:
         self.current_page.write_raw(('%s %s Td <%04X> Tj '%(
             fmtnum(x), fmtnum(y), glyph_id)).encode('ascii'))
     self.current_page.write_line(b' ET')
예제 #6
0
 def draw_glyph_run(self, transform, size, font_metrics, glyphs):
     glyph_ids = {x[-1] for x in glyphs}
     fontref = self.font_manager.add_font(font_metrics, glyph_ids)
     name = self.current_page.add_font(fontref)
     self.current_page.write(b'BT ')
     serialize(Name(name), self.current_page)
     self.current_page.write(' %s Tf '%fmtnum(size))
     self.current_page.write('%s Tm '%' '.join(map(fmtnum, transform)))
     for x, y, glyph_id in glyphs:
         self.current_page.write_raw(('%s %s Td <%04X> Tj '%(
             fmtnum(x), fmtnum(y), glyph_id)).encode('ascii'))
     self.current_page.write_line(b' ET')
예제 #7
0
 def draw_glyph_run(self, transform, size, font_metrics, glyphs):
     glyph_ids = {x[-1] for x in glyphs}
     fontref = self.font_manager.add_font(font_metrics, glyph_ids)
     name = self.current_page.add_font(fontref)
     self.current_page.write(b'BT ')
     serialize(Name(name), self.current_page)
     self.current_page.write(' %g Tf '%size)
     self.current_page.write('%s Tm '%' '.join(map(type(u''), transform)))
     for x, y, glyph_id in glyphs:
         self.current_page.write('%g %g Td '%(x, y))
         serialize(GlyphIndex(glyph_id), self.current_page)
         self.current_page.write(' Tj ')
     self.current_page.write_line(b' ET')
예제 #8
0
 def end(self):
     if self.current_page.getvalue():
         self.end_page()
     self.font_manager.embed_fonts()
     inforef = self.objects.add(self.info)
     self.objects.pdf_serialize(self.stream)
     self.write_line()
     startxref = self.objects.write_xref(self.stream)
     file_id = String(self.stream.hashobj.hexdigest().decode('ascii'))
     self.write_line('trailer')
     trailer = Dictionary({'Root':self.catalog, 'Size':len(self.objects)+1,
                           'ID':Array([file_id, file_id]), 'Info':inforef})
     serialize(trailer, self.stream)
     self.write_line('startxref')
     self.write_line('%d'%startxref)
     self.stream.write('%%EOF')
예제 #9
0
파일: serialize.py 프로젝트: zyhong/calibre
 def end(self):
     if self.current_page.getvalue():
         self.end_page()
     self.font_manager.embed_fonts(self.debug)
     inforef = self.objects.add(self.info)
     self.links.add_links()
     self.objects.pdf_serialize(self.stream)
     self.write_line()
     startxref = self.objects.write_xref(self.stream)
     file_id = String(as_unicode(self.stream.hashobj.hexdigest()))
     self.write_line('trailer')
     trailer = Dictionary({'Root':self.catalog, 'Size':len(self.objects)+1,
                           'ID':Array([file_id, file_id]), 'Info':inforef})
     serialize(trailer, self.stream)
     self.write_line('startxref')
     self.write_line('%d'%startxref)
     self.stream.write('%%EOF')
예제 #10
0
 def pdf_serialize(self, stream, font_name):
     if not self.text: return
     stream.write_line('BT ')
     serialize(Name(font_name), stream)
     stream.write(' %g Tf '%self.size)
     stream.write(' '.join(map(type(u''), self.transform)) + ' Tm ')
     if self.horizontal_scale != self.default_horizontal_scale:
         stream.write('%g Tz '%self.horizontal_scale)
     if self.word_spacing != self.default_word_spacing:
         stream.write('%g Tw '%self.word_spacing)
     if self.char_space != self.default_char_space:
         stream.write('%g Tc '%self.char_space)
     stream.write_line()
     if self.glyph_adjust is self.default_glyph_adjust:
         serialize(String(self.text), stream)
         stream.write(' Tj ')
     else:
         chars = Array()
         frac, widths = self.glyph_adjust
         for c, width in izip(self.text, widths):
             chars.append(String(c))
             chars.append(int(width * frac))
         serialize(chars, stream)
         stream.write(' TJ ')
     stream.write_line('ET')
예제 #11
0
 def serialize(self, o):
     serialize(o, self.current_page)
예제 #12
0
 def set_opacity(self, opref):
     if opref not in self.opacities:
         self.opacities[opref] = 'Opa%d'%len(self.opacities)
     name = self.opacities[opref]
     serialize(Name(name), self)
     self.write(b' gs ')
예제 #13
0
 def serialize(self, o):
     serialize(o, self.current_page)
예제 #14
0
 def set_line_join(self, style):
     serialize({'miter':0, 'round':1, 'bevel':2}[style], self.current_page)
     self.current_page.write_line(' j')
예제 #15
0
 def set_line_cap(self, style):
     serialize({'flat':0, 'round':1, 'square':2}.get(style),
               self.current_page)
     self.current_page.write_line(' J')
예제 #16
0
 def set_line_width(self, width):
     serialize(width, self.current_page)
     self.current_page.write_line(' w')
예제 #17
0
 def set_dash(self, array, phase=0):
     array = Array(array)
     serialize(array, self.current_page)
     self.current_page.write(b' ')
     serialize(phase, self.current_page)
     self.current_page.write_line(' d')
예제 #18
0
 def draw_image(self, x, y, width, height, imgref):
     name = self.current_page.add_image(imgref)
     self.current_page.write('q %s 0 0 %s %s %s cm '%(fmtnum(width),
                         fmtnum(-height), fmtnum(x), fmtnum(y+height)))
     serialize(Name(name), self.current_page)
     self.current_page.write_line(' Do Q')
예제 #19
0
 def set_opacity(self, opref):
     if opref not in self.opacities:
         self.opacities[opref] = 'Opa%d' % len(self.opacities)
     name = self.opacities[opref]
     serialize(Name(name), self)
     self.write(b' gs ')
예제 #20
0
 def draw_image(self, x, y, xscale, yscale, imgref):
     name = self.current_page.add_image(imgref)
     self.current_page.write('q %g 0 0 %g %g %g cm '%(xscale, yscale, x, y))
     serialize(Name(name), self.current_page)
     self.current_page.write_line(' Do Q')