【问题标题】:How can I decode a .bin into a .pdf如何将 .bin 解码为 .pdf
【发布时间】:2019-10-28 10:28:46
【问题描述】:

我从一个 pdf 格式的 Excel 电子表格中提取了一个嵌入对象,但 excel zip 文件将嵌入对象保存为二进制文件。

我正在尝试读取二进制文件并将其恢复为 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))

Link to the object file on github

【问题讨论】:

  • 您能否在此处将“二进制文件”发布到您的问题中,以便其他人可以看到您从 excel 中得到了什么?
  • 我添加了一个链接

标签: python-3.x pdf base64


【解决方案1】:

谢谢瑞恩,我能看到你在说什么。这是供将来参考的解决方案。

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)

【讨论】:

    【解决方案2】:

    bin 文件包含有效的 PDF。不需要解码。 bin 文件虽然在 PDF 前后确实有需要修剪的字节。

    要获取第一个字节,请查找第一次出现的字符串 %PDF-

    要获取最后一个字节,请查找 last %%EOF

    注意,我不知道 Excel 添加的前导/尾随字节是什么“格式”。如果上面的任何一个 ascii 字符串也可能在前导/尾随数据中,则上述解决方案显然不起作用。

    【讨论】:

    • 嗨瑞安,我解决了这个问题,但我还有另一个问题。如果文件是 VSD 或 DOCX 或其他类型怎么办。是否有第一次和最后一次出现其他类型的文件,例如 PDF?
    【解决方案3】:

    您应该尝试使用允许您编写 pdf 文件的 python 库,例如 reportlabpyPDF

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-04
      • 1970-01-01
      • 2020-12-20
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      相关资源
      最近更新 更多