Package Exports
- windows-pdf-printer-native
- windows-pdf-printer-native/lib/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (windows-pdf-printer-native) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Windows PDF Printer Native
A high-performance PDF printing library for Node.js on Windows. Print PDFs directly to Windows printers using native GDI32 API and Google's PDFium rendering engine.
Table of Contents
- Features
- Requirements
- Installation
- Quick Start
- Usage Examples
- API Reference
- Performance
- More Examples
- Troubleshooting
- Documentation
- Contributing
- License
Features
- 🖨️ Windows Native - Direct integration with Windows printing system (GDI32 + PDFium)
- ⚡ High Performance - 44% faster than legacy approaches
- 📄 Quality Control - Print at 150, 300, or 600 DPI
- 🎯 Full Configuration - Paper size, duplex, orientation, color mode, paper tray
- 📦 TypeScript Support - Full type definitions included
- 🔧 No Setup Required - PDFium library included in the package
Requirements
- Node.js 22.0.0 or higher
- Windows 7 or later (Windows 10/11 recommended)
Installation
npm install windows-pdf-printer-nativeNote: All required dependencies (including PDFium) are included. No additional setup needed!
Quick Start
import { PDFPrinter } from 'windows-pdf-printer-native';
// Print to default printer
const printer = new PDFPrinter();
await printer.print('./document.pdf');
// Print to specific printer
const printer = new PDFPrinter('HP LaserJet Pro');
await printer.print('./invoice.pdf');Usage Examples
Basic Printing
import { PDFPrinter, PrinterManager } from 'windows-pdf-printer-native';
// List available printers
const printers = await PrinterManager.getAvailablePrinters();
printers.forEach(p => console.log(p.name));
// Get default printer
const defaultPrinter = await PrinterManager.getDefaultPrinter();
// Print with default settings (300 DPI)
const printer = new PDFPrinter();
await printer.print('./document.pdf');Advanced Configuration
import {
PDFPrinter,
PrintQuality,
PaperSize,
DuplexMode,
PageOrientation,
ColorMode,
PaperTray
} from 'windows-pdf-printer-native';
const printer = new PDFPrinter();
await printer.print('./document.pdf', {
copies: 2,
quality: PrintQuality.HIGH, // 600 DPI
paperSize: PaperSize.A4, // 210 x 297 mm
duplex: DuplexMode.VERTICAL, // Long-edge binding
orientation: PageOrientation.LANDSCAPE, // Horizontal
color: ColorMode.COLOR, // Color printing
paperTray: PaperTray.AUTO // Auto-select tray
});Print Quality Options
import { PrintQuality } from 'windows-pdf-printer-native';
// Low quality - fast (150 DPI)
await printer.print('./draft.pdf', {
quality: PrintQuality.LOW
});
// Medium quality - default (300 DPI)
await printer.print('./document.pdf', {
quality: PrintQuality.MEDIUM
});
// High quality - best for images (600 DPI)
await printer.print('./photo.pdf', {
quality: PrintQuality.HIGH
});Interactive Print Dialog
// Show Windows print dialog
await printer.print('./document.pdf', {
showPrintDialog: true
});
// Pre-populate dialog settings
await printer.print('./document.pdf', {
showPrintDialog: true,
copies: 2,
duplex: DuplexMode.VERTICAL,
paperSize: PaperSize.A4
});API Reference
Classes
PDFPrinter
Main class for printing PDF documents.
API Reference
PDFPrinter
Main class for printing PDF documents.
Constructor
new PDFPrinter(printerName?: string)Parameters:
printerName(optional): Name of the printer. If not provided, uses the system default printer.
Methods
print(pdfPath: string, options?: PrintOptions): Promise<void>
Print a PDF file.
await printer.print('./document.pdf', {
copies: 2,
quality: PrintQuality.HIGH,
paperSize: PaperSize.A4,
duplex: DuplexMode.VERTICAL
});Parameters:
pdfPath: Absolute or relative path to the PDF fileoptions: Print configuration options (see PrintOptions below)
printRaw(data: Buffer, documentName?: string, options?: PrintOptions): Promise<void>
Print from a PDF buffer.
const pdfBuffer = fs.readFileSync('./doc.pdf');
await printer.printRaw(pdfBuffer, 'MyDocument', options);Parameters:
data: PDF file as BufferdocumentName(optional): Name for the print joboptions: Print configuration options
getPrinterName(): string
Get the name of the printer being used.
const name = printer.getPrinterName();
console.log('Using printer:', name);setCacheEnabled(enabled: boolean): void
Enable or disable page caching. Caching improves performance when printing multiple copies but uses more memory.
// Disable cache for batch processing
printer.setCacheEnabled(false);PrinterManager
Static class for managing printers.
Methods
getAvailablePrinters(): Promise<PrinterInfo[]>
List all available printers.
const printers = await PrinterManager.getAvailablePrinters();
printers.forEach(p => console.log(p.name));getDefaultPrinter(): Promise<string | null>
Get the default printer name.
const defaultPrinter = await PrinterManager.getDefaultPrinter();printerExists(printerName: string): Promise<boolean>
Check if a printer exists.
const exists = await PrinterManager.printerExists('HP LaserJet');PrintOptions
Configuration options for printing.
interface PrintOptions {
copies?: number; // Number of copies (default: 1)
quality?: PrintQuality; // Print quality (default: MEDIUM)
paperSize?: PaperSize; // Paper size (default: printer default)
duplex?: DuplexMode; // Duplex mode (default: SIMPLEX)
orientation?: PageOrientation; // Page orientation (default: PORTRAIT)
color?: ColorMode; // Color mode (default: COLOR)
paperTray?: PaperTray; // Paper tray (default: AUTO)
collate?: boolean; // Collate copies (default: false)
showPrintDialog?: boolean; // Show print dialog (default: false)
}Enums
PrintQuality
enum PrintQuality {
LOW = 150, // Fast, lower quality
MEDIUM = 300, // Balanced (default)
HIGH = 600 // Best quality, slower
}PaperSize
enum PaperSize {
LETTER = 1, // 8.5 x 11 inches
LEGAL = 5, // 8.5 x 14 inches
A3 = 8, // 297 x 420 mm
A4 = 9, // 210 x 297 mm
A5 = 11, // 148 x 210 mm
TABLOID = 3, // 11 x 17 inches
// ... 95 total sizes available
}DuplexMode
enum DuplexMode {
SIMPLEX = 1, // Single-sided
HORIZONTAL = 2, // Flip on short edge
VERTICAL = 3 // Flip on long edge
}PageOrientation
enum PageOrientation {
PORTRAIT = 1, // Vertical
LANDSCAPE = 2 // Horizontal
}ColorMode
enum ColorMode {
MONOCHROME = 1, // Black and white
COLOR = 2 // Color
}PaperTray
enum PaperTray {
AUTO = 7, // Automatic selection
UPPER = 1, // Upper tray
LOWER = 2, // Lower tray
MIDDLE = 3, // Middle tray
MANUAL = 4, // Manual feed
ENVELOPE = 5, // Envelope feeder
// ... more options available
}PrinterInfo
Information about a printer.
interface PrinterInfo {
name: string; // Printer name
serverName?: string; // Server name (for network printers)
portName?: string; // Port name
driverName?: string; // Driver name
location?: string; // Physical location
comment?: string; // Description
status: number; // Status code
isDefault?: boolean; // Is default printer
}Performance
This library is optimized for high performance:
- ⚡ 44% faster than legacy approaches
- 🔥 Page caching - Render once, print multiple copies instantly
- 💾 Memory efficient - Smart bitmap lifecycle management
Quality vs Speed
| Quality | DPI | Speed | Best For |
|---|---|---|---|
| LOW | 150 | Fast | Draft documents |
| MEDIUM | 300 | Balanced ⭐ | Standard documents |
| HIGH | 600 | Slower | Photos, presentations |
Optimization Tips
// For multiple copies - use cache (enabled by default)
await printer.print('./report.pdf', { copies: 10 });
// For batch processing - disable cache
printer.setCacheEnabled(false);
for (const file of files) {
await printer.print(file);
}📖 See detailed benchmarks and optimization strategies in Performance Guide
More Examples
Check the examples/ directory for complete working examples:
simple-print.ts- Basic printingadvanced-print.ts- Full configurationlist-printers.ts- Enumerate printersprint-with-dialog.ts- Interactive dialogtest-performance.ts- Performance testing
Troubleshooting
Common Issues
Printer not found?
// List all available printers
const printers = await PrinterManager.getAvailablePrinters();
console.log(printers);Print job fails?
- Verify printer is online and not paused
- Check printer permissions
- Ensure printer driver is installed
- Try printing a test page from Windows Settings
PDF not rendering correctly?
- Verify the PDF file is valid
- Test with a simple PDF first
- Try increasing print quality
📖 For detailed troubleshooting, see Troubleshooting Guide
Platform Support
Windows Only - This library is designed exclusively for Windows (7, 10, 11, Server).
For Unix/Linux/macOS, use unix-print.
How It Works
This library uses Windows native APIs:
- PDFium - Renders PDF pages to bitmaps at specified DPI
- GDI32 - Transfers bitmaps to printer via Windows Graphics Device Interface
- Winspool - Manages printer configuration and job control
📖 For technical details, see Architecture Guide
Documentation
Contributing
Contributions are welcome! See CONTRIBUTING.md for guidelines.
Testing
npm test # Run all tests
npm run test:watch # Watch mode
npm run test:coverage # Coverage reportChangelog
See CHANGELOG.md for version history.
License
MIT License - see LICENSE file for details.
Links
- � npm Package
- 🐛 Report Issues
- 💬 Discussions
- 🔗 unix-print - For Unix/Linux/macOS
Made with ❤️ for the Node.js community