相关疑难解决方法(0)

从SVG输入生成PDF

我试图在Django应用程序中使用Python从SVG输入文件生成PDF.

我已经找到了2个工作解决方案:cairo + rsvg和imagemagick但它们都有一个问题:它们有一些奇怪的依赖关系,我不想在服务器上安装,例如DBUS和GTK.

所以我要求另一种从SVG生成PDF的方法,而不必在服务器上安装所有这些愚蠢的依赖项.

python pdf django svg

26
推荐指数
3
解决办法
2万
查看次数

如何在reportlab画布中绘制一个matplotlib图像?

我想使用drawImage方法将使用matplotlib生成的图形添加到reportlab画布中,而不必先将图形保存到硬盘驱动器中.

我的问题与以下内容有关: ReportLab是否有可流动的matplotlib?,很好地解决了.但是,我不想使用DocTemplates,Stories,Flowables等.如上所述,我想使用drawImage将它放在画布中的某个位置.

我尝试使用以下方法将matplotlib图转换为PIL图像:

1)http://www.icare.univ-lille1.fr/wiki/index.php/How_to_convert_a_matplotlib_figure_to_a_numpy_array_or_a_PIL_image

2)http://matplotlib.org/faq/howto_faq.html#matplotlib-in-a-web-application-server

例如,一些无法工作的代码是:

import Image
import matplotlib.pyplot as plt
import cStringIO
from reportlab.pdfgen import canvas
from reportlab.lib.units import inch, cm

fig = plt.figure(figsize=(4, 3))
plt.plot([1,2,3,4])
plt.ylabel('some numbers')

imgdata = cStringIO.StringIO()
fig.savefig(imgdata, format='png')
imgdata.seek(0)  # rewind the data
im = Image.open(imgdata)

c = canvas.Canvas('test.pdf')
#c.drawImage(imgdata, cm, cm, inch, inch)
c.drawImage(im, cm, cm, inch, inch)
c.save()
Run Code Online (Sandbox Code Playgroud)

试图imgdata在错误中绘制结果:

AttributeError: 'cStringIO.StringO' object has no attribute 'rfind'
Run Code Online (Sandbox Code Playgroud)

虽然绘图im给出:

AttributeError: rfind
Run Code Online (Sandbox Code Playgroud)

现在有人如何解决这个问题?任何帮助将不胜感激.

python reportlab matplotlib

13
推荐指数
2
解决办法
9619
查看次数

使用ReportLab(Python)的PDF文档中的PDF图像

我将matplotlib中的一些图表保存为pdf格式,因为它似乎提供了更好的质量.如何使用ReportLab将PDF图像包含到PDF文档中?便捷方法Image(filepath)不适用于此格式.

谢谢.

python pdf image reportlab

11
推荐指数
1
解决办法
4645
查看次数

matplotlib:更快的PDF生成?

我想用matplotlib生成一些PDF文件.我的主要问题是matplotlib很慢,每个文件的顺序为0.5秒.

我试图弄清楚为什么需要这么长时间,我编写了以下测试程序,它只是将一条非常简单的曲线绘制为PDF文件:

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

X = range(10)
Y = [ x**2 for x in X ]

for n in range(100):
    fig = plt.figure(figsize=(6,6))
    ax = fig.add_subplot(111)
    ax.plot(X, Y)
    fig.savefig("test.pdf")
Run Code Online (Sandbox Code Playgroud)

但即使是这样简单的事情也需要花费大量时间:100个PDF文件共计15-20秒(现代英特尔平台,我尝试过Mac OS X和Linux系统).

有没有什么技巧和技巧可以用来加速matplotlib中的PDF生成?显然我可以在多核平台上使用多个并行线程,但还有什么我可以做的吗?

python pdf-generation matplotlib

8
推荐指数
1
解决办法
3983
查看次数

通过flowable将现有PDF合并到新的ReportLab PDF中

我有一个reportlab SimpleDocTemplate并将其作为动态PDF返回.我基于一些Django模型元数据生成它的内容.这是我的模板设置:

buff = StringIO()
doc = SimpleDocTemplate(buff, pagesize=letter,
                        rightMargin=72,leftMargin=72,
                        topMargin=72,bottomMargin=18)
Story = []
Run Code Online (Sandbox Code Playgroud)

我可以轻松地将Entry模型中的文本元数据添加Story到稍后要构建的列表中:

    ptext = '<font size=20>%s</font>' % entry.title.title()
    paragraph = Paragraph(ptext, custom_styles["Custom"])
    Story.append(paragraph)
Run Code Online (Sandbox Code Playgroud)

然后通过调用以下build内容生成要在响应中返回的PDF SimpleDocTemplate:

doc.build(Story, onFirstPage=entry_page_template, onLaterPages=entry_page_template)

pdf = buff.getvalue()
resp = HttpResponse(mimetype='application/x-download')    
resp['Content-Disposition'] = 'attachment;filename=logbook.pdf'
resp.write(pdf)
return resp
Run Code Online (Sandbox Code Playgroud)

模型上的一个元数据字段是文件附件.当这些文件附件是PDF时,我想将它们合并到我正在生成的故事中; IE表示reportlab"flowable"类型的PDF.

我试图这样做pdfrw,但没有运气.理想情况下,我很乐意打电话:

from pdfrw import PdfReader
pdf = pPdfReader(entry.document.file.path)
Story.append(pdf)
Run Code Online (Sandbox Code Playgroud)

并将pdf附加到现有的故事列表中,以包含在最终文档的生成中,如上所述.

有人有主意吗?我尝试使用pagexobj创建类似的东西,尝试按照这个例子:

http://code.google.com/p/pdfrw/source/browse/trunk/examples/rl1/subset.py

from pdfrw.buildxobj import pagexobj
from pdfrw.toreportlab import makerl

pdf = pagexobj(PdfReader(entry.document.file.path))
Run Code Online (Sandbox Code Playgroud)

但也没有任何运气.有人可以向我解释将现有PDF文件合并到reportlab可流动的最佳方法吗?我对这些东西并不擅长,并且几天来一直在敲打pdf一代.:)任何方向非常感谢!

python pdf django pdf-generation reportlab

7
推荐指数
1
解决办法
9784
查看次数

将matplotlib对象加载到reportlab中

我正在尝试将matplotlib对象加载到reportlab中.这是我的代码:

from reportlab.pdfgen import canvas
from reportlab.lib.utils import ImageReader
from reportlab.platypus import Paragraph, SimpleDocTemplate, Spacer, Image
from matplotlib import pyplot as plt

def __get_img_data():
    """
    returns the binary image data of the plot
    """
    img_file = NamedTemporaryFile(delete=False)
    plt.savefig(img_file.name)
    img_data = open(img_file.name + '.png', 'rb').read()
    os.remove(img_file.name)
    os.remove(img_file.name + '.png')
    return img_data

def get_plot():
    # HERE I PLOT SOME STUFF
    img_data = __get_img_data()
    plt.close()
    return img_data

class NumberedCanvas(canvas.Canvas):
    def __init__(self):
        pass

class ReportTemplate:
    def __init__(self):
        pass
    def _header_footer(self, canvas, doc):
        pass

    def …
Run Code Online (Sandbox Code Playgroud)

python reportlab matplotlib

3
推荐指数
1
解决办法
3942
查看次数

标签 统计

python ×6

reportlab ×4

matplotlib ×3

pdf ×3

django ×2

pdf-generation ×2

image ×1

svg ×1