提问人:Vijeet Deliwala 提问时间:10/12/2023 更新时间:10/16/2023 访问量:55
在 PHPExcel 或 PHPSpreadsheet 中从 Excel 中获取附加(嵌入)PDF
Fetch Attached (Embedded) Pdf from Excel in either PHPExcel or PHPSpreadsheet
问:
我有一个包含 PDF 的 excel 文件 - 嵌入(附加)在其中。
我正在尝试使用 PHPExcel 和 PHPSpreadsheet 来获取数据。我成功获取了图像,但无法访问其他对象,例如 PDF
我的第一次尝试是使用 PHP,但如果可能的话,我也没问题
答:
1赞
K J
10/13/2023
#1
XLSX 是 Excel 组件的 Zip 容器,因此我们可以打开 zip 文件并操作内容。
我们感兴趣的对象位于“嵌入”文件夹中,如果只有一个嵌入,则很容易提取为 oleObject1.bin,因此一行要提取,一行要启动编辑器或自定义 python 查找并保存。
在该 BIN 文件中,我们可以在 00002240 中查找 PDF 标题的地址%PDF-
另文件查找其 EOF @ 00004794%%EOF\x0A
现在使用任何方法,如正面和反面,拼接出PDF,在本例中为2554字节,并另存为BINary.pdf
我编写了一个脚本来从 Windows 操作系统上的办公室垃圾箱文件中提取 PDF,因此在 un TAR 之后,Windows 用户可以运行此脚本。注意:它有 2 个小的 .exe 依赖项,您需要下载并指定路径,以便查看和编辑文件的开头。对于 PHP,您应该能够在 Python 中模拟它,因此对于初学者,请参阅 https://stackoverflow.com/a/56742848/10802527
@echo off
REM dependencies are
REM Didier Stevens middle.exe from https://blog.didierstevens.com/programs/binary-tools/
REM Mark Russinovich strings.exe from https://learn.microsoft.com/en-us/sysinternals/downloads/strings
REM both above to be placed on path or folder e.g.
set "utils=C:\Downloads\Apps\utils"
setlocal enableDelayedExpansion
if not exist "%~dpn1.bin" echo %0 requires a bin file to work on & pause & exit /b
"%utils%\strings.exe" -o "%~1"|Findstr "%PDF-">AcroHEAD.txt
set /p HEAD=<AcroHEAD.txt
if [%HEAD%]==[] echo %PDF- Header not found & del Acro????.txt & pause & exit /b
echo !HEAD! >AcroHEAD.txt
for /f "tokens=1 delims=:" %%f in (AcroHEAD.txt) do set START=%%f
"%utils%\strings.exe" -o "%~1"|Findstr "%%EOF">AcroTAIL.txt
for /f "tokens=1 delims=:" %%f in (AcroTAIL.txt) do set TAIL=%%f
set /a LEN=%TAIL%+6-%START%
del Acro????.txt
"%utils%\middle.exe" "%~1" %START% %LEN% "%~dpn1.pdf"
评论