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')
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')
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)
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)
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')
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')
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')
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')
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')
def serialize(self, o): serialize(o, self.current_page)
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 ')
def set_line_join(self, style): serialize({'miter':0, 'round':1, 'bevel':2}[style], self.current_page) self.current_page.write_line(' j')
def set_line_cap(self, style): serialize({'flat':0, 'round':1, 'square':2}.get(style), self.current_page) self.current_page.write_line(' J')
def set_line_width(self, width): serialize(width, self.current_page) self.current_page.write_line(' w')
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')
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')
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 ')
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')