def __save(self, target_path, pages, progress_cb=dummy_export_progress_cb):
# XXX(Jflesch): This is a problem. It will fails if someone tries
# to export to a non-local directory. We should use
# cairo_pdf_surface_create_for_stream()
target_path = self.doc.fs.unsafe(target_path)
pdf_surface = cairo.PDFSurface(target_path,
self.__page_format[0],
self.__page_format[1])
pdf_context = cairo.Context(pdf_surface)
pages = [self.doc.pages[x] for x in range(pages[0], pages[1])]
for page_idx, page in enumerate(pages):
progress_cb(page_idx, len(pages))
img = page.img
if (img.size[0] < img.size[1]):
(x, y) = (min(self.__page_format[0], self.__page_format[1]),
max(self.__page_format[0], self.__page_format[1]))
else:
(x, y) = (max(self.__page_format[0], self.__page_format[1]),
min(self.__page_format[0], self.__page_format[1]))
pdf_surface.set_size(x, y)
logger.info("Adding text to PDF page {} ...".format(page))
self.__paint_txt(pdf_surface, (x, y), pdf_context, page)
logger.info("Adding image to PDF page {} ...".format(page))
self.__paint_img(pdf_surface, (x, y), pdf_context, page)
pdf_context.show_page()
logger.info("Page {} ready".format(page))
progress_cb(len(pages), len(pages))
return self.doc.fs.safe(target_path)
评论列表
文章目录