Распечатать или конвертировать HTML-файл в PDF, используя VBA / Excel - PullRequest
0 голосов
/ 09 июня 2018

все.

У меня есть несколько тысяч HTML-файлов, которые я должен прикрепить к сообщениям электронной почты и отправить.Проблема состоит в том, что в файлах есть изображения, встроенные в теги img, поэтому, когда пользователь получает и открывает вложенный файл, он отображается неправильно.

Первой идеей, с которой мне пришлось решить эту проблему, было открытие каждого файла.в браузере, а затем распечатать в PDF.

Я пришел с двумя подходами, и ни один из них не работает должным образом:

1 - Открытие HTML-файла в Internet Explorer, а затем с помощью PDFcreatorобъект для печати, путается с некоторым штрих-кодом, закодированным в html, превращая созданный pdf в бесполезный.

2 - Открытие html-файла в Internet Explorer, а затем использование виртуального принтера «Microsoft Print to PDF» сохраняет файл как положено -все изображения, правильные штрих-коды - но он запрашивает имя файла и путь сохранения для каждого файла перед сохранением.

Второй подход, кажется, возвращает лучший результат.На самом деле это просто не практично.

Итак, есть ли способ избежать запроса принтера «Microsoft Print to PDF», программного задания пути и имени файла в Excel vba?

И как это сделать?я заставляю ExecWB ждать перед началом нового цикла?

Подход PDFcreator:

Sub PrintViaPDFCREATOR()

    'Creates PDF Creator object, killing any if already opened:    
    Dim pdfjob As PDFCreator.clsPDFCreator
    Do
        DoEvents
        bRestart = False
        Set pdfjob = New PDFCreator.clsPDFCreator
        If pdfjob.cStart("/NoProcessingAtStartup") = False Then
            Shell "taskkill /f /im PDFCreator.exe", vbHide
            Set pdfjob = Nothing
            bRestart = True
        End If
    Loop Until bRestart = False

    Dim IE As InternetExplorer
    Set IE = New InternetExplorer
    IE.Visible = True

    Dim FSO As Scripting.FileSystemObject
    Dim objfolder As Scripting.Folder
    Dim objfiles As Scripting.Files
    Dim F As Scripting.File

    FilePath = ThisWorkbook.Path & "\MyFolder\"
    Set FSO = New Scripting.FileSystemObject
    Set objfolder = FSO.GetFolder(FilePath)
    Set objfiles = objfolder.Files
    For Each F In objfiles

        IE.Navigate2 F.Path
        Do While IE.readyState <> 4
            DoEvents
        Loop

        'PDF creator Settings
        With pdfjob
            .cOption("UseAutoSave") = 1
            .cOption("UseAutosaveDirectory") = 1
            .cOption("AutosaveDirectory") = FilePath
            .cOption("AutosaveFilename") = Replace(F.Name, ".htm", ".pdf")
            .cOption("AutosaveFormat") = 0    ' 0 = PDF
            .cClearCache
        End With

        'Prints without prompt :)
        IE.ExecWB 6, 2, "", ""

        'Hold on til Job is finished
        Do Until pdfjob.cCountOfPrintjobs = 1
            DoEvents
        Loop

        pdfjob.cPrinterStop = False

        'Check if there is any file in the queue
        Do Until pdfjob.cCountOfPrintjobs = 0
            DoEvents
        Loop

    Next

    pdfjob.cClose
    Set pdfjob = Nothing

End Sub

Проблема с этим кодом: в html-файле есть несколько штрих-кодов, составленных из множества div sот 1 до 2 пикселей границы.С помощью этого метода PDF имеет неузнаваемые штрих-коды.Кажется, что он объединяет некоторые «полосы» во время преобразования, что делает его недоступным для оптического сканера.

Подход Microsoft Print to PDF:

Sub PrintViaMicrosoftToPDF()
    'Save the current active printer for later reset:
    Dim OldPrinter
    OldPrinter = Trim(Split(Application.ActivePrinter, "in")(0))

    'Define the new active printer
    CreateObject("WScript.Network").SetDefaultPrinter "Microsoft Print to PDF"

    Dim objShell
    Set objShell = CreateObject("WScript.Shell")

    Dim IE As InternetExplorer
    Set IE = New InternetExplorer
    IE.Visible = True

    Dim FSO As Scripting.FileSystemObject
    Dim objfolder As Scripting.Folder
    Dim objfiles As Scripting.Files
    Dim F As Scripting.File

    FilePath = ThisWorkbook.Path & "\MyFolder\"
    Set FSO = New Scripting.FileSystemObject
    Set objfolder = FSO.GetFolder(FilePath)
    Set objfiles = objfolder.Files

    For Each F In objfiles

        IE.Navigate2 F.Path
        Do While IE.readyState <> 4
            DoEvents
        Loop

        'Prints but prompts :(
        IE.ExecWB 6, 2, "", ""

    Next

    'Reset Printer
    CreateObject("WScript.Network").SetDefaultPrinter OldPrinter
End Sub

Проблема с этим кодом: он печатаетправильный документ в формате pdf, но пользователь должен выбрать путь сохранения и имя файла.

Если есть другой способ отправки html-файлов, прикрепленных к сообщению eamil, с вложенными изображениями без преобразования или с другими подходами относительноПреобразование файлов, я тоже принимаю.

Но я ограничен Excel / Vba.

Заранее спасибо.

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