如何使用python将pdf文件打印到stdout?

正确的pdf文件已由脚本创建(不幸的是,其输出无法直接写入stdout).假设文件的名称是’myfile.pdf’.

我想将精确的pdf内容打印到stdout. (之间没有处理).

为了测试这个,我写了这个简短的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’编解码器无法解码位置10中的字节0xd0:无效的连续字节.所以,它看起来没有任何其他替代方案(如果文本模式不起作用,那么二进制模式).

当然,问题是输出由b’blablabla’行组成,不能用作pdf文件.要检查它,我将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’:无,’置信’: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())
上一篇:如何在django / python中读取日志文件后保持数据格式化


下一篇:Android逐行读取大文件