由于工作需要,使用了两种方式实现了word文件转PDF的功能。以下的程序是我使用VB6编写,供大家参考。
第一种方法,使用PDFMAKERAPILib,使用这种方法,可以设置文件的安全性。这种方式是ADOBE不推荐的方式,因为Adobe从来没有公布过PDFMAKERAPILib的API,不建议大家使用,但是经过测试,Acrobat pro 8和acrobat pro 7上都能正常执行。
'------------------------------------------------------------------------------------------
'【功能】将Word文件转换成PDF文件
'------------------------------------------------------------------------------------------
Public Function convertDocToPdf(ByVal docFileName As String, ByVal pdfFileName As String)
Dim pdfMarker As PDFMAKERAPILib.PDFMakerApp
Set pdfMarker = New PDFMAKERAPILib.PDFMakerApp
pdfMarker.CreatePDF srcFilePath:=docFileName, pdfFilePath:=pdfFileName, bShowProgress:=False, _
psettings:=createConversionSettings(), bConvertsilent:=True
Set pdfMarker = Nothing
End Function
Private Function createConversionSettings() As Object
Dim settings As ConversionSettings
Set settings = New ConversionSettings
Dim security As SecuritySettings
Set security = New SecuritySettings
security.AllowedChanges = kAllowChangesNone
security.AttachmentPasswd = "123456"
security.AttachmentPasswdNeeded = True
security.EnableCopyingContent = False
security.PermsPasswdNeeded = True
security.PermsPasswd = "123456"
security.EncryptAttachmentsOnly = True
security.EnablePlaintextMetadata = False
security.EnableTextAccessibility = False
security.AllowedPermissionsBits = kAllowedPermNone
security.PrintingModeAllowed = kPrintingAllowedHighRes
Call settings.SetSecuritySettings(security)
Set createConversionSettings = settings
End Function
第二种方法,使用Word的打印功能,把文件转换成ps文件。再使用PdfDistiller Api把ps文件,转换成PDF。这是最常用的方法,程序的兼容性会比较强一些,但是不能设置pdf文件的安全性。
Private Function convertDocToPdf_bak(ByVal docFileName As String, ByVal pdfFileName As String)
Dim printer As String
printer = Util.getAdobePrinter
If Len(printer) = 0 Then
Err.Raise 1000, , "不能取得Adobe的打印机,请确认是否安装Adobe Acrobat Professional"
End If
Dim wordApp As Object
On Error GoTo convertPdfToDocError
Set wordApp = CreateObject("Word.application")
Dim prnFile As String
prnFile = "c:/1234.prn"
wordApp.Documents.Open docFileName
'选择Adobe的打印机
wordApp.WordBasic.FilePrintSetup printer:=printer, DoNotSetAsSysDefault:=1
'将Word文件通过打印功能,输出成prn文件。
wordApp.PrintOut Range:=0, Copies:=1, PageType:=0, _
ManualDuplexPrint:=False, Background:= _
True, PrintZoomColumn:=0, PrintZoomRow:=0, _
PrintZoomPaperWidth:=0, PrintZoomPaperHeight:=0, OutputFileName:="", _
Append:=False, _
PrintToFile:=True, OutputFileName:=prnFile
'使用PDF的API,将prn文件转成PDF文件
Dim pdfDist As Object
Set pdfDist = New ACRODISTXLib.PdfDistiller
pdfDist.FileToPDF prnFile, pdfFileName, ""
convertPdfToDocError:
If IsObject(wordApp) Then
wordApp.Quit
End If
If (Err.Number > 0) Then
Dim errDesc, errSrc As String
errDesc = Err.Description
errSrc = Err.source
Err.Raise Err.Number, errSrc, errDesc
End If
End Function
'--------------------------------------------------------------------------------------
'【功能】取得Adobe打印机的名称
'--------------------------------------------------------------------------------------
Public Function getAdobePrinter()
getAdobePrinter = ""
Dim i As Integer
For i = 0 To Printers.Count - 1
Dim deviceName As String
deviceName = LCase(Printers(i).deviceName)
Dim pos As Integer
pos = InStr(1, deviceName, "adobe")
If (pos > 0) Then
getAdobePrinter = Printers(i).deviceName
Exit For
End If
Next
End Function