Pri*_*muS 5 python pdf pypdf bytesio
我有一个函数可以从 PDF 文件中获取页面,并使用(PIL Fork)PyPDF2将第一页转换为 png(或 jpg)Pillow
from PyPDF2 import PdfFileWriter, PdfFileReader
import os
from PIL import Image
import io
# Open PDF Source #
app_path = os.path.dirname(__file__)
src_pdf= PdfFileReader(open(os.path.join(app_path, "../../../uploads/%s" % filename), "rb"))
# Get the first page of the PDF #
dst_pdf = PdfFileWriter()
dst_pdf.addPage(src_pdf.getPage(0))
# Create BytesIO #
pdf_bytes = io.BytesIO()
dst_pdf.write(pdf_bytes)
pdf_bytes.seek(0)
file_name = "../../../uploads/%s_p%s.png" % (name, pagenum)
img = Image.open(pdf_bytes)
img.save(file_name, 'PNG')
pdf_bytes.flush()
Run Code Online (Sandbox Code Playgroud)
这会导致错误:
OSError:无法识别图像文件<_io.BytesIO对象位于0x0000023440F3A8E0>
我发现一些线程有类似的问题(PIL open() 方法不适用于 BytesIO),但我看不出我在这里错在哪里,因为我已经pdf_bytes.seek(0)添加了。
任何提示表示赞赏
每份文件:
\n\n\n\n\nwrite(stream) 将添加到此对象的页面集合作为PDF文件写入\n。
\n\n参数:stream \xe2\x80\x93 要写入文件的对象。该对象必须支持 write 方法和tell 方法,类似于文件对象。
\n
因此对象 pdf_bytes 包含 PDF 文件,而不是图像文件。
\n\n之所以有像上面这样的代码是因为:有时,pdf文件只包含一个jpeg文件作为其内容。如果您的 pdf 只是一个普通的 pdf 文件,您不能只读取字节并将其解析为图像。
\n\n并参考更强大的实现:/sf/answers/2388153071/
\n