automatically print attachments

Status
Not open for further replies.

crashbrown98

Member
Outlook version
Outlook 2010 32 bit
Email Account
Exchange Server
Hello,

I have a script to print attachments automatically and itworks well however when it prints it does it as actual size instead offit. Is there a way to adjust the scriptto do it as fit instead of actual size for .pdf

Here is the code used:

Sub LSPrint(Item As Outlook.MailItem)
On Error GoToOError
'detect Temp
Dim oFS AsFileSystemObject
Dim sTempFolder AsString

Set oFS = NewFileSystemObject
'Temporary FolderPath
sTempFolder =oFS.GetSpecialFolder(TemporaryFolder)

'creates a specialtemp folder
cTmpFld =sTempFolder & "\OETMP" & Format(Now,"yyyymmddhhmmss")
MkDir (cTmpFld)
'save & print
Dim oAtt AsAttachment
For Each oAtt In Item.Attachments
FileName =oAtt.FileName
FullFile =cTmpFld & "\" & FileName

'save attachment
oAtt.SaveAsFile(FullFile)

'printsattachment
Set objShell =CreateObject("Shell.Application")
Set objFolder =objShell.NameSpace(0)
SetobjFolderItem = objFolder.ParseName(FullFile)
objFolderItem.InvokeVerbEx ("print")

Next oAtt

'Cleanup
If Not oFS IsNothing Then Set oFS = Nothing
If Not objFolderIs Nothing Then Set objFolder = Nothing
If NotobjFolderItem Is Nothing Then Set objFolderItem = Nothing
If Not objShell IsNothing Then Set objShell = Nothing

OError:
If Err <> 0Then
MsgBoxErr.Number & " - " & Err.Description
Err.Clear
End If
Exit Sub

End Sub
 

crashbrown98

Member
Outlook version
Outlook 2010 32 bit
Email Account
Exchange Server
Generally speaking, no, because the printer commands are not exposed in the object model. If the pdf application supports this open via a command line, you may be able to do it.
when it comes to macros i got as much knowledge as a 3 yr old. i can understand them to a point but after that im clueless. so there is no way to tell adobe how to print it unless i would run a sub macro for adobe?
 

Diane Poremsky

Senior Member
Outlook version
Outlook 2016 32 bit
Email Account
Office 365 Exchange
According to the Acrobat SDK, it looks like you can use OLE -

Function PrintPages(nFirstPage As Long, nLastPage As Long, nPSLevel As Long, bBinaryOk As Long, bShrinkToFit As Long) As Boolean

I found this sample and it works to print from outlook, but I'm not sure of the correct setting for shrink to fit. Oh, and you need to set a reference to Acrobat in Tools, References. And it only works with Acrobat, not reader.

Code:
Public Sub AcrobatPrint() 
 
Dim FileName As String ' this is the filename variable, i replaced it with a hardcoded filename for testing 
 
Dim PrintMode As String
    Dim AcroExchApp As Acrobat.CAcroApp
    Dim AcroExchAVDoc As Acrobat.CAcroAVDoc
    Dim AcroExchPDDoc As Acrobat.CAcroPDDoc
    Dim num As Integer
    Set AcroExchApp = CreateObject("AcroExch.App")
    Set AcroExchAVDoc = CreateObject("AcroExch.AVDoc")
    ' Open the [Filename] pdf file
    ' use FileName variable instead of hardcoded file name
    AcroExchAVDoc.Open "C:\Users\Diane\Downloads\a-pdf.pdf", ""
    'Get the PDDoc associated with the open AVDoc
    Set AcroExchPDDoc = AcroExchAVDoc.GetPDDoc
    'Get the number of pages for this pdf [and subtract one as zero based]
    num = AcroExchPDDoc.GetNumPages - 1
    If PrintMode = "All" Then
         'Print Entire Document
          Call AcroExchAVDoc.PrintPages(0, num, 2, 1, 1)
    Else
          If num = 0 Then
              'Print entire document (one page)
              ' Last value is shrinktofit
               Call AcroExchAVDoc.PrintPages(0, num, 2, 1, 1)
          Else
              'Print first two pages
               Call AcroExchAVDoc.PrintPages(0, 1, 1, 1, 1)
          End If
    End If
    AcroExchApp.Exit
    AcroExchAVDoc.Close (True)
    AcroExchPDDoc.Close 
 
End Sub
 

Diane Poremsky

Senior Member
Outlook version
Outlook 2016 32 bit
Email Account
Office 365 Exchange
As an FYI, i added a working sample to my print attachments page at Use Acrobat's Printer Options.

It should be fairly easy to tweak your code to use the select case statement from my code to identify pdf files and send them to the print pdf macro. Or use an If statement to send them to the pdf code.
 
Status
Not open for further replies.
Top