2010-08-10 21 views

cevap

-3

Kullanım renderPDF

+3

Bu yanlıştır. renderPDF, EXISTING belgesini alır ve bir PDF oluşturur. Posterin istediğinin tam tersi. –

2

ReportLab's FAQ göre bu Reportlab PLUS ile mümkündür içe:

benim PDF'leri vektör grafikleri kullanabilir miyim?

Hayır, Açık Kaynak paketi bu işlemi yapmaz. , PageCatcher (önceki cevaba bakınız) kolayca tam bir görüntü dosyası olduğu gibi kullanmaktan daha sonra PDF olarak kaydetme ve herhangi bir vektör görüntüsünü dahil sağlar ve Rapor İşaretleme Dili JPG ile birlikte PDF dosyaları kabul GIF ve PNG.

Güncelleme: Bir süre bu bakmadım ama on the page of pdfrw diyor:

pdfrw okumak ve PDF dosyalarını yazabilir ve ayrıca hangi can PDF'leri okumak için kullanılabilir Daha sonra reportlab içinde kullanılabilir.

+0

Bu doğru. Bunun için pdfrw'yi pdfrw sayfasında ve bazı [sorularda] (http://stackoverflow.com/questions/31712386/loading-matplotlib-object-into-reportlab/) –

1

Sen ReportLab birlikte harika pdfrw paketini kullanmak ve doğrudan bir akabilen içine matplotlib figürlerin dosya benzeri nesneler geçmesi için kullanabilirsiniz: Bu daha önce cevap verilmiştir

ama minimal bir örnek vermek istiyorum burada, aynı zamanda adresten öğrenebilirsiniz: Sen matplotlib dan svg ihracat kullanabilir ve reportlab PDF dosyalarını oluşturulan vektör grafikleri dahil etmek svglib piton kütüphanesini kullanabilirsiniz https://stackoverflow.com/a/13870512/4497962

from io import BytesIO 
import matplotlib.pyplot as plt 
from pdfrw import PdfReader, PdfDict 
from pdfrw.buildxobj import pagexobj 
from pdfrw.toreportlab import makerl 
from reportlab.platypus import Flowable 
from reportlab.lib.enums import TA_JUSTIFY,TA_LEFT,TA_CENTER,TA_RIGHT 

class PdfImage(Flowable): 
    """ 
    PdfImage wraps the first page from a PDF file as a Flowable 
    which can be included into a ReportLab Platypus document. 
    Based on the vectorpdf extension in rst2pdf (http://code.google.com/p/rst2pdf/) 

    This can be used from the place where you want to return your matplotlib image 
    as a Flowable: 

     img = BytesIO() 

     fig, ax = plt.subplots(figsize=(canvaswidth,canvaswidth)) 

     ax.plot([1,2,3],[6,5,4],antialiased=True,linewidth=2,color='red',label='a curve') 

     fig.savefig(img,format='PDF') 

     return(PdfImage(img)) 

    """ 

    def __init__(self, filename_or_object, width=None, height=None, kind='direct'): 
     # If using StringIO buffer, set pointer to begining 
     if hasattr(filename_or_object, 'read'): 
      filename_or_object.seek(0) 
      #print("read") 
     self.page = PdfReader(filename_or_object, decompress=False).pages[0] 
     self.xobj = pagexobj(self.page) 

     self.imageWidth = width 
     self.imageHeight = height 
     x1, y1, x2, y2 = self.xobj.BBox 

     self._w, self._h = x2 - x1, y2 - y1 
     if not self.imageWidth: 
      self.imageWidth = self._w 
     if not self.imageHeight: 
      self.imageHeight = self._h 
     self.__ratio = float(self.imageWidth)/self.imageHeight 
     if kind in ['direct','absolute'] or width==None or height==None: 
      self.drawWidth = width or self.imageWidth 
      self.drawHeight = height or self.imageHeight 
     elif kind in ['bound','proportional']: 
      factor = min(float(width)/self._w,float(height)/self._h) 
      self.drawWidth = self._w*factor 
      self.drawHeight = self._h*factor 

    def wrap(self, availableWidth, availableHeight): 
     """ 
     returns draw- width and height 

     convenience function to adapt your image 
     to the available Space that is available 
     """ 
     return self.drawWidth, self.drawHeight 

    def drawOn(self, canv, x, y, _sW=0): 
     """ 
     translates Bounding Box and scales the given canvas 
     """ 
     if _sW > 0 and hasattr(self, 'hAlign'): 
      a = self.hAlign 
      if a in ('CENTER', 'CENTRE', TA_CENTER): 
       x += 0.5*_sW 
      elif a in ('RIGHT', TA_RIGHT): 
       x += _sW 
      elif a not in ('LEFT', TA_LEFT): 
       raise ValueError("Bad hAlign value " + str(a)) 

     #xobj_name = makerl(canv._doc, self.xobj) 
     xobj_name = makerl(canv, self.xobj) 

     xscale = self.drawWidth/self._w 
     yscale = self.drawHeight/self._h 

     x -= self.xobj.BBox[0] * xscale 
     y -= self.xobj.BBox[1] * yscale 

     canv.saveState() 
     canv.translate(x, y) 
     canv.scale(xscale, yscale) 
     canv.doForm(xobj_name) 
     canv.restoreState() 
+0

adresinde bulabilirsiniz. tam olarak ihtiyacım olan şey! Kod için çok teşekkürler! – desa

+0

Bunu beğendiyseniz, şuna bir göz atmak isteyebilirsiniz: https://pypi.python.org/pypi/autobasedoc/ – skidzo

1

. svglib bir svg dosyası alır ve doğrudan rapor dosyasında kullanılabilecek bir çizim nesnesi yapar.

fazla ayrıntı için de bu soruya bakın: Generating PDFs from SVG input

İlgili konular