Я пытаюсь создать программу, которая использует pdfminer для чтения таблицы символов DnD (заполняемый PDF) и вставки вставок в словарь.После редактирования PDF и повторного запуска программы, я получаю странную последовательность символов при печати элементов словаря.Код:
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdftypes import resolve1
import collections
filename = "Edited_CS.pdf"
fp = open(filename, 'rb')
my_dict = {}
parser = PDFParser(fp)
doc = PDFDocument(parser)
fields = resolve1(doc.catalog['AcroForm'])['Fields']
# Checks if PDF file is blank
if isinstance(fields, collections.abc.Sequence) is False:
print("This Character Sheet is blank. Please submit a filled Character Sheet!")
else:
for i in fields:
field = resolve1(i)
name, value = field.get('T'), field.get('V')
if value is None or str(value)[2:-1] == "":
value = "b'None'"
my_dict[str(name)[2:-1]] = str(value)[2:-1]
for g in list(my_dict.items()):
print(g)
Вывод из неотредактированного файла PDF:
('ClassLevel', 'Assassin 1')
('Background', 'Lone Survivor')
('PlayerName', 'None')
('CharacterName', 'Tumas Mitshil')
('Race ', 'Human')
etc...
Вывод после его редактирования (я полностью изменил ClassLevel и т. Д. В PDF):
('ClassLevel', '\\xfe\\xff\\x00C\\x00l\\x00a\\x00s\\x00s\\x00L\\x00e\\x00v\\x00e\\x00l')
('Background', '\\xfe\\xff\\x00B\\x00a\\x00c\\x00k\\x00g\\x00r\\x00o\\x00u\\x00n\\x00d\\x00r')
('PlayerName', '\\xfe\\xff\\x00P\\x00l\\x00a\\x00y\\x00e\\x00r\\x00N\\x00a\\x00m\\x00e')
('CharacterName', '\\xfe\\xff\\x00T\\x00h\\x00o\\x00m\\x00a\\x00s')
('Race ', '\\xfe\\xff\\x00R\\x00a\\x00c\\x00e')
('Alignment', '\\xfe\\xff\\x00A\\x00l\\x00i\\x00g\\x00n\\x00m\\x00e\\x00n\\x00t')
etc...
Я знаю, что это какая-то кодировка, и несколько поисков в Google привели меня к выводу, что это кодировка UTF-8, поэтому я попытался декодировать PDF при открытии файла:
fp = open(filename, 'rb').read().decode('utf-8')
К сожалению, я столкнулся с ошибкой:
Traceback (most recent call last):
File "main.py", line 16, in <module>
fp = open(filename, 'rb').read().decode('utf-8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe2 in position 10: invalid continuation byte
Когда я впервые сделал PDF, я использовал Adobe Acrobat.Однако я использовал Microsoft Edge для редактирования файла, что привело к проблеме, с которой я столкнулся.Вот файлы:
Исходный файл Отредактированный файл
Есть ли способ правильно декодировать это?Есть ли способ кодировать отредактированный pdf, чтобы его можно было без проблем загрузить в python?И если это закодировано, есть ли другие формы кодирования, и как бы я их расшифровал?
Любая помощь будет принята с благодарностью.