正确的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())