Как я могу декодировать .bin в .pdf - PullRequest
0 голосов
/ 13 июня 2019

Я извлек внедренный объект из электронной таблицы Excel, которая была в формате PDF, но в ZIP-файле Excel сохранены внедренные объекты в виде двоичных файлов.

Я пытаюсь прочитать двоичный файл и вернуть его в исходный формат в формате PDF. Я взял код из другого вопроса с похожей проблемой, но при попытке открыть PDF-файл Adobe выдает ошибку «невозможно открыть, потому что файл поврежден ... неправильно декодирован ..»

Кто-нибудь знает способ сделать это?

with open('oleObject1.bin','rb') as f: 
    binaryData = f.read() 
print(binaryData)

with open(os.path.expanduser('test1.pdf'), 'wb') as fout:
    fout.write(base64.decodebytes(binaryData))

Ссылка на объектный файл на github

Ответы [ 3 ]

1 голос
/ 24 июня 2019

Спасибо, Райан, я смог понять, о чем ты говоришь.Вот решение для дальнейшего использования.

str1 = b'%PDF-'  # Begin PDF
str2 = b'%%EOF'  # End PDF

with open('oleObject1.bin', 'rb') as f:
    binary_data = f.read()
print(binary_data)

# Convert BYTE to BYTEARRAY
binary_byte_array = bytearray(binary_data)

# Find where PDF begins
result1 = binary_byte_array.find(str1)
print(result1)

# Remove all characters before PDF begins
del binary_byte_array[:result1]
print(binary_byte_array)

# Find where PDF ends
result2 = binary_byte_array.find(str2)
print(result2)

# Subtract the length of the array from the position of where PDF ends (add 5 for %%OEF characters)
# and delete that many characters from end of array
print(len(binary_byte_array))
to_remove = len(binary_byte_array) - (result2 + 5)
print(to_remove)

del binary_byte_array[-to_remove:]
print(binary_byte_array)

with open(os.path.expanduser('test1.pdf'), 'wb') as fout:
    fout.write(binary_byte_array)
0 голосов
/ 17 июня 2019

Файл bin содержит действительный PDF.Там не требуется расшифровка.Однако файл bin имеет байты до и после PDF, которые необходимо обрезать.

Чтобы получить первый байт, найдите первое вхождение строки %PDF-

Чтобы получить последний байтобратите внимание на last %%EOF.

Обратите внимание, я не знаю, в каком формате форматируются начальные / конечные байты, добавляемые в Excel.Приведенное выше решение, очевидно, не будет работать, если любая из приведенных выше строк ascii также может содержаться в ведущих / конечных данных.

0 голосов
/ 13 июня 2019

Вы должны попробовать использовать библиотеку python, которая позволяет вам писать pdf файлы, такие как reportlab или pyPDF

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...