如何使用reportlab将png添加到PDF

2024-01-04

我正在与报告实验室合作,我无法找到用鸭嘴兽添加 png 图像的方法,这是这里的一些示例代码http://www.tylerlesmann.com/2009/jan/28/writing-pdfs-python-adding-images/ http://www.tylerlesmann.com/2009/jan/28/writing-pdfs-python-adding-images/,附加该 png 时出现错误

你能帮我让它工作吗?

#!/usr/bin/env python

import os
import urllib2
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Image

filename = './python-logo.png'

def get_python_image():
    """ Get a python logo image for this example """
    if not os.path.exists(filename):
        response = urllib2.urlopen(
            'http://www.python.org/community/logos/python-logo.png')
        f = open(filename, 'w')
        f.write(response.read())
        f.close()

get_python_image()

doc = SimpleDocTemplate("image.pdf", pagesize=letter)
parts = []
parts.append(Image(filename))
doc.build(parts)



---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
/media/Felipe/B1wt/<ipython-input-21-1c3c466b9184> in <module>()
     22 parts = []
     23 parts.append(Image(filename))
---> 24 doc.build(parts)
     25 

/usr/lib/python2.7/site-packages/reportlab/platypus/doctemplate.pyc in build(self, flowables, onFirstPage, onLaterPages, canvasmaker)
   1115         if onLaterPages is _doNothing and hasattr(self,'onLaterPages'):
   1116             self.pageTemplates[1].beforeDrawPage = self.onLaterPages
-> 1117         BaseDocTemplate.build(self,flowables, canvasmaker=canvasmaker)
   1118 
   1119 def progressCB(typ, value):

/usr/lib/python2.7/site-packages/reportlab/platypus/doctemplate.pyc in build(self, flowables, filename, canvasmaker)
    878                 try:
    879                     first = flowables[0]
--> 880                     self.handle_flowable(flowables)
    881                     handled += 1
    882                 except:

/usr/lib/python2.7/site-packages/reportlab/platypus/doctemplate.pyc in handle_flowable(self, flowables)
    761             canv = self.canv
    762             #try to fit it then draw it

--> 763             if frame.add(f, canv, trySplit=self.allowSplitting):
    764                 if not isinstance(f,FrameActionFlowable):
    765                     self._curPageFlowableCount += 1

/usr/lib/python2.7/site-packages/reportlab/platypus/frames.pyc in _add(self, flowable, canv, trySplit)
    157             h = y - p - s
    158             if h>0:
--> 159                 w, h = flowable.wrap(aW, h)
    160             else:
    161                 return 0

/usr/lib/python2.7/site-packages/reportlab/platypus/flowables.pyc in wrap(self, availWidth, availHeight)
    406     def wrap(self, availWidth, availHeight):
    407         #the caller may decide it does not fit.

--> 408         return self.drawWidth, self.drawHeight
    409 
    410     def draw(self):

/usr/lib/python2.7/site-packages/reportlab/platypus/flowables.pyc in __getattr__(self, a)
    400             return self._img
    401         elif a in ('drawWidth','drawHeight','imageWidth','imageHeight'):
--> 402             self._setup_inner()
    403             return self.__dict__[a]
    404         raise AttributeError("<Image @ 0x%x>.%s" % (id(self),a))

/usr/lib/python2.7/site-packages/reportlab/platypus/flowables.pyc in _setup_inner(self)
    366         height = self._height
    367         kind = self._kind
--> 368         img = self._img
    369         if img: self.imageWidth, self.imageHeight = img.getSize()
    370         if self._lazy>=2: del self._img

/usr/lib/python2.7/site-packages/reportlab/platypus/flowables.pyc in __getattr__(self, a)
    396         if a=='_img':
    397             from reportlab.lib.utils import ImageReader  #this may raise an error
--> 398             self._img = ImageReader(self._file)
    399             del self._file
    400             return self._img

/usr/lib/python2.7/site-packages/reportlab/lib/utils.pyc in __init__(self, fileName, ident)
    539         self._transparent = None
    540         self._data = None
--> 541         if _isPILImage(fileName):
    542             self._image = fileName
    543             self.fp = getattr(fileName,'fp',None)

/usr/lib/python2.7/site-packages/reportlab/lib/utils.pyc in _isPILImage(im)
    519 def _isPILImage(im):
    520     try:
--> 521         return isinstance(im,Image.Image)
    522     except ImportError:
    523         return 0

AttributeError: 'NoneType' object has no attribute 'Image'

你应该安装PIL(Python 图像库) http://pypi.python.org/pypi/PIL/,例如

pip install PIL

我猜测导入 PIL 失败时,它正在设置 Image = None。如果reportlab源很容易浏览,我会确认。

编辑:我们开始吧:

try:
    import Image
    if PIL_WARNINGS: warnOnce('Python Imaging Library not available as package; upgrade   your installation!')
except ImportError, errMsg:
    _checkImportError(errMsg)
    Image = None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用reportlab将png添加到PDF 的相关文章

随机推荐

  • 在 Firebase Cloud Functions 项目中生成 Swagger 文档

    是否可以从 firebase 云函数中的函数注释生成 Swagger Spec 文件 如果是的话 我们该怎么做呢 我看到云函数代码更像是无服务器 所以想知道这是否可能 我还没有找到自动的方法 但是有很多库可供选择 我在 Firebase F
  • Swinject - 对成员的模糊引用

    我在用Swinject https github com Swinject Swinject in my Swift 3应用程序 当我尝试时 let container Container container register Networ
  • 什么时候适合使用UDP而不是TCP? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 由于 TCP 保证数据包传送 因此可以被认为是 可靠的 而 UDP 不保证任何东西 并且数据包可能会丢失 在应用程序中使用 UDP 传输数
  • Swift Firebase 检查用户是否存在

    What am i doing wrong I have a database structure like the one shown in this image In appleDelegate swift i just want to
  • Apache Tiles 和 Spring MVC 中的全局异常页面

    当抛出未处理的异常时 例如RuntimeException 然后我想显示一个常见的错误页面 我想实现一些目标 重用 HTML 模板 使用带有标头等的通用 框架 并将异常信息放入正文中 在正文文档中提供有关异常的一些基本信息 我正在使用 Ap
  • 使用 LINQ 证明一组要求可以通过一组值来满足

    这是发布的问题的子集here https stackoverflow com questions 16703082 crafting a linq based solution to determine if a set of predic
  • JDBC SQL 别名不起作用

    我正在尝试在我的 java web 应用程序中运行以下查询 SELECT platform AS Platform FROM edb cases 该网络应用程序工作正常并且能够执行所有查询 但是每当我使用别名 通过 AS 时 生成的数据集都
  • Chain React setState 回调

    我需要按顺序加载三个不同的 json 文件并使用 fetch 原因是我正在使用 nextjs 导出 并且我需要动态读取这些文件 所以我在需要时获取它们 即使在出口 第一个文件包含用于创建第二个文件的 url 的数据 依此类推 因此每次获取都
  • 如何使 $(document).ready() 函数全局可用?

    我这里有一个有趣的问题 可能听起来很愚蠢 但就是这样 使用 jQuery 的 Ready 函数 我定义了一些函数 如下所示 function var function1 function data do something var func
  • javascript_include_tag Rails 4 在生产中生成“/javascripts/”而不是“/assets”

    我有一个 Rails 4 应用程序 在头脑中 在开发中 呈现以下 HTML 并加载 Modernizr 在生产中 呈现以下 HTML modernizr 是not已加载 404 未找到 在生产中 assets modernizr j
  • 将参数包转换为向量

    我试图理解 C 中的可变参数模板 但我迷失在以下示例中 想象一个函数富 T T T T 它采用相同类型 T 的可变数量参数并将它们转换为向量 知道如何实施吗 它应该像这样工作 foo
  • 副本上的 VBA 事件触发器?

    VBA 中是否有一种方法 当我在 Excel 中复制单元格的值时 它会触发我的函数 或者有什么解决方法吗 或者我可以阅读按键并听 Ctrl C 吗 或者VBA可以读取复制文本的内容吗 原因是 我将一些条目从 Excel 工作表复制到另一个程
  • 如何使 REDIS 中的映射键过期?

    我使用redis来存储用户信息 我在 user 键下设置了许多用户的信息 如下所示 hset user userid1234 如何使用户中的密钥 userid1234 在几秒钟后过期 有一些命令如 expire 只能设置用户的超时时间 但我
  • 读取两个关键字之间的行

    如果我必须在两个关键字之间进行阅读 有人可以建议该怎么做吗 System Power 1 1 2 1 8 2 System Terminate 在这种情况下 答案是 1 1 2 1 8 2 我尝试使用 awk 像 awk 0 System
  • php artisan migrate 抛出 [PDO 异常] 找不到驱动程序 - 使用 Laravel

    我在安装 Laravel 时遇到了不好的经历 然而 我能够做到这一点并进入下一个阶段 我使用了生成器并创建了我的迁移 但是当我输入最后一个命令时 php artisan migrate 它抛出 PDOException 找不到驱动程序 my
  • R:使用地图工具绘制邻国

    假设我正在使用地图工具在世界地图上绘制国家 如果我要绘制一个国家 是否有办法以不同的颜色绘制与该国家接壤的国家 我正在使用形状文件wrld simpl地图工具附带的 所以说我绘制了中国 plot wrld simpl wrld simpl
  • CSS 中的 HTML colspan

    我正在尝试构建类似于以下内容的布局 底部填充上排的空间 如果这是一个实际的表 我可以轻松地完成此操作 td 但因为我只是创建一个类似表格的layout 我不能使用 table 标签 使用 CSS 可以实现这一点吗 没有简单 优雅的 CSS
  • 有或没有美元符号反应[重复]

    这个问题在这里已经有答案了 我在反应函数返回语句中阅读了以下代码 return span charge span span amount span 我的问题是有或没有 它们只是代表要渲染的动态变量 对吗 我看到 和 有时散布在代码中 并且非
  • 如何在sqlite IPHONE中获取像列一样的rowNum

    我有一个像这样的 Sqlite 数据库表 没有上升 但我需要检索表按名称升序排列 当我将其设置为升序时 rowId 按混乱顺序更改如下 但我需要找回一些联系人数量有限 5每次都按升序排列 like 啊啊 Eeee and 然后 Ffff J
  • 如何使用reportlab将png添加到PDF

    我正在与报告实验室合作 我无法找到用鸭嘴兽添加 png 图像的方法 这是这里的一些示例代码http www tylerlesmann com 2009 jan 28 writing pdfs python adding images htt