是否可以将PDF字节直接输入到PYPDF2中,而不是首先制作PDF文件



我正在使用linux;将RAW打印到端口9100返回"字节"类型。我想知道是否可以直接进入pypdf2,而不是先制作pdf文件并使用方法pdffilereader?

谢谢您的时间。

PyPDF2.PdfFileReader()将其第一个参数定义为:

- 文件对象或支持标准读取和寻求类似于文件对象的方法的对象。也可以是代表PDF文件路径的字符串。

因此,只要可以将其作为类似文件的流访问,就可以将任何数据传递给它。这是io.BytesIO()的理想选择。将您收到的 raw字节写入其中,然后查找回到 0,将对象传递给 PyPDF2.PdfFileReader(),然后完成。

是的,第一个评论正确。这是生成PDF bytes的代码示例,而无需创建PDF文件:

import io
from typing import List
from PyPDF2 import PdfFileReader, PdfFileWriter

def join_pdf(pdf_chunks: List[bytes]) -> bytes:
    # Create empty pdf-writer object for adding all pages here
    result_pdf = PdfFileWriter()
    
    # Iterate for all pdf-bytes
    for chunk in pdf_chunks:
        # Read bytes
        chunk_pdf = PdfFileReader(
            stream=io.BytesIO(      # Create steam object
                initial_bytes=chunk
            )
        )
        # Add all pages to our result
        for page in range(chunk_pdf.getNumPages()):
            result_pdf.addPage(chunk_pdf.getPage(page))
    
    # Writes all bytes to bytes-stream
    response_bytes_stream = io.BytesIO()
    result_pdf.write(response_bytes_stream)
    return response_bytes_stream.getvalue()

几年后,我将其添加到pypdf2文档中:

from io import BytesIO
# Prepare example
with open("example.pdf", "rb") as fh:
    bytes_stream = BytesIO(fh.read())
# Read from bytes_stream
reader = PdfFileReader(bytes_stream)
# Write to bytes_stream
writer = PdfFileWriter()
with BytesIO() as bytes_stream:
    writer.write(bytes_stream)

最新更新