Правильный файл PDF был создан сценарием (выход которого не может быть напрямую написан на stdout, к сожалению). Скажем, имя файла - «myfile.pdf».Как распечатать файл pdf в stdout с помощью python?
Я хочу напечатать точный 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
. Таким образом, не похоже, что есть другая альтернатива (если текстовый режим не работает, а затем двоичный режим).
Теперь, конечно, проблема состоит в том, что вывод состоит из строк 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}
).
EDIT: * Я ищу решение для python3 и для системы Linux/Unix, а не для окон. * Мне нужно знать, как это сделать в python, потому что на самом деле это часть более крупного проекта, полностью написанного на python.
Почему вы не можете просто «cat some.pdf»? – armandino
Возможный дубликат: http://stackoverflow.com/questions/2374427/python-2-x-write-binary-output-to-stdout –
@armandino, потому что это на самом деле часть большого проекта, полностью написанного на питоне – zezollo