簡體   English   中英

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

[英]How to print a pdf file to stdout using python?

正確的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' codec can't decode byte 0xd0 in position 10: invalid continuation byte 所以,它看起來沒有任何其他替代方案(如果文本模式不起作用,那么二進制模式)。

當然,問題是輸出由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': None, 'confidence': 0.0} )。

編輯:*我正在尋找python3和Linux / Unix系統的解決方案,而不是Windows。 *我需要知道如何在python中執行此操作,因為它實際上是完全用python編寫的更大項目的一部分

我認為你的問題是你正在逐行閱讀,因此增加額外的回車。 我在OSX上嘗試並完美運行:

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

with open('myfile.pdf', mode='rb') as pdf_file:
        print(pdf_file.read())

為了完整起見,如@zezollo所述,在Linux中,使用print函數仍然會損壞文件,因此有必要直接在緩沖區上編寫:

import sys

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

答案實際上是使用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())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM