Create and Email PDF files from Drupal Webforms

Set up automated, professional, formatted PDFs from Drupal webforms using Views and Rules - and have them emailed once created.

This tutorial shows how to create a high-resolution PDF file from a Drupal webform. The same basic concept can be used to create PDF files from nodes as well - you just won't need the Webform Rules module.

The 4 steps in summary are:

  1. Install the required modules and libraries
  2. Create a Webform
  3. Create a View to convert the Webform to a PDF.
  4. Create a Rule to save the PDF to the server, and email it if you want.

1. Requirements for this project:

    • sites/all/libraries/tcpdf that contains the contents of tcpdf-6.0.020.zip
    • sites/all/libraries/fpdi that contains the contents of FPDI-1.4.4.zip and  FPDF_TPL-1.2.3.zip . For these, I recommend creating the fpdi directory first and putting  the zips in there before unzipping - they both contain loose files.
  • To have the PDF emailed automatically after it's created, you'll need Mimemail (and its Mimemail Action submodule) and  Mailsystem

2. Create the Webform

Create a webform and add the fields that you need.

3. Create the View

Create a new view:

  • On the first screen, choose Show Webform submissions
  • Uncheck Create a page and Create a block
  • Click Continue & Edit

Add a contextual filter so that each PDF shows only that webform's data:

  • Under Contextual Filters in the right column (click the word "Advanced" if you don't see this), add a "Webform submissions: Sid" filter. 
  • Click Apply on the screen "Configure contextual filter" (The only configuration I use here is ' When the filter value is not in the URL: Show "Page not found"')
Add the fields:
  • Under Fields, click Add
  • Use the Filter to find Webform Submission Data:Value
  • In the form that comes up, find the webform you wish to use via the Webform node field
  • Once the Webform node is selected, a new box appears called Component data, which is a select list showing all the webform fields available on that webform
  • Choose the first field you want to display, and the Display format you want for it
  • Add the rest of the webform fields by repeating the above steps for each field

Also: Under pager, choose "display all items" and you may want to remove any Sort and Filter items.

Add the PDF display:

  • Under Displays, add a PDF Page
  • Under PDF Settings: Path, add a path (which is required, but we're not using it - we'll be setting the path via a Rule - so I believe you can add any path you want here. To be safe, a path like "/ sites/default/files/viewspdf/%/webform.pdf" will replace the percent symbol with each webform submission's ID, giving it a unique path.)
  • Under PDF Settings: PDF Page Settings , configure the page size, orientation and margins
  • Under PDF Settings: PDF Fonts Settings , configure the font
  • Under PDF Settings: PDF Template Settings, adding a background template with the upload button will store template files in /sites/default/files/views_pdf_templates. Once there, you can choose a template to be placed in different areas of your PDF. For this example, we'll upload a high-resolution PDF of 8.5x11 corporate letterhead. 
  • Now under Format: Show: PDF FIelds, click Settings. 
    • You'll see clickable sections for each of the webform fields you added. 
    • By default, they'll print sequentially and vertically. If you need any different placement, configure it here. (warning - you may need to do a lot of testing to get it right!) 
    • I used the background uploaded in the previous step by choosing it under Template PDF.

4. Create the Rule

  • Add a new Rule that reacts on the event "After a webform has been submitted" 
  • Add a condition "Webform has name"
    • Value for THE FORM ID OF THE SUBMITTED FORM: [form-id:value] if using Tokens (Replacement Patterns), or form-id if using Data Selector
    • Value for  WEBFORMS: choose the webform you wish to use
  • Add an Action "Save PDF as file on server" (this action comes from the Views PDF module):
    • Value for VIEW: choose the View you created above
    • Value for VIEWS ARGUMENTS: [data:sid]
      this is each webform's unique submission ID, and is used as the contextual filter on the view
    • Value for STORE PATH: sites/default/files/viewspdf/info-[data:sid] 
      - change this to whatever you like; adding the token [data:sid] is optional, but ensures that each filename is unique.
      - Important: do NOT add ".pdf" to the end, or you will get an error with "TCPDF ERROR: Unable to create output file ..." 
      - also do not add a forward slash at the beginning or TCPDF will throw the error above
      - make sure the directory you specify exists and has write permissions 
  • Add an Action "Send HTML e-mail" (this action comes from the Mimemail Actions module):
    • Value for KEY:  [form-id:value] if  using Tokens (Replacement Patterns), or form-id if using Data Selector
    • Value for TO: the recipient's email address 
    • Value for ATTACHMENTS: sites/default/files/viewspdf/info-[data:sid].pdf 
      - Important: this should match whatever you entered above in STORE PATH, but this time, it includes .pdf at the end
    • Value for all other fields: whatever you need 
Now fill out the webform and test it!