|
|
发表于 2025-12-29 20:31:33
|
显示全部楼层
本帖最后由 aloha20200628 于 2025-12-29 20:49 编辑
回复 9# gaoyinfei
用 win11 内置的 word 2021 实测了6个示例样本,均有加载问题,用2楼代码强行转换的结果与源文件相比有内容缺失和错位,再用第三方 wkHTMLtoPDF.exe 实测,被报错无法解析外部资源或用户数据路径等问题而失败...
只好回到 mht, mhtml 的原生环境即浏览器中尝试,好在 msedge 浏览器(v142版)可以完好打开显示全部示例样本,但采用 msedge 命令行批处理方法必须启用 headless 方式,此方式不能完整继承交互方式的性能,最终归于失败。如此只能参考利用模拟键自动操作 msedge 的方法,获得基本成功,但要满足以下一些条件以便确保模拟键自动操作得以成功:
一。源文件名尽量不要包含中文字符,如用英文字母+数字命名
二。须关闭 msegde 浏览器运行时弹窗,如版本更新,翻译当前页面等
三。要根据批处理中内容最多和最复杂的源文件调整代码中的变量 tk 值(毫秒数)
以下代码存为 test.bat 运行,与源文件 *.mht, *.mhtml 同目录,代码中变量 edge=... 用来定义 msedge.exe 的安装位置(须根据实况修改),转换结果文件 *.pdf 存储在 msedge 浏览器默认的下载目录,运行本脚本之前,当前目录中不要有与源文件同名的PDF文件。
- 2>1/* ::
- @echo off &taskkill /f /im msedge.exe>nul 2>nul
- dir /b/a-d *.mht *.mhtml|cscript /nologo /e:jscript "%~f0"
- taskkill /f /im msedge.exe>nul 2>nul
- for /f "delims=" %%d in ('powershell -nop -c "(gc '%LOCALAPPDATA%\Microsoft\Edge\User Data\Default\Preferences' -enc utf8|convertFrom-json).savefile.default_directory" ') do dir /b/a-d "%%d\*.pdf"
- pause&exit/b */
- s=WSH.stdin, w=WSH.createObject('wscript.shell'), tk=6000;
- edge='C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe';
- while (!s.atendofstream) {
- inF=s.readline(), outF=inF+'.pdf';
- w.run('"'+edge+'" "file://c:/temp/'+inF+'"');
- WSH.sleep(2000), w.sendkeys('^p'); //打印输出
- WSH.sleep(tk), w.sendkeys('{enter}'); //确认'另存为'
- WSH.sleep(1000), w.sendkeys(outF); //键入输出文件名
- w.sendkeys('{enter}'), WSH.sleep(3000), w.sendkeys('%{F4}'); //关闭浏览器窗口
- WSH.sleep(3000); }
- WSH.quit();
复制代码 |
评分
-
查看全部评分
|