【问题标题】:Python Wand.image PDF to JPG in memory converter内存转换器中的 Python Wand.image PDF 到 JPG
【发布时间】:2018-03-09 00:52:18
【问题描述】:

我正在尝试编写一些代码,将驻留在网络上的 PDF 转换为一系列 jpg。

我得到了工作代码:

1) 获取pdf

2) 将其保存到磁盘

3) 将其转换为 JPG,然后保存到磁盘。

有没有办法编写相同的代码(尝试下面的代码,这会引发错误),可以从 Internet 获取 PDF,但将其保存在内存中(以防止程序写入磁盘/从磁盘读取),然后将其转换为 JPG(要上传到 AWS s3)?

我认为这会起作用:

f = urlopen("https://s3.us-east-2.amazonaws.com/converted1jpgs/example.pdf") #file to process

但我收到以下错误:

"Exception TypeError: TypeError("object of type 'NoneType' has no len()",) in >被忽略"

完整代码,以及我想要转换的正确 PDF 文件。注意:如果我将 f= 替换为保存在磁盘上的 PDF 的位置,则代码有效:

from urllib2 import urlopen
from wand.image import Image

#location on disk
save_location = "/home/bob/Desktop/pdfs to convert/example1"

#file prefix
test_id = 'example'
print 1
f = urlopen("https://s3.us-east-2.amazonaws.com/converted1jpgs/example.pdf")
print 2
print type(f)

with Image(filename=f) as img:
    print('pages = ', len(img.sequence))
    with img.convert('jpg') as converted:
        converted.save(filename=save_location+"/"+test_id+".jpg")

【问题讨论】:

    标签: python wand


    【解决方案1】:

    urlopen 的结果显然不是文件名,所以你不能传入filename=f 并期望它工作。

    我没有安装 Wand,但是从 the docs 开始,显然有很多替代方法可以构建它。

    首先,urlopen 是一个类似文件的对象。当然,“类文件对象”是一个有点模糊的术语,并不是所有类文件对象都适用于所有需要类文件对象的 API(例如,API 可能期望能够调用 fileno 并从中读取在 POSIX 级别……),但这至少值得一试(注意 file 而不是 filename):

    with Image(file=f) as img:
    

    如果这不起作用,您可以随时将数据读入内存:

    buf = f.read()
    with Image(blob=buf) as img:
    

    不太理想(如果您有巨大的文件),但至少您不必将其存储在磁盘上。

    【讨论】:

    • 感谢您的建议。我在这里的代码是通过 jpg 链接传递的,然后从中工作。因此,不确定为什么传递 PDF 不起作用:(docs.wand-py.org/en/0.4.1/guide/resizecrop.html
    • file = f 而不是 filename = f 成功了。德普。谢谢!
    猜你喜欢
    • 2010-12-11
    • 1970-01-01
    • 2010-11-20
    • 2016-09-17
    • 2019-05-29
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    相关资源
    最近更新 更多