很久以前,我将开源 PDFPrinter 与 Excel 结合使用。这是我编写的一些代码,似乎可以满足您的要求。也许您可以以此作为您自己解决方案的起点?
'将保存的文件打印为同一目录下的pdf
KTCurrentFilePath = ActiveWorkbook.Path 'Store current FilePath
'Define Variables for PDF printjob
Dim pdfjob As Object
Dim KTPDFName As String
Dim KTPDFPath As String
Dim KTPCurrentPrinter As String
'设置变量值
KTPDFName = Range("MyPDFName").Value & ".pdf"
KTPDFPath = ActiveWorkbook.Path & Application.PathSeparator
KTPCurrentPrinter = Application.ActivePrinter
'检查工作表是否为空,如果是则退出
If IsEmpty(ActiveSheet.UsedRange) Then Exit Sub
'启动 PDF 引擎
Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
On Error GoTo 0
With pdfjob
If .cStart("/NoProcessingAtStartup") = False Then
MsgBox "Can't initialize PDFCreator.", vbCritical + _
vbOKOnly, "PrtPDFCreator"
Application.ActivePrinter = KTPCurrentPrinter
Exit Sub
End If
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
.cOption("AutosaveDirectory") = KTPDFPath
.cOption("AutosaveFilename") = KTPDFName
.cOption("AutosaveFormat") = 0 ' 0 = PDF
.cClearCache
End With
'将文档打印为 PDF
ActiveSheet.PrintOut copies:=1, ActivePrinter:="PDFCreator"
'等到打印作业进入打印队列
Do Until pdfjob.cCountOfPrintjobs = 1
DoEvents
Loop
pdfjob.cPrinterStop = False
'等到 PDF 创建完成后再释放对象
Do Until pdfjob.cCountOfPrintjobs = 0
DoEvents
Loop
pdfjob.cClose
Set pdfjob = Nothing
'重置打印机为默认值
Application.ActivePrinter = KTPCurrentPrinter
结束子
问候,
罗伯特·伊布林克