Search code examples
javascriptexcelacrobatacrobat-sdkvba

How do I set Acrobat XI printer settings through excel vba?


I am designing a vba code that allows users to input a set of technical drawing numbers and create a packet from it. I have run into a problem when dealing with autocad files. Because our company has AutoCAD LT I am unable to utilize the api, thus I am using adobe's PDFMaker api to convert the files directly to pdf. Unfortunately the settings for pdfMaker are rather limited so I need to parse through the outputted pdf packet and print it in black and white (monochrome). I currently have a subroutine that opens the packet and prints the necessary pages, however, it only prints black and white if I specifically open up acrobat and select my "Monochrome" configuration in the advanced settings. Is there a way to send the command (I believe it's in javascript?) to set this color configuration and set the size option to fit? Here is my code.

Public xlBook              As Workbook
Public xlSheet             As Worksheet
Public LastRow             As Integer
Public ItemNumber          As String
Public Vin5                As String
Public Vin                 As String
Public FullPath            As String

Sub PdfFormat()

Dim strMakeFile         As String
Dim LastRow             As Integer


Set xlBook = ActiveWorkbook
Set xlSheet = xlBook.Sheets(1)
ItemNumber = Range("E1")
Vin5 = Range("F1")
Vin = ItemNumber & "0" & Vin5
FullPath = "\\eastfile\Departments\Engineering\MACROS\New Packet Output\" &     Vin & "\"


strMakeFile = FullPath & Vin & ".pdf"
LastRow = Range("A" & xlSheet.Rows.Count).End(-4162).Row

Dim AcroExchApp     As New Acrobat.AcroApp
Dim AcroExchAVDoc   As New Acrobat.AcroAVDoc
Dim AcroExchPDDoc   As Acrobat.AcroPDDoc
Dim OpenError       As Boolean
Dim PrintError      As Boolean


OpenError = AcroExchAVDoc.Open(strMakeFile, "")

!!!!!CODE FOR PRINTER SETTINGS HERE!!!!!

PrintError = AcroExchAVDoc.PrintPagesSilentEx(0, 5, 3, 1, 1, 0, 0, 0, -5)

Debug.Print "Open Error: " & Not (OpenError)
Debug.Print "Print Error: " & Not (PrintError)
Debug.Print Vin

AcroExchApp.CloseAllDocs


End Sub

Thank you for your time


Solution

  • The print parameters in Acrobat you can find in the Acro-js helpfile for example here: Acro JS setting print options

    With VBS/VBA there are 2 ways to use it. With the help of Acro-Form API you can execute js-code more or less direkt. Here I gave a simple example: Execute Acro js from VBA/VBS

    The other way is to use the JS-Object, which lets you use transformed js-code via VBA/VBS Ole connection. That's documented in the Adobe Acrobat IAC Reference.

    How that works you can see in the following example, where I use jso for setting some print parameters. Change the given print parameters to that what you need or search in the Acro JS helfile for some other example and execute it via above described way direct. Good luck, Reinhard

    '// print dropped files with printParameter
    set WshShell = CreateObject ("Wscript.Shell")
    set fs = CreateObject("Scripting.FileSystemObject")
    Set objArgs = WScript.Arguments
    
    if objArgs.Count < 1 then
        msgbox("Please drag a file on the script")
        WScript.quit
    end if
        'contact Acrobat
    Set gApp = CreateObject("AcroExch.App")
    gApp.show 'comment or take out to work in hidden mode
    
      'open via Avdoc and print
    for i=0 to objArgs.Count - 1
        FileIn = ObjArgs(i)
        Set AVDoc = CreateObject("AcroExch.AVDoc")
        If AVDoc.Open(FileIn, "") Then
            Set PDDoc = AVDoc.GetPDDoc()
            Set JSO = PDDoc.GetJSObject
            jso.print false, 0, 0, true
            set pp = jso.getPrintParams
            pp.printerName = "hp deskjet 990c"
            pp.firstPage = 0  '-> Zero based (firstPage = 0)
            pp.lastPage = 5   '-> Zero based (pageCount - 1)
            pp.interactive = pp.constants.interactionLevel.automatic  '-> no print dialog
            pp.pageHandling = pp.constants.handling.booklet
            pp.booklet.duplexMode = pp.constants.bookletDuplexModes.BothSides
            pp.booklet.binding = pp.constants.bookletBindings.LeftTall
            jso.print(pp)
            gApp.CloseAllDocs
        end if
    next
    
    gApp.hide
        gApp.exit
        MsgBox "Done!"
        Quit()
    
    Sub Quit()
          Set JSO  =  Nothing
          Set PDDoc = Nothing
          Set gApp =  Nothing
          Wscript.quit
    End Sub