Python Wand.image 内存转换器中的 PDF 到 JPG
Python Wand.image PDF to JPG in memory converter
我正在尝试编写一些代码,将驻留在 Web 上的 PDF 转换为一系列 jpg。
我得到的工作代码是:
1) 获取 pdf
2) 将其保存到磁盘
3) 将其转换为 JPG,保存到磁盘。
有没有办法编写相同的代码(尝试下面的代码,会抛出错误),从互联网上获取 PDF,但将其保存在内存中(以防止程序写入 disk/reading 从磁盘),然后将其转换为 JPG(将上传到 AWS s3)?
我认为这会起作用:
f = urlopen("https://s3.us-east-2.amazonaws.com/converted1jpgs/example.pdf") #file to process
但是我收到以下错误:
"Exception TypeError: TypeError(" 'NoneType' 类型的对象没有 len()",) > ignored"
完整代码,以及我要转换的正确 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")
urlopen
的结果显然不是文件名,因此您不能传入 filename=f
并期望它起作用。
我没有安装 Wand,但从 the docs 开始,显然有很多其他方法可以构建它。
首先,urlopen
是一个 file-like 对象。当然 "file-like object" 是一个有点模糊的术语,并非所有 file-like 对象都适用于所有需要 file-like 对象的 API(例如,API 可能期望能够调用 fileno
并在 POSIX 级别读取它......),但这至少值得尝试(注意 file
而不是 filename
):
with Image(file=f) as img:
如果这不起作用,您可以随时将数据读入内存:
buf = f.read()
with Image(blob=buf) as img:
不太理想(如果你有巨大的文件),但至少你不必将它存储在磁盘上。
我正在尝试编写一些代码,将驻留在 Web 上的 PDF 转换为一系列 jpg。
我得到的工作代码是:
1) 获取 pdf
2) 将其保存到磁盘
3) 将其转换为 JPG,保存到磁盘。
有没有办法编写相同的代码(尝试下面的代码,会抛出错误),从互联网上获取 PDF,但将其保存在内存中(以防止程序写入 disk/reading 从磁盘),然后将其转换为 JPG(将上传到 AWS s3)?
我认为这会起作用:
f = urlopen("https://s3.us-east-2.amazonaws.com/converted1jpgs/example.pdf") #file to process
但是我收到以下错误:
"Exception TypeError: TypeError(" 'NoneType' 类型的对象没有 len()",) > ignored"
完整代码,以及我要转换的正确 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")
urlopen
的结果显然不是文件名,因此您不能传入 filename=f
并期望它起作用。
我没有安装 Wand,但从 the docs 开始,显然有很多其他方法可以构建它。
首先,urlopen
是一个 file-like 对象。当然 "file-like object" 是一个有点模糊的术语,并非所有 file-like 对象都适用于所有需要 file-like 对象的 API(例如,API 可能期望能够调用 fileno
并在 POSIX 级别读取它......),但这至少值得尝试(注意 file
而不是 filename
):
with Image(file=f) as img:
如果这不起作用,您可以随时将数据读入内存:
buf = f.read()
with Image(blob=buf) as img:
不太理想(如果你有巨大的文件),但至少你不必将它存储在磁盘上。