【问题标题】:Convert PDF page to image with pyPDF2 and BytesIO使用 pyPDF2 和 BytesIO 将 PDF 页面转换为图像
【发布时间】:2017-03-11 09:27:05
【问题描述】:

我有一个函数可以通过 pyPdf2 从 PDF 文件中获取页面,并且应该使用 Pillow(PIL Fork)将第一页转换为 png(或 jpg)

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()

这会导致错误:

OSError: 无法识别图像文件 <_io.bytesio object at>

我发现了一些有类似问题的线程,(PIL open() method not working with BytesIO),但我看不出我在哪里错了,因为我已经添加了pdf_bytes.seek(0)

任何提示表示赞赏

【问题讨论】:

    标签: python pdf pypdf2 bytesio


    【解决方案1】:

    每个文档:

    write(stream) 将添加到此对象的页面集合写出 作为 PDF 文件。

    参数:stream – 将文件写入的对象。对象必须 支持write方法和tell方法,类似于文件 对象。

    所以对象 pdf_bytes 包含一个 PDF 文件,而不是一个图像文件。

    之所以有上述代码的原因是:有时,pdf文件只包含一个jpeg文件作为其内容。如果您的 pdf 只是一个普通的 pdf 文件,则不能只读取字节并将其解析为图像。

    并称为更健壮的实现:https://stackoverflow.com/a/34116472/334999

    【讨论】:

      猜你喜欢
      • 2015-08-12
      • 1970-01-01
      • 2019-01-08
      • 2015-09-18
      • 2012-04-24
      • 2012-12-30
      • 1970-01-01
      • 2019-12-26
      • 1970-01-01
      相关资源
      最近更新 更多