python - 如何使用 python 将 pdf 文件打印到标准输出?

标签 python linux python-3.x pdf readfile

已通过脚本创建了正确的 pdf 文件(不幸的是,其输出不能直接写入标准输出)。假设文件名为“myfile.pdf”。

我想将准确的 pdf 内容打印到标准输出。 (中间没有处理)。

为了对此进行测试,我编写了这个简短的 read_pdf.py 脚本:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

with open('myfile.pdf', mode='rb') as pdf_file:
    for line in pdf_file:
        print(str(line))

我使用 'rb' 模式,因为在文本模式下读取它会导致 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in position 10: invalid continuation byte 。因此,看起来没有任何其他选择(如果文本模式不起作用,则二进制模式)。

当然,现在的问题是输出包含不能用作 pdf 文件的 b'blablabla' 行。为了检查它,我将 read_pdf.py 重定向到一个文件并尝试使用 pdf 查看器打开它,当然它不起作用:

$ ./read_pdf.py > test_output.pdf
$ evince test_output.pdf
Syntax Error: Couldn't find trailer dictionary
Syntax Error: Couldn't read xref table
Syntax Error: Couldn't find trailer dictionary
Syntax Error: Couldn't read xref table

那么,正确的做法是什么?我没有检查任何 pdf 专用库,因为它看起来没有必要,我希望能够阅读和打印正确的内容,而无需为此导入 pdf 库。

chardet.detect(pdf_file.read()) 无能为力(它返回了 {'encoding': None, 'confidence': 0.0})。

编辑: * 我正在寻找 python3 和 Linux/Unix 系统的解决方案,而不是 Windows。 * 我需要知道如何在 python 中执行此操作,因为它实际上是一个完全用 python 编写的更大项目的一部分

最佳答案

答案实际上是使用sys.stdout.buffer.write(),而不是print(),此外还有pdf_file.read( ):

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys

with open('myfile.pdf', mode='rb') as pdf_file:
    sys.stdout.buffer.write(pdf_file.read())

关于python - 如何使用 python 将 pdf 文件打印到标准输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38210245/

相关文章:

java - 使用 Batik to SVG 将 SVG 转换为 PNG 时,Linux 和 OSX 之间的文本差异

c - 需要澄清有关 vfork 使用的信息

python - PonyORM:在不知道哪些项目已经存在的情况下,向小马数据库添加新项目的最有效方法是什么?

c - 将 ncurses 窗口保持在前台

python - 我想从带有字符串的列表中提取数字

javascript - Django - 限制用户访问相同的值

python-3.x - 张量板错误 : No dashboards are active for current data set

python - 在具有共享 x 轴的子图中拟合对数正态分布的直方图

python - Pycharm抛出: ModuleNotFoundError: No module named 'numpy' error even though Numpy is installed

python - 如何使用 Intersphinx 引用特定文档中的类?