Commencer
-
Installer the package
Fenêtre de terminal npm i @capgo/capacitor-printerFenêtre de terminal pnpm add @capgo/capacitor-printerFenêtre de terminal yarn add @capgo/capacitor-printerFenêtre de terminal bun add @capgo/capacitor-printer -
Synchroniser with Natif projects
Fenêtre de terminal npx cap syncFenêtre de terminal pnpm cap syncFenêtre de terminal yarn cap syncFenêtre de terminal bunx cap sync
Utilisation
Section titled “Utilisation”Importer the plugin and print various types of content:
import { Printer } from '@capgo/capacitor-printer';
// Print HTML contentconst printHTML = async () => { await Printer.print({ content: '<h1>Hello World</h1><p>This is a test print.</p>', name: 'test-print' });};
// Print a PDF fileconst printPDF = async () => { await Printer.print({ content: 'file:///path/to/document.pdf', name: 'my-document' });};
// Print an imageconst printImage = async () => { await Printer.print({ content: 'file:///path/to/image.jpg', name: 'my-image' });};API Référence
Section titled “API Référence”print(Options)
Section titled “print(Options)”Opens the Natif print dialog with the specified content.
interface PrintOptions { content: string; // HTML string, file URI, or base64 data name?: string; // Print job name orientation?: 'portrait' | 'landscape'; grayscale?: boolean; // Print in grayscale (default: false)}
await Printer.print(options);canPrint()
Section titled “canPrint()”Checks if printing is Disponible on the Appareil.
const { value } = await Printer.canPrint();console.log('Printing available:', value);Terminé Exemple
Section titled “Terminé Exemple”import { Printer } from '@capgo/capacitor-printer';import { Filesystem, Directory } from '@capacitor/filesystem';
export class PrintService { async checkPrintAvailability(): Promise<boolean> { const { value } = await Printer.canPrint(); return value; }
async printHTML(htmlContent: string, jobName: string = 'Document') { try { const canPrint = await this.checkPrintAvailability(); if (!canPrint) { throw new Error('Printing not available on this device'); }
await Printer.print({ content: htmlContent, name: jobName, orientation: 'portrait' }); } catch (error) { console.error('Print failed:', error); throw error; } }
async printDocument(filePath: string, jobName?: string) { await Printer.print({ content: filePath, name: jobName || 'Document' }); }
async printReceipt(receiptData: any) { const html = ` <!DOCTYPE html> <html> <head> <style> body { font-family: Arial, sans-serif; padding: 20px; } .header { text-align: center; margin-bottom: 20px; } .item { display: flex; justify-content: space-between; margin: 10px 0; } .total { font-weight: bold; font-size: 1.2em; margin-top: 20px; padding-top: 10px; border-top: 2px solid #000; } </style> </head> <body> <div class="header"> <h2>Receipt</h2> <p>Date: ${new Date().toLocaleDateString()}</p> </div> ${receiptData.items.map((item: any) => ` <div class="item"> <span>${item.name}</span> <span>$${item.price.toFixed(2)}</span> </div> `).join('')} <div class="total"> <div class="item"> <span>Total:</span> <span>$${receiptData.total.toFixed(2)}</span> </div> </div> </body> </html> `;
await this.printHTML(html, 'Receipt'); }
async printFromURL(url: string) { // Download the file first const response = await fetch(url); const blob = await response.blob(); const reader = new FileReader();
return new Promise((resolve, reject) => { reader.onloadend = async () => { try { await Printer.print({ content: reader.result as string, name: 'Downloaded Document' }); resolve(true); } catch (error) { reject(error); } }; reader.onerror = reject; reader.readAsDataURL(blob); }); }}Advanced Utilisation
Section titled “Advanced Utilisation”Printing with Custom Styling
Section titled “Printing with Custom Styling”const printStyledDocument = async () => { const html = ` <!DOCTYPE html> <html> <head> <style> @page { size: A4; margin: 2cm; } body { font-family: 'Times New Roman', serif; line-height: 1.6; } h1 { color: #333; border-bottom: 2px solid #333; padding-bottom: 10px; } .content { margin-top: 20px; } </style> </head> <body> <h1>Professional Document</h1> <div class="content"> <p>This is a professionally styled document ready for printing.</p> </div> </body> </html> `;
await Printer.print({ content: html, name: 'Styled Document', orientation: 'portrait' });};Printing Tables
Section titled “Printing Tables”const printTable = async (data: any[]) => { const tableRows = data.map(row => ` <tr> <td>${row.id}</td> <td>${row.name}</td> <td>${row.value}</td> </tr> `).join('');
const html = ` <!DOCTYPE html> <html> <head> <style> table { width: 100%; border-collapse: collapse; } th, td { border: 1px solid #ddd; padding: 8px; text-align: left; } th { background-color: #f2f2f2; font-weight: bold; } </style> </head> <body> <table> <thead> <tr> <th>ID</th> <th>Name</th> <th>Value</th> </tr> </thead> <tbody> ${tableRows} </tbody> </table> </body> </html> `;
await Printer.print({ content: html, name: 'Data Table' });};Printing Images
Section titled “Printing Images”const printImageWithDetails = async (imagePath: string, title: string) => { const html = ` <!DOCTYPE html> <html> <head> <style> body { text-align: center; padding: 20px; } h2 { margin-bottom: 20px; } img { max-width: 100%; height: auto; } </style> </head> <body> <h2>${title}</h2> <img src="${imagePath}" alt="${title}" /> </body> </html> `;
await Printer.print({ content: html, name: title });};Best Practices
Section titled “Best Practices”- Vérifier Availability: Always Vérifier if printing is Disponible before attempting to print
- Valid Content: Ensure HTML is well-formed and file paths are valid
- Job Names: Use descriptive names for print jobs to Aide Utilisateurs identify them
- Styling: Use inline CSS or embedded styles for consistent print output
- Erreur Handling: Wrap print calls in try-catch blocks for Utilisateur Retour
Dépannage
Section titled “Dépannage”Problèmes courants
Section titled “Problèmes courants”Print dialog not appearing: Check that printing is available with canPrint() Content not printing: Verify that HTML is valid and file paths are correct Images not showing: Ensure image paths are absolute and files are accessible Styling issues: Use @page CSS rules and test print output