Combine Outlook Attachments Into One PDF

Posted on 2009-05-05
Medium Priority
Last Modified: 2012-05-06
I am looking for a fast way to convert attached pictures into one pdf.  Currently, the only way I can think of is to select all of the files, copy them, save them to a folder and then do the combine from there.  Is there a way to combine all pics into one pdf through the use of a one-click style macro? Thanks for reading.
Question by:thedeal56
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 6
  • 5
LVL 76

Expert Comment

by:David Lee
ID: 24306674
Hi, thedeal56.

The answer to that question depends on what software you have available for combining the pictures and whether it can be automated.  It's definitely possible to write a macro to do something like this assuming that you have suitable software and that software supports automation.  I've never had the need to do anything like this, so I've no idea what software you'd use to accomplish combining the pictures.

Author Comment

ID: 24306814
Are you talking about acrobat?  That's what I'm using to combine multiple photos into one pdf.  
LVL 76

Expert Comment

by:David Lee
ID: 24308473
Since you're using Acrobat, that's the tool I'm talking about.  I'm not an Acrobat expert and don't know of a way to script creating a PDF from a series of pictures.  I can handle the Outlook portion of this, saving the pictures to disk and calling some process that combines the pictures into a PDF.  It's that other process that I'll need help with.  If you know of a script or batch process that does this, then I can help.  Otherwise, the best I can do is save the pictures to disk.
NEW Veeam Agent for Microsoft Windows

Backup and recover physical and cloud-based servers and workstations, as well as endpoint devices that belong to remote users. Avoid downtime and data loss quickly and easily for Windows-based physical or public cloud-based workloads!


Author Comment

ID: 24308643
So, you're saying that you can help with the part of the macro that saves the pics to a folder, but not with the part that converts them into a single pdf file?  It sounds like I may be looking at running two batch processes.  One to move the files out of outlook, and one to combine the files.  Is that right?  I was hoping to settle this all with one outlook macro, so if it can't be done that way, can you show me how to do the following?:

What I need the macro to do:

1.  Create a folder which has the name of the subject of the email
2.  Save all attached pictures to the newly created folder.

Thanks for helping me with this.
LVL 76

Expert Comment

by:David Lee
ID: 24308765
"you can help with the part of the macro that saves the pics to a folder"

"not with the part that converts them into a single pdf file"
Not without some guidance.  Combining the pictures into a single PDF file doesn't have anything to do with Outlook.  I'll be glad to help with that if you know how to automate the process.  For example, if you know this can be done with a command-line command and you know what the command is, then I can right a script that will save the files and run that command.  But, if you're as much in the dark as I am about how to perform that step outside of the GUI, then I can't help.

"One to move the files out of outlook, and one to combine the files."
It doesn't have to be if you know what the batch process for combining the files and producing a PDF is.  Saving the files is an Outlook process, combining them and producing a PDF isn't.  

How do you want to run the macro?  Do you want to select the messages and then run it?

Author Comment

ID: 24308871
I'm going to check around on the possible command line pdf combine.  I would like to avoid selecting all the files in the email.  If it's possible, can the macro assume that the open email's attachments are the ones I want to save to the folder?
LVL 76

Expert Comment

by:David Lee
ID: 24309758
Yes, that's possible.  I'll hold up on this until I hear back from you on the pdf aspect.

Author Comment

ID: 24314670
I think I have a solution for the pdfs.  It's probably not the best way, but let me know what you think.  There is a program called OmniFormat that monitors a folder's contents, and attempts to convert anything in the folder into a pdf.  This process will happen on its own; I'll just need to set the monitored folder to whichever directory the files are initially saved to.  Once the files are in the folder (Let's use C:\PDF), we can use PDF Tool Kit (PDFTK) to do the actual combining.  

Here's a command line example of the combine:

--> pdftk c:\pdf\1.pdf c:\pdf\2.pdf c:\pdf\3.pdf cat output c:\[NAME OF EMAIL SUBJECT]\123.pdf

So, here's how I'm guessing the macro needs to work.

1. Delete all files in C:\PDF
2. Copy the open email's files to C:\PDF
3. Make a directory similar to this: C:\CombinePDF\[NAME OF EMAIL SUBJECT]
4. Run the combine command: pdftk c:\pdf\1.pdf c:\pdf\2.pdf c:\pdf\3.pdf cat output C:\CombinePDF\[NAME OF EMAIL SUBJECT]\123.pdf

The only problem I can foresee is the possibility of the combine taking place before all the images are converted to .pdf.  If it's not too much trouble, maybe adding some type of delay between steps 3. and 4. would come in handy.  I'll have to do some testing to see how long the conversions actually take, so I could adjust the delay as needed.  Thanks again.  

LVL 76

Accepted Solution

David Lee earned 2000 total points
ID: 24320155
Looks like a good solution.  I wrote the script to monitor the folder for the output files before running the combine command.  That'll prevent the combine command from running before the individual PDFs are produced.  I could not test the entire process since I don't have the software that monitors a folder and creates the individual PDFs, nor the tool for joining the PDFs.  

Follow these instructions to set this up.

1.  Start Outlook
2.  Click Tools > Macro > Visual Basic Editor
3.  If not already expanded, expand Microsoft Office Outlook Objects
4.  If not already expanded, expand Modules
5.  Select an existing module (e.g. Module1) by double-clicking on it or create a new module by right-clicking Modules and selecting Insert > Module.
6.  Copy the code from the Code Snippet box and paste it into the right-hand pane of Outlook's VB Editor window
7.  Edit the code as needed.  I included comments wherever something needs to or can change
8.  Click the diskette icon on the toolbar to save the changes
9.  Close the VB Editor

To use this

1.  Open a message
2.  Run the macro
Sub JoinPDFs()
    'Edit the folder paths on the next two lines.  Ensure that they end with a backslash character.'
    Const PDF_FOLDER = "C:\PDF\"
    Const COMB_FOLDER = "C:\CombinePDF\"
    Dim olkMsg As Outlook.MailItem, _
        olkAttachment As Outlook.Attachment, _
        objFSO As Object, _
        objFolder As Object, _
        objFile As File, _
        objShell As Object, _
        colNames As New Collection, _
        strName As String, _
        strFilenames As String, _
        varName As Variant
    '---- Setup
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objShell = CreateObject("WScript.Shell")
    '--- Step 1: Clear the PDF folder'
    Set objFolder = objFSO.GetFolder(PDF_FOLDER)
    For Each objFile In objFolder.Files
        objFile.Delete True
    '---- Step 2: Get the current message and save all attachments to the PDF folder'
    Set olkMsg = Outlook.Application.ActiveInspector.CurrentItem
    For Each olkAttachment In olkMsg.Attachments
        olkAttachment.SaveAsFile PDF_FOLDER & olkAttachment.FILENAME
        strName = objFSO.GetBaseName(olkAttachment.FILENAME) & ".pdf"
        colNames.Add strName, strName
        strFilenames = strFilenames & strName & " "
    '---- Step 3: Make a folder for this combine operation'
    Set objFolder = objFSO.CreateFolder(COMB_FOLDER & RemoveIllegalCharacters(olkMsg.Subject))
    '----Step 4: Wait for the PDF files to all be produced'
    Do Until colNames.Count = 0
        For Each varName In colNames
            If objFSO.FileExists(PDF_FOLDER & varName) Then
                colNames.Remove varName
            End If
    '---- Step 5: Combine the files'
    objShell.Run "pdftk " & strFilenames & "cat output " & objFolder.Path & "\123.pdf"
    '---- Clean-up'
    Set objShell = Nothing
    Set objFSO = Nothing
    Set objFolder = Nothing
    Set objFile = Nothing
    Set colNames = Nothing
    Set olkAttachment = Nothing
    Set olkMsg = Nothing
End Sub

Open in new window


Author Comment

ID: 24335615
Hey, that works great.  Thanks for all your help.
LVL 76

Expert Comment

by:David Lee
ID: 24336071
You're welcome.

Featured Post

NEW Veeam Agent for Microsoft Windows

Backup and recover physical and cloud-based servers and workstations, as well as endpoint devices that belong to remote users. Avoid downtime and data loss quickly and easily for Windows-based physical or public cloud-based workloads!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Outlook for dependable use in a very small business   This article is about using the Outlook application (part of Microsoft Office) in a very small business, or for homeowners where dependability and reliability are critical requirements. This …
With so many activities to perform, Exchange administrators are always busy in organizations. If everything, including Exchange Servers, Outlook clients, and Office 365 accounts work without any issues, they can sit and relax. But unfortunately, it…
CodeTwo Sync for iCloud (http://www.codetwo.com/sync-for-icloud?sts=6554) automatically synchronizes your Outlook 2016, 2013, 2010 or 2007 folders with iCloud folders available via iCloud Control Panel. This lets you automatically sync them with…
There are cases when e.g. an IT administrator wants to have full access and view into selected mailboxes on Exchange server, directly from his own email account in Outlook or Outlook Web Access. This proves useful when for example administrator want…

649 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question