【问题标题】:How to print multiple html files on Windows 8 with VBS如何使用 VBS 在 Windows 8 上打印多个 html 文件
【发布时间】:2015-10-27 04:03:48
【问题描述】:

我有一个包含 1650 个 HTML 文件的文件夹,由于地方当局的原因,这些文件也必须以纸质形式打印。

我尝试过使用经典的 ctrl+A(即使我尝试的数量较少),然后我在右键菜单中寻找 PRINT 标签,但有。

如果我选择打印多个 jpg 或 pdf 文件,则会出现 PRINT 语音。

我应该如何打印多个 html 文件?批处理文件? (我不知道怎么做)。

我也想过将 html 转换为 pdf,但使用 PDF Creator 和 PDF Architect 没有成功。

大家有什么经验可以分享吗? 我写了一些混合了 Tim 给出的代码和我在 stackoverflow 上找到的代码,但没有成功。

这里是:

Set objFSO = CreateObject("Scripting.FileSystemObject")
  objStartFolder = "C:\Users\mainUser\Desktop\ft"

  Set objFolder = objFSO.GetFolder(objStartFolder)
  Set colFiles = objFolder.Files

  For Each objFile in colFiles
  strFileName = objFile.Name

  If objFSO.GetExtensionName(strFileName) = "html" Then

        On Error Resume Next

        Const OLECMDID_PRINT = 6
        Const OLECMDEXECOPT_DONTPROMPTUSER = 2
        Const PRINT_WAITFORCOMPLETION = 2

        Dim objExplorer
        Set objExplorer = CreateObject("InternetExplorer.Application")
        objExplorer.Navigate objFolder.Path +"\"+ objFile.Name
        objExplorer.Visible = 1

        Do while objExplorer.ReadyState <> 4
            WScript.Sleep 1000 'milliseconds
        Loop

        oIExplorer.ExecWB OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER

  End If

  Next

它只是在 Internet Explorer 中打开一个 html。我以为它会打开所有文件,并且已经处于打印“模式”。 我想我错过了什么。

【问题讨论】:

  • 这可能是一个编程问题,但是如果您打开打印机并将所选文件从资源管理器窗口拖放到打印机图标上会发生什么?
  • 这里是“如何将 HTML 转换为 PDF”的链接win2pdf.com/doc/index.html?html-to-pdf.htm
  • 逐个文件转换?使用浏览器打开每个 html 文件然后打印它更容易。是否有机会将 html 文件批量转换为 pdf 文件?

标签: html batch-file pdf printing


【解决方案1】:

请参阅此线程以循环浏览目录中的文件:How to do something to each file in a directory with a batch script

然后你可以使用原生的PRINT 命令,这样你的批处理文件就可以这么简单了:

for /f "delims=|" %%f in ('dir /b c:\') do PRINT %%f


根据以下cmets:


啊。然后你可能不得不自动化 IE 来打印页面。按照以下思路使用 VBScript:

Const OLECMDID_PRINT = 6
Const OLECMDEXECOPT_DONTPROMPTUSER = 2
Const PRINT_WAITFORCOMPLETION = 2

objStartFolder = "C:\Users\mainUser\Desktop\ft"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(objStartFolder)
Set objExplorer = CreateObject("InternetExplorer.Application")

Set oShell = CreateObject("Shell.Application")

For Each objFile In objFolder.Files
    strFileName = objFile.Name
    If objFSO.GetExtensionName(strFileName) = "html" Then
        handle = objExplorer.Hwnd
        objExplorer.Navigate objFolder.Path + "\" + objFile.Name

        For Each Wnd In oShell.Windows
            If handle = Wnd.Hwnd Then Set objExplorer = Wnd
        Next

        Do While objExplorer.Busy
            WScript.Sleep 1000 'milliseconds
        Loop

        objExplorer.ExecWB OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER
    End If
Next
Set oShell = Nothing
Set objFSO = Nothing
Set objFolder = Nothing
Set objExplorer = Nothing

第三次更新:

我修复了上面的代码。我很抱歉。自从我使用 IE 以来已经有一段时间了。显然 IE 将每个选项卡视为 IE 的一个新实例,加载文档会“创建”一个新选项卡。因此,我们必须加载页面,然后再次找到我们的 IE 窗口,以便将其设置回变量。

【讨论】:

  • 您不会对 print 命令的输出感到满意,因为它旨在打印 text 文件,因此您将打印 HTML 源文本。 .
  • 我试过这个,但没有成功。我已经更改了文件所在的文件夹,但没有任何反应。它有什么问题?这是我的 bat 文件:for /f %%f in ('dir /b C:\Users\mainUser\Desktop\ric\') do echo %%f
  • 感谢@aschipfl!不,我确实需要打印格式化的 html 页面,而不是它的源代码。
  • @Tlm 非常感谢。只是一个愚蠢的问题....我应该在哪里编码你的sn-p? vbscript 应该放在哪里以及如何启动它?此外,我在该脚本中看不到任何递归。它似乎一次处理一个文件,不是吗?感谢您的耐心等待!
  • @Aptivus,VBScript 是带有 .vbs 文件扩展名的 .txt(文本)文件。创建一个新的文本文档并将代码粘贴到其中,然后将扩展名更改为 .vbs。不,我的代码中没有循环。遍历目录中的文件是一项非常基本的任务:stackoverflow.com/questions/16665748/…stackoverflow.com/questions/4200028/…stackoverflow.com/questions/3620773/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
  • 2021-04-17
  • 1970-01-01
  • 2014-12-27
相关资源
最近更新 更多