Commencer
-
Installez le 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 -
Synchronisation avec les projets natifs
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”Importez le plugin et imprimez différents types de contenu :
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”imprimer(options)
Section titled “imprimer(options)”Ouvre la boîte de dialogue d’impression native avec le contenu spécifié.
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()”Vérifie si l’impression est disponible sur le périphérique.
const { value } = await Printer.canPrint();console.log('Printing available:', value);Exemple complet
Section titled “Exemple complet”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); }); }}Utilisation avancée
Section titled “Utilisation avancée”Impression avec un style personnalisé
Section titled “Impression avec un style personnalisé”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' });};Impression de tableaux
Section titled “Impression de tableaux”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' });};Impression d’images
Section titled “Impression d’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 });};## meilleures pratiques
- Vérifier la disponibilité : Vérifiez toujours si l’impression est disponible avant d’essayer d’imprimer.
- Contenu valide : assurez-vous que HTML est bien formé et que les chemins de fichiers sont valides
- Noms des travaux : utilisez des noms descriptifs pour les travaux d’impression afin d’aider les utilisateurs à les identifier
- Style : utilisez du CSS en ligne ou des styles intégrés pour une sortie d’impression cohérente
- Gestion des erreurs : enveloppez les appels d’impression dans des blocs try-catch pour les commentaires des utilisateurs
Dépannage
Section titled “Dépannage”Problèmes courants
Section titled “Problèmes courants”La boîte de dialogue Imprimer n’apparaît pas : Vérifiez que l’impression est disponible avec canPrint() Contenu non imprimé : vérifiez que HTML est valide et que les chemins d’accès aux fichiers sont corrects. Les images ne s’affichent pas : assurez-vous que les chemins d’accès aux images sont absolus et que les fichiers sont accessibles Problèmes de style : utilisez les règles CSS @page et testez la sortie d’impression