「PDF 変換 Word VBA」といったキーワード検索でのアクセスがありました。
マクロでPDFファイルをWordファイルに変換する方法を探している方だろうと思います。
Acrobat JavaScriptのDocオブジェクトには別の形式でファイルを保存するためのsaveAsメソッドが用意されており、そのメソッドをGetJSObject経由で呼び出すことで、VBAマクロからでも処理を実行することができます。
Option Explicit
Private Enum Conv
TypeDoc = 0
TypeDocx = 1
TypeEps = 2
TypeHtml = 3
TypeJpeg = 4
TypeJpf = 5
TypePdfA = 6
TypePdfE = 7
TypePdfX = 8
TypePng = 9
TypePs = 10
TypeRft = 11
TypeTiff = 12
TypeTxtA = 13
TypeTxtP = 14
TypeXlsx = 15
TypeSpreadsheet = 16
TypeXml = 17
End Enum
Public Sub Sample()
ConvertPDF "C:\Test\PDF\Sample.pdf", TypeDocx
End Sub
Private Sub ConvertPDF(ByVal TargetFilePath As String, _
ByVal TargetConvType As Conv)
'PDFを他のファイル形式に変換
Dim jso As Object
Dim convid As String
Dim ext As String
Dim fp As String, fn As String
'フォルダパスとファイル名取得
With CreateObject("Scripting.FileSystemObject")
fp = AddPathSeparator(.GetParentFolderName(TargetFilePath))
fn = .GetBaseName(TargetFilePath)
End With
convid = GetConvID(TargetConvType)
ext = GetExtension(TargetConvType)
With CreateObject("AcroExch.PDDoc")
If .Open(TargetFilePath) = True Then
Set jso = .GetJSObject
CallByName jso, "saveAs", VbMethod, _
fp & fn & "." & ext, convid
.Close
End If
End With
End Sub
Private Function GetConvID(ByVal ConvType As Conv) As String
'cConvID取得
Dim v As Variant
v = Array("com.adobe.acrobat.doc", "com.adobe.acrobat.docx", "com.adobe.acrobat.eps", _
"com.adobe.acrobat.html", "com.adobe.acrobat.jpeg", "com.adobe.acrobat.jp2k", _
"com.callas.preflight.pdfa", "com.callas.preflight.pdfe", "com.callas.preflight.pdfx", _
"com.adobe.acrobat.png", "com.adobe.acrobat.ps", "com.adobe.acrobat.rtf", _
"com.adobe.acrobat.tiff", "com.adobe.acrobat.accesstext", "com.adobe.acrobat.plain-text", _
"com.adobe.acrobat.xlsx", "com.adobe.acrobat.spreadsheet", "com.adobe.acrobat.xml-1-00")
GetConvID = v(ConvType)
End Function
Private Function GetExtension(ByVal ConvType As Conv) As String
'拡張子取得
Dim v As Variant
v = Array("doc", "docx", "eps", "html", "jpeg", "jpf", "pdf", "pdf", "pdf", "png", _
"ps", "rft", "tiff", "txt", "txt", "xlsx", "xml", "xml")
GetExtension = v(ConvType)
End Function
Private Function AddPathSeparator(ByVal s As String)
If Right(s, 1) <> ChrW(92) Then s = s & ChrW(92)
AddPathSeparator = s
End Function
saveAsメソッドを実行する際、変換形式を文字列(cConvID)として指定する必要がありますが、上記コードでは形式を指定しやすいよう、列挙型を定義して使用しています。















この記事へのコメントはありません。