vba - 将 pdf 转换为 diff 格式的代码 - 不起作用

标签 vba

以下是将 PDF 转换为不同格式(.xls、.xlsx 和 .doc 等)的 VBA 代码

未编译,因错误而失败 - USER DEFINED TYPE NOT DEFINED。

代码

Option Explicit
Option Private Module

Sub SavePDFAsOtherFormat(PDFPath As String, FileExtension As String)

'Saves a PDF file as another format using Adobe Professional.


Dim objAcroApp      As Acrobat.AcroApp
Dim objAcroAVDoc    As Acrobat.AcroAVDoc
Dim objAcroPDDoc    As Acrobat.AcroPDDoc
Dim objJSO          As Object
Dim boResult        As Boolean
Dim ExportFormat    As String
Dim NewFilePath     As String

'Check if the file exists.
If Dir(PDFPath) = "" Then
    MsgBox "Cannot find the PDF file!" & vbCrLf & "Check the PDF path and retry.", _
            vbCritical, "File Path Error"
    Exit Sub
End If

'Check if the input file is a PDF file.
If LCase(Right(PDFPath, 3)) <> "pdf" Then
    MsgBox "The input file is not a PDF file!", vbCritical, "File Type Error"
    Exit Sub
End If

'Initialize Acrobat by creating App object.
Set objAcroApp = CreateObject("AcroExch.App")

'Set AVDoc object.
Set objAcroAVDoc = CreateObject("AcroExch.AVDoc")

'Open the PDF file.
boResult = objAcroAVDoc.Open(PDFPath, "")

'Set the PDDoc object.
Set objAcroPDDoc = objAcroAVDoc.GetPDDoc

'Set the JS Object - Java Script Object.
Set objJSO = objAcroPDDoc.GetJSObject

'Check the type of conversion.
Select Case LCase(FileExtension)
    Case "eps": ExportFormat = "com.adobe.acrobat.eps"
    Case "html", "htm": ExportFormat = "com.adobe.acrobat.html"
    Case "jpeg", "jpg", "jpe": ExportFormat = "com.adobe.acrobat.jpeg"
    Case "jpf", "jpx", "jp2", "j2k", "j2c", "jpc": ExportFormat = "com.adobe.acrobat.jp2k"
    Case "docx": ExportFormat = "com.adobe.acrobat.docx"
    Case "doc": ExportFormat = "com.adobe.acrobat.doc"
    Case "png": ExportFormat = "com.adobe.acrobat.png"
    Case "ps": ExportFormat = "com.adobe.acrobat.ps"
    Case "rft": ExportFormat = "com.adobe.acrobat.rft"
    Case "xlsx": ExportFormat = "com.adobe.acrobat.xlsx"
    Case "xls": ExportFormat = "com.adobe.acrobat.spreadsheet"
    Case "txt": ExportFormat = "com.adobe.acrobat.accesstext"
    Case "tiff", "tif": ExportFormat = "com.adobe.acrobat.tiff"
    Case "xml": ExportFormat = "com.adobe.acrobat.xml-1-00"
    Case Else: ExportFormat = "Wrong Input"
End Select

'Check if the format is correct and there are no errors.
If ExportFormat <> "Wrong Input" And Err.Number = 0 Then

    'Format is correct and no errors.

    'Set the path of the new file. Note that Adobe instead of xls uses xml files.
    'That's why here the xls extension changes to xml.
    If LCase(FileExtension) <> "xls" Then
        NewFilePath = WorksheetFunction.Substitute(PDFPath, ".pdf", "." & LCase(FileExtension))
    Else
        NewFilePath = WorksheetFunction.Substitute(PDFPath, ".pdf", ".xml")
    End If

    'Save PDF file to the new format.
    boResult = objJSO.SaveAs(NewFilePath, ExportFormat)

    'Close the PDF file without saving the changes.
    boResult = objAcroAVDoc.Close(True)

    'Close the Acrobat application.
    boResult = objAcroApp.Exit

    'Inform the user that conversion was successfully.
    MsgBox "The PDf file:" & vbNewLine & PDFPath & vbNewLine & vbNewLine & _
    "Was saved as: " & vbNewLine & NewFilePath, vbInformation, "Conversion finished successfully"

Else

    'Something went wrong, so close the PDF file and the application.

    'Close the PDF file without saving the changes.
    boResult = objAcroAVDoc.Close(True)

    'Close the Acrobat application.
    boResult = objAcroApp.Exit

    'Inform the user that something went wrong.
    MsgBox "Something went wrong!" & vbNewLine & "The conversion of the following PDF file FAILED:" & _
    vbNewLine & PDFPath, vbInformation, "Conversion failed"

End If

'Release the objects.
Set objAcroPDDoc = Nothing
Set objAcroAVDoc = Nothing
Set objAcroApp = Nothing

End Sub

最佳答案

我从来没有得到一个代码来保存为 jpg。 我可以使用类似的代码保存/导出为文本,但 jpg 代码每次都失败。

编辑(已解决):

我知道这是一个非常古老的话题,但我终于弄明白了。哈哈 我没有使用上面的代码,因为我只对将 PDF 文档保存为 jpeg 感兴趣。手动完成此操作后,您将获得 PDF 中每一页的一个 jpg 文件。 (这就是我想要做的)。

在 MS Access 中用于运行 Acrobat 的 javascript 似乎有一种独特的方法来发布保存路径。如果没有使用正确的格式,就会产生错误。但当格式正确时,它会起作用。

我已经在下面发布了我使用的代码。感谢任何“专业”评论或改进方法。

Private Sub PDFtoJPG_Click()

Dim AcroXApp As Acrobat.acroApp
Dim AcroXAVDoc As Acrobat.AcroAVDoc
Dim AcroXPDDoc As Acrobat.AcroPDDoc

Dim Filename As String, jsObj As Object


Filename = "D:\Movie\PDF VBA\PDF Results.PDF"  '<<ENTER THE FILEMNAME AND PATH HERE

Set AcroXApp = CreateObject("AcroExch.App")
AcroXApp.Show
Set AcroXAVDoc = CreateObject("AcroExch.AVDoc")
AcroXAVDoc.Open Filename, "Acrobat"
Set AcroXPDDoc = AcroXAVDoc.GetPDDoc
Set jsObj = AcroXPDDoc.GetJSObject

'Notice the path is not the standard MS Windows format
jsObj.saveAs "/D/Movie/PDF VBA/PDF Results.jpg", "com.adobe.acrobat.jpeg"

AcroXAVDoc.Close False
AcroXApp.Hide
AcroXApp.Exit

MsgBox "PDF File Saved as JPG Images "

结束子

关于vba - 将 pdf 转换为 diff 格式的代码 - 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42619817/

相关文章:

vba - 在数据透视 + VBA + 动态解决方案中运行所有可能的页面过滤器组合

excel - ByRef 参数类型不匹配 Excel VBA

excel - 找不到存在的工作表

json - 在数组中循环 JSON 以获得 VBA 中的相同值

ChartSpace 中缺少 Excel VBA "AxisBetweenCategories"属性

arrays - Excel VBA - 按固定宽度分隔一维数组的元素

excel - 如何将 HEX 转换为 BIN,在 EXCEL 2010 中一次一个字符

vba - 更改在搜索中找到的选定项目的主题

excel - 检索当前本地计算机相对于 UTC 时间的小时数(使用 VBA)

excel - Workbooks.OpenText 忽略 FieldInfo 列参数