все.
У меня есть несколько тысяч 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.
Заранее спасибо.