Downloadable Printer

Virtual Printer SDKs for viewing, editing, and converting documents – complete with libraries and integration-ready documentation.

Introduction

This project provides a custom GDI-based virtual printer driver written in C++. The Graphics Device Interface (GDI) is one of the core components of the Windows operating system for rendering graphics and text to output devices - like monitors and printers. The virtual printer driver is designed to emulate a physical printer, while capturing print output for post-processing, automation, or redirection to custom workflows. The driver integrates seamlessly into the Windows printing subsystem and supports 32/64-bit platforms. 

Here we should maybe give an idea of what it actually looks like: 

  • Like an example of a print of a Word document or whatever?

The solution  includes a ready-to-use Microsoft Merge Module (.msm)  ((‘printer-merge’ project?)) along with an example WiX project (‘printer’ project?) for building a Windows Installer Package (.msi). 

Microsoft Merge Module (.msm) file

A Microsoft Merge Module is commonly used in installation packages. It contains installation settings, registry entries, and resources needed for a specific component within a larger installer. This type of file contains reusable installation components, such as shared libraries or dependencies, ensuring consistency across multiple installers. It cannot be installed independently - it must be merged into an .msi file to ensure consistent installation across different applications. 

Windows Installer Packages (.msi files)

Windows Installer Packages (.msi files), on the other hand, are standalone installation packages. They contain all necessary files, registry settings, and installation logic to deploy an application. Unlike .msm files, they can be executed directly by Windows Installer.

The virtual printer driver supports parameterized branding, custom licensing, GUID injection , and optional integration with a notification handler executable ‘notification_handler.exe’ that can be triggered after each print job.

This documentation provides an overview of the included files, configuration parameters, and steps to integrate and deploy the driver.

Printer Capabilities

(TODO: larger titles, standardized size across the document, maybe table of contents/numbering of the sections)

The virtual printer is designed to generate high-quality PDF output and supports a wide range of printing options. Below are the key features supported by the driver: 

  • PDF 2.0 Output FormatAll documents are generated in compliance with the PDF 2.0 specification, ensuring compatibility with modern PDF viewers and extended feature support.
  • Flexible Page Sizes The printer supports a wide variety of standard and custom page sizes, including but not limited to A4, Letter, Legal, Tabloid, and user-defined dimensions.
  • Orientation Support Both Portrait and Landscape orientations are fully supported.
  • Color ModesUsers can choose between: 
    • Full-color printing
    • Grayscale printing
  • Document Security The driver supports the ability to: 
    • Encrypt PDF documents
    • Apply password protection
    • Set access permissions (e.g., restrict printing, copying, or editing)
  • Print Quality SettingsUsers can select different levels of output quality depending on their needs, from draft mode to high-quality production settings.
  • Multiple Pages per Sheet The printer supports printing multiple pages per physical sheet, allowing for layouts such as 2-up, 4-up, and more. 

These features make the driver suitable for a wide range of scenarios — integration into existing CRM or ERP systems to secure document workflows in enterprise environments. 

Technical Details 

We provide a precompiled merge module and an example WiX project to build a corresponding .msi installer. The build system allows configuration of the following parameters:

  • Printer name
  • GUIDs for modules and components
  • License key
  • Command-line for launching a custom application after printing
  • Brand-specific values, such as: 
    • Printer name without spaces
    • File prefix for generated binary files

The distribution archive includes:

  • Merge module (.msm) 
  • WiX project to compile the .msi
  • notification_handler.exe