Язык работы принтера -> PDF
Я получил нечитаемый человеком файл, который хотел бы сделать читаемым человеком.
Как мне получить текстовое содержимое из следующего файла:
thufir@dur:~/Documents$
thufir@dur:~/Documents$ file mystery.pdf
mystery.pdf: HP Printer Job Language data
thufir@dur:~/Documents$
thufir@dur:~/Documents$ pdfinfo mystery.pdf
Syntax Warning: May not be a PDF file (continuing anyway)
Syntax Error: Couldn't find trailer dictionary
Syntax Error: Couldn't read xref table
thufir@dur:~/Documents$
thufir@dur:~/Documents$ head -n 2 mystery.pdf
%-12345X@PJL
@PJL ENTER LANGUAGE = HBP
thufir@dur:~/Documents$
Я не думаю, что это PDF-файл, но был print to file
'вместо export pdf
', или аналогичный, так что результатом является файл в формате PJL, а не в формате PDF.
смотрите также:
http://forums.fedoraforum.org/showthread.php?t=247913
Я могу использовать ghostscript, чтобы вернуть его в нечто читаемое человеком?
Это около 4000 строк:
�x]�x�
при непосредственном рассмотрении с кошкой или подобным.
2 ответа
@PJL
строки обозначают заголовок языка задания на печать, который был вставлен перед фактическим заданием на печать. PJL используется для управления параметрами задания на печать (такими как двусторонняя печать, выбор лотка для бумаги, сшивание, перфорирование, сворачивание вывода). Это было изобретено HP.
Формат задания на печать может быть любым - многие поставщики принтеров поддерживают его и используют для своего (собственного) языка принтера.
Интересная часть, что следует после @PJL
строки заголовка. Это может быть PDF, PostScript, PCL или что-то еще.
Также интересна строчка @PJL ENTER LANGUAGE = ...
- обычно он достоверно указывает формат потока данных печати.
В случае с mystery.pdf это HBP
формат, с которым я пока еще не сталкивался.
Если действительно существует следующий открытый или полуоткрытый формат (в нарушение того, что ENTER LANGUAGE = ...
строка), как PostScript или PCL, Ghostscript или GhostPDL смогут конвертировать его в PDF. Просто удалите все @PJL
строки из заголовка в первую очередь. Затем запустите:
Для файлов PostScript:
gs -o out.pdf -sDEVICE=pdfwrite input-file
Для файлов PCL:
pcl6 -o out.pdf -sDEVICE=pdfwrite input-file
Курт ответ правильный. Единственное добавление, которое я хотел бы сделать, заключается в том, что при работе с файлами PRN из Windows существует несколько типов файлов, которые печатаются в соответствии с типом файла PRN, поэтому убедитесь, что это файл PCL. Даже после этого pcl использовал MS PCLXL, и в этом случае pcl6 отключился. Скачайте ghostpcl и используйте команду:
gpcl6-920-linux_x86_64 -sDEVICE = pdfwrite -o output.pdf input-file