簡體   English   中英

內存轉換器中的Python Wand.image PDF至JPG

[英]Python Wand.image PDF to JPG in memory converter

我正在嘗試編寫一些代碼,將駐留在網絡上的PDF轉換為一系列jpg。

我得到的工作代碼是:

1)需要pdf

2)將其保存到磁盤

3)將其轉換為JPG,並保存到磁盤。

有沒有一種方法可以編寫相同的代碼(嘗試在下面的代碼中拋出錯誤),該方法將從互聯網上獲取PDF,但將其保留在內存中(以防止程序寫入磁盤/從磁盤讀取),然后將其轉換為JPG(要上傳到AWS s3)?

我以為這會工作:

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

但我得到以下錯誤:

“>中的Exception TypeError:TypeError(“類型'NoneType'的對象沒有len()”,)>已忽略”

完整代碼以及要轉換的正確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,但是從docs來看,顯然有很多替代方法可以構建它。

首先, urlopen是一個類似文件的對象。 當然,“類文件對象”這個詞有些含糊,並非所有類文件對象都適用於所有希望有類文件對象的API(例如,API可能希望能夠在fileno中調用fileno並從中讀取fileno 。 POSIX級…),但這至少值得一試(注意file而不是filename ):

with Image(file=f) as img:

如果那不起作用,您可以隨時將數據讀入內存:

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

不太理想(如果您有巨大的文件),但是至少不必將其存儲在磁盤上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM