Jak drukować pliki PDF za pomocą Node.js

This article was translated from English: Does it need improvement?
Translated
View the article in English

Aby wydrukować plik PDF w Node.js, trzeba wysłać dokument do spoolera wydruków systemu operacyjnego. Pakiet npm pdf-to-printer przekształca to wywołanie systemowe w API oparte na obietnicach, które działa w systemach Windows, macOS i Linux, umożliwiając umieszczenie zadania drukowania w kolejce za pomocą jednego wywołania metody. Do generowania PDF-ów przed wydrukiem — konwersji HTML, URL-i lub szablonów na dokumenty gotowe do druku — IronPDF dla Node.js naturalnie współpracuje z tym przepływem pracy.

Szybki start: Wydrukuj plik PDF w Node.js

//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-print-pdf/quickstart.js
// 1. Install: npm install pdf-to-printer
const printer = require('pdf-to-printer');

// 2. Print the PDF file (returns a Promise)
printer
  .print('./invoice.pdf')
  .then(() => console.log('Print job queued successfully.'))
  .catch((err) => console.error('Print failed:', err));
//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-print-pdf/quickstart.js
// 1. Install: npm install pdf-to-printer
const printer = require('pdf-to-printer');

// 2. Print the PDF file (returns a Promise)
printer
  .print('./invoice.pdf')
  .then(() => console.log('Print job queued successfully.'))
  .catch((err) => console.error('Print failed:', err));
JAVASCRIPT

Jakie są wymagania wstępne do drukowania PDF-ów w Node.js?

Przed użyciem pdf-to-printer wymagane jest Node.js 14.x lub nowsze oraz npm. Pakiet polega na natywnych komendach wydruku systemu operacyjnego zamiast wbudowanego silnika drukującego, więc sterowniki drukarki muszą już być skonfigurowane na docelowej maszynie.

Na Windows pakiet wywołuje SumatraPDF za pomocą PowerShell. Upewnij się, że wykonanie skryptów PowerShell nie jest blokowane przez zasady systemowe. W systemach macOS i Linux pakiet przekazuje zadanie do polecenia lp, które jest częścią systemu drukowania CUPS. Sprawdź, czy CUPS jest zainstalowany i czy przynajmniej jedna drukarka jest zarejestrowana w lpstat -p.

Zwróć uwagęNode.js 18.x LTS jest zalecany do produkcyjnych obciążeń. Pakiet pdf-to-printer obsługuje wszystkie aktywne wersje Node.js LTS.

Jak skonfigurować projekt Node.js do drukowania PDF-ów?

Zainicjuj nowy projekt, zainstaluj pakiet i stwórz minimalną strukturę katalogów przed napisaniem jakiejkolwiek logiki drukowania.

//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-print-pdf/setup.sh
mkdir pdf-printer
cd pdf-printer
npm init -y
npm install pdf-to-printer
//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-print-pdf/setup.sh
mkdir pdf-printer
cd pdf-printer
npm init -y
npm install pdf-to-printer
SHELL

Po instalacji utwórz plik index.js zawierający logikę drukowania oraz folder pdfs/, w którym będą przechowywane dokumenty przeznaczone do wydruku. Oddzielny config.js dla ustawień drukarki pozwala wyłączyć nazwy drukarek z logiki głównej — jest to przydatny wzorzec w przypadku wdrożeń w wielu srodowiskach, gdzie docelowa drukarka różni się w srodowisku programistycznym i produkcyjnym.

Moduł używa natywnych wiązań, które rozwiązują się w czasie wykonywania, więc nie ma potrzeby wykonywania etapu kompilacji. Katalog node_modules/pdf-to-printer/dist/ będzie zawierał gotowe pliki binarne dla wykrytej platformy.

Jak wydrukować plik PDF z podstawowym użyciem?

Przekaż bezwzględną lub względną ścieżkę do pliku do printer.print(). Metoda umieszcza dokument w kolejkach z domyślną drukarką systemu i rozwiązuje Obietnicę, gdy zadanie zostanie zaakceptowane przez spooler — nie w momencie zakończenia wydruku fizycznego.

//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-print-pdf/basic-print.js
const fs = require('fs').promises;
const printer = require('pdf-to-printer');

async function printPDF(filePath) {
  // Verify the file exists before sending to printer
  await fs.access(filePath);

  const stats = await fs.stat(filePath);
  if (stats.size === 0) {
    throw new Error('PDF file is empty');
  }

  await printer.print(filePath);
  console.log(`Print job queued: ${filePath}`);
}

printPDF('./pdfs/invoice.pdf').catch((err) => {
  if (err.code === 'ENOENT') {
    console.error('File not found:', err.path);
  } else {
    console.error('Print error:', err.message);
  }
});
//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-print-pdf/basic-print.js
const fs = require('fs').promises;
const printer = require('pdf-to-printer');

async function printPDF(filePath) {
  // Verify the file exists before sending to printer
  await fs.access(filePath);

  const stats = await fs.stat(filePath);
  if (stats.size === 0) {
    throw new Error('PDF file is empty');
  }

  await printer.print(filePath);
  console.log(`Print job queued: ${filePath}`);
}

printPDF('./pdfs/invoice.pdf').catch((err) => {
  if (err.code === 'ENOENT') {
    console.error('File not found:', err.path);
  } else {
    console.error('Print error:', err.message);
  }
});
JAVASCRIPT

Sprawdzenie istnienia pliku przed wywołaniem printer.print() zapobiega cichym błędom w przypadku nieprawidłowej ścieżki lub przeniesienia pliku. Wywołanie fs.access() generuje ENOENT, jeśli ścieżka nie zostanie rozpoznana, co daje opisowy błąd zamiast ogólnego odrzucenia przez bufor wydruku. Częste przyczyny błędów obejmują nieprawidłowe ścieżki względne, brakujące sterowniki drukarek oraz status offline drukarek.

WażneObietnica rozwiązuje się, gdy zadanie wydruku zostanie zaakceptowane przez spooler OS, nie gdy dokument zakończy drukowanie. Do celów audytu, zarejestruj czas na moment rozwiązania, a nie zakładaj, że dokument opuścił drukarkę.

Jak wygenerować PDF przed drukowaniem?

Jeśli dokument nie istnieje jeszcze jako plik, należy go wygenerować za pomocą IronPDF for Node.js przed wywołaniem printer.print(). IronPDF renderuje HTML, URL-e oraz ciągi szablonów na gotowe do druku pliki PDF bez potrzeby oddzielnego uruchomienia przeglądarki.

//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-print-pdf/generate-and-print.js
const { PdfDocument } = require('@ironsoftware/ironpdf');
const printer = require('pdf-to-printer');

async function generateAndPrint(htmlContent, outputPath) {
  // Render HTML to a PDF file using IronPDF
  const pdf = await PdfDocument.fromHtml(htmlContent);
  await pdf.saveAs(outputPath);

  // Send the generated file to the default printer
  await printer.print(outputPath);
  console.log(`Generated and printed: ${outputPath}`);
}

generateAndPrint('<h1>Monthly Report</h1><p>Sales data for May 2026.</p>', './pdfs/report.pdf');
//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-print-pdf/generate-and-print.js
const { PdfDocument } = require('@ironsoftware/ironpdf');
const printer = require('pdf-to-printer');

async function generateAndPrint(htmlContent, outputPath) {
  // Render HTML to a PDF file using IronPDF
  const pdf = await PdfDocument.fromHtml(htmlContent);
  await pdf.saveAs(outputPath);

  // Send the generated file to the default printer
  await printer.print(outputPath);
  console.log(`Generated and printed: ${outputPath}`);
}

generateAndPrint('<h1>Monthly Report</h1><p>Sales data for May 2026.</p>', './pdfs/report.pdf');
JAVASCRIPT

Ten wzór jest powszechny w przepływach raportowych, gdzie treść PDF jest zgromadzona w czasie wykonywania z rekordów baz danych lub odpowiedzi API. Zobacz samouczek konwersji HTML do PDF na pełną lekcję dotyczącą opcji renderingu IronPDF, w tym wsparcie CSS i wstawianie nagłówków/stopek.

Jak określić niestandardowe opcje drukarki?

Przekaż obiekt printerOpcjas jako drugi argument do printer.print(), aby wybrać konkretną drukarkę, ustawić liczbę kopii, wybrać zakres stron lub kontrolować skalowanie stron. Nazwa drukarki musi dokładnie odpowiadać wartości zwracanej przez printer.getPrinters().

//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-print-pdf/custom-options.js
const printer = require('pdf-to-printer');

async function printWithOpcjas(filePath) {
  // List available printers to find the correct name
  const printers = await printer.getPrinters();
  printers.forEach((p) => {
    console.log(`${p.name} -- default: ${p.isDefault}`);
  });

  const options = {
    printer: 'HP LaserJet Pro',  // Exact name from getPrinters()
    copies: 2,                   // Number of copies
    pages: '1-3,5',              // Pages to print (optional)
    scale: 'fit',                // 'fit' | 'noscale' | 'shrink'
    orientation: 'portrait',     // 'portrait' | 'landscape'
  };

  await printer.print(filePath, options);
  console.log(`Printed ${options.copies} copies to "${options.printer}"`);
}

printWithOpcjas('./pdfs/shipping-label.pdf').catch(console.error);
//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-print-pdf/custom-options.js
const printer = require('pdf-to-printer');

async function printWithOpcjas(filePath) {
  // List available printers to find the correct name
  const printers = await printer.getPrinters();
  printers.forEach((p) => {
    console.log(`${p.name} -- default: ${p.isDefault}`);
  });

  const options = {
    printer: 'HP LaserJet Pro',  // Exact name from getPrinters()
    copies: 2,                   // Number of copies
    pages: '1-3,5',              // Pages to print (optional)
    scale: 'fit',                // 'fit' | 'noscale' | 'shrink'
    orientation: 'portrait',     // 'portrait' | 'landscape'
  };

  await printer.print(filePath, options);
  console.log(`Printed ${options.copies} copies to "${options.printer}"`);
}

printWithOpcjas('./pdfs/shipping-label.pdf').catch(console.error);
JAVASCRIPT

Wywołanie getPrinters() przed print() służy dwóm celom: potwierdza, że drukarka jest podłączona do sieci i dostępna, oraz dostarcza autorytatywny ciąg znaków, którego system operacyjny używa do kierowania zadań drukowania. Nazwy drukarek często zawierają numery wersji lub rozszerzenia sieciowe, które różnią się od nazw wyświetlanych w ustawieniach systemowych.

PoradyW systemie Windows getPrinters() zwraca listę drukarek z rejestru. Na macOS/Linux, zapytuje CUPS. Flaga isDefault identyfikuje drukarkę, która odbiera zadania, gdy nie podano nazwy drukarki.

Jakie opcje drukarek można skonfigurować?

Obiekt printerOpcjas obsługuje następujące pola:

pdf-to-printer option properties
OpcjaTypOpisPrzykładowa wartość
drukarkaciąg znakówDokładna nazwa drukarki, jak zwrócona przez getPrinters()"HP LaserJet Pro"
kopieliczbaLiczba kopii do wydruku2
stronyciąg znakówZakres stron jako ciąg'1-3,5'
skalowanieciąg znakówTryb skalowania stron'dopasuj', 'bezskalowania', 'zmniejsz'
orientacjaciąg znakówNadpisanie orientacji strony'portret', 'landscape'

Dla dokumentów, które wymagają niestandardowych rozmiarów papieru lub określonej orientacji stron zastosowanej podczas generacji PDF, a nie w czasie drukowania, skonfiguruj te opcje na etapie renderingu IronPDF przed zapisaniem pliku.

Jak zaimplementować drukowanie wsadowe w Node.js?

Przetwarzaj folder plików PDF lub dynamicznie generowaną listę, iterując tablicę i wywołując printer.print() dla każdego pliku. Użycie for...of z await zapewnia sekwencyjność zadań, co zapobiega przeciążeniu bufora wydruku jednoczesnymi żądaniami.

//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-print-pdf/batch-print.js
const printer = require('pdf-to-printer');
const fs = require('fs').promises;
const path = require('path');

class BatchPrinter {
  constructor(printerName = null) {
    this.printerName = printerName;
    this.queue = [];
  }

  async addFiles(filePaths) {
    for (const filePath of filePaths) {
      try {
        await fs.access(filePath);
        this.queue.push(filePath);
      } catch {
        console.warn(`Skipped (not found): ${filePath}`);
      }
    }
  }

  async printAll(options = {}) {
    const results = { successful: 0, failed: 0, errors: [] };

    for (const filePath of this.queue) {
      try {
        const printOpcjas = {
          ...options,
          ...(this.printerName && { printer: this.printerName }),
        };
        await printer.print(filePath, printOpcjas);
        results.successful++;
        console.log(`Printed: ${path.basename(filePath)}`);
      } catch (err) {
        results.failed++;
        results.errors.push({ file: filePath, error: err.message });
      }
    }

    this.queue = [];
    return results;
  }
}

// Usage: print monthly reports to a specific printer
(async () => {
  const batch = new BatchPrinter('Office Printer A3');

  await batch.addFiles([
    './reports/january.pdf',
    './reports/february.pdf',
    './reports/march.pdf',
  ]);

  const results = await batch.printAll({ copies: 1 });
  console.log(`Done -- ${results.successful} printed, ${results.failed} failed.`);
})();
//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-print-pdf/batch-print.js
const printer = require('pdf-to-printer');
const fs = require('fs').promises;
const path = require('path');

class BatchPrinter {
  constructor(printerName = null) {
    this.printerName = printerName;
    this.queue = [];
  }

  async addFiles(filePaths) {
    for (const filePath of filePaths) {
      try {
        await fs.access(filePath);
        this.queue.push(filePath);
      } catch {
        console.warn(`Skipped (not found): ${filePath}`);
      }
    }
  }

  async printAll(options = {}) {
    const results = { successful: 0, failed: 0, errors: [] };

    for (const filePath of this.queue) {
      try {
        const printOpcjas = {
          ...options,
          ...(this.printerName && { printer: this.printerName }),
        };
        await printer.print(filePath, printOpcjas);
        results.successful++;
        console.log(`Printed: ${path.basename(filePath)}`);
      } catch (err) {
        results.failed++;
        results.errors.push({ file: filePath, error: err.message });
      }
    }

    this.queue = [];
    return results;
  }
}

// Usage: print monthly reports to a specific printer
(async () => {
  const batch = new BatchPrinter('Office Printer A3');

  await batch.addFiles([
    './reports/january.pdf',
    './reports/february.pdf',
    './reports/march.pdf',
  ]);

  const results = await batch.printAll({ copies: 1 });
  console.log(`Done -- ${results.successful} printed, ${results.failed} failed.`);
})();
JAVASCRIPT

Klasa BatchPrinter oddziela walidację od wykonania. Pliki, które nie istnieją, są pomijane podczas addFiles(), aby pojedynczy brakujący plik nie spowodował przerwania całej partii. Metoda printAll() rejestruje błędy dla poszczególnych plików i zwraca podsumowanie, które można zapisać w dzienniku lub przekazać do usługi monitorującej.

Dla dynamicznie generowanych raportów połącz ten wzór z konwersją HTML ciąg znaków na PDF IronPDF, aby generować i drukować w jednym potoku. Przykład kompresji PDF warto zastosować przed dużymi partiami drukowania, aby skrócić czas transferu spoolera na drukarkach sieciowych.

PoradyDodaj krótką await przerwę między zadaniami, jeśli drukarka obsługuje kolejkowanie wydruków w wolnym tempie — niektóre starsze drukarki sieciowe odrzucają szybkie, kolejne zgłoszenia. Przerwa 200-500 ms jest zwykle wystarczająca.

Jakie są uwagi dotyczące konkretnych platform przy drukowaniu PDF za pomocą Node.js?

Pakiet pdf-to-printer wykorzystuje różne polecenia systemowe w każdym systemie operacyjnym. Zrozumienie podstawowego mechanizmu pomaga w diagnozowaniu awarii specyficznych dla platformy.

Jak działa drukowanie PDF w systemie Windows?

W systemie Windows pdf-to-printer uruchamia SumatraPDF za pomocą polecenia PowerShell. SumatraPDF jest dołączona do pakietu – nie jest potrzebna osobna instalacja. Wykonywanie skryptów PowerShell musi być dozwolone zgodnie z bieżącą polityką wykonania. Uruchom Get-ExecutionPolicy w PowerShell, aby sprawdzić; jeśli wynikiem jest Restricted, ustaw go na RemoteSigned lub Bypass dla tej sesji.

Nazwy drukarek w systemie Windows są wrażliwe na wielkość liter i muszą dokładnie odpowiadać wartości pokazanej w Ustawienia > Bluetooth i urządzenia > Drukarki i skanery, wliczając jakikolwiek sieciowy sufiks w nawiasach.

Jak działa drukowanie PDF na macOS i Linuxie?

W systemach macOS i Linux pakiet wywołuje lp (część CUPS). Sprawdź, czy CUPS działa za pomocą lpstat -p — wyświetli to listę wszystkich zarejestrowanych drukarek i ich aktualny status. Jeśli drukarki się nie pojawiają, może być tak, że usługa CUPS nie została uruchomiona; użyj sudo systemctl start cups w systemie Linux lub włącz tę funkcję w menu Preferencje systemowe > Drukarki w systemie macOS.

Polecenie lp nie obsługuje wszystkich opcji dostępnych w ścieżce SumatraPDF systemu Windows. Opcje scale i orientation mogą nie mieć wpływu na drukowanie oparte na CUPS, w zależności od sterownika drukarki. Przetestuj na docelowym sprzęcie przed wdrożeniem.

OstrzeżeniePakiet pdf-to-printer obecnie drukuje wyłącznie na drukarkach lokalnych i sieciowych. Usługi drukowania w chmurze, takie jak Microsoft Universal Print, nie są obsługiwane przez ten pakiet.

Jak obsługiwać bezpieczeństwo i uprawnienia przy drukowaniu PDF?

Systemy drukowania produkcyjnego, które przetwarzają poufne dokumenty – umowy, dokumenty finansowe, formularze medyczne – potrzebują kontroli dostępu i rejestrów audytowych. Śledzenie, kto wydrukował co i kiedy, jest wymogiem wymogiem regulacyjnym w wielu branżach o rygorystycznych przepisach.

//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-print-pdf/secure-print.js
const printer = require('pdf-to-printer');
const crypto = require('crypto');

class AuditedPrinter {
  constructor() {
    this.log = [];
  }

  async print(filePath, userId, options = {}) {
    const jobId = crypto.randomBytes(8).toString('hex');
    const entry = { jobId, userId, filePath, options, status: 'pending', startedAt: new Date().toISOString() };
    this.log.push(entry);

    try {
      await printer.print(filePath, options);
      entry.status = 'completed';
      entry.completedAt = new Date().toISOString();
      return { success: true, jobId };
    } catch (err) {
      entry.status = 'failed';
      entry.error = err.message;
      throw err;
    }
  }

  getLog(userId = null) {
    return userId ? this.log.filter((e) => e.userId === userId) : this.log;
  }
}

// Usage
const auditedPrinter = new AuditedPrinter();

(async () => {
  await auditedPrinter.print('./contracts/nda-2026.pdf', 'user-42', { copies: 1 });
  console.log('Audit log:', auditedPrinter.getLog('user-42'));
})();
//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-print-pdf/secure-print.js
const printer = require('pdf-to-printer');
const crypto = require('crypto');

class AuditedPrinter {
  constructor() {
    this.log = [];
  }

  async print(filePath, userId, options = {}) {
    const jobId = crypto.randomBytes(8).toString('hex');
    const entry = { jobId, userId, filePath, options, status: 'pending', startedAt: new Date().toISOString() };
    this.log.push(entry);

    try {
      await printer.print(filePath, options);
      entry.status = 'completed';
      entry.completedAt = new Date().toISOString();
      return { success: true, jobId };
    } catch (err) {
      entry.status = 'failed';
      entry.error = err.message;
      throw err;
    }
  }

  getLog(userId = null) {
    return userId ? this.log.filter((e) => e.userId === userId) : this.log;
  }
}

// Usage
const auditedPrinter = new AuditedPrinter();

(async () => {
  await auditedPrinter.print('./contracts/nda-2026.pdf', 'user-42', { copies: 1 });
  console.log('Audit log:', auditedPrinter.getLog('user-42'));
})();
JAVASCRIPT

Klasa AuditedPrinter przypisuje unikalny identyfikator zadania do każdego żądania drukowania i rejestruje tożsamość użytkownika, ścieżkę pliku oraz znaczniki czasu. Zapisanie this.log w bazie danych lub pliku dziennika tylko do dopisywania zamienia to w trwały zapis audytowy. Dla dokumentów zawierających informacje umożliwiające identyfikację osoby, rozważ użycie funkcji szyfrowania PDF IronPDF, aby chronić pliki w spoczynku przed osiągnięciem kolejki drukarki.

W przypadku aplikacji serwerowych akceptujących żądania drukowania przez HTTP, zweryfikuj typ pliku i rozmiar przed drukowaniem – odrzucaj każdy upload, który nie jest prawidłowym binarnym PDF-em. Nigdy nie przekazuj ścieżek plików podanych przez użytkownika bezpośrednio do printer.print() bez ich oczyszczenia.

WażnePrzechowuj dzienniki audytu poza katalogiem zapisywalnym aplikacji. Atakujący z dostępem do zapisu w systemie plików nie powinien móc fałszować zapisów drukowania.

Jakie są kolejne kroki dla drukowania PDF za pomocą Node.js?

W niniejszym przewodniku omówiono drukowanie istniejących plików PDF na drukarkach lokalnych i sieciowych przy użyciu pdf-to-printer, od podstawowego drukowania pojedynczych plików po kolejki wsadowe, niestandardowe opcje drukarki, kwestie związane z platformą oraz rejestrowanie audytowe dla srodowisk podlegających regulacjom.

Aby rozszerzyć ten przepływ pracy o generowanie PDF, rozpocznij darmowy okres próbny IronPDF for Node.js i postępuj zgodnie z samouczkiem HTML do PDF, aby zbudować kompletny przepływ dokumentów. Aby uzyskać opcje licencji i ceny hurtowe, zobacz stronę licencjonowania IronPDF.

Czy jesteś gotów pójść dalej? Poznaj pełną kolekcję poradników IronPDF for Node.js, aby dowiedzieć się, jak scalić pliki PDF, kompresować pliki PDF i konwertować PDF na obrazy.

Często Zadawane Pytania

Jaki jest najprostszy sposób drukowania plików PDF w Node.js?

Użyj pakietu npm pdf-to-printer. Zainstaluj go za pomocą npm install pdf-to-printer, a następnie wywołaj printer.print('./file.pdf') -- zwraca Obietnicę i umieszcza zadanie w kolejce domyślnej drukarki systemowej w jednym wywołaniu.

Jakie są wymogi wstępne do drukowania PDF-ów w Node.js?

Node.js 14.x lub wyższy, npm oraz skonfigurowany sterownik drukarki na maszynie-host. Na Windows, polityka wykonywania PowerShell musi umożliwiać wykonywanie skryptów. Na macOS oraz Linux, CUPS musi być zainstalowany i działać, z przynajmniej jedną drukarką zarejestrowaną przez lpstat -p.

Jak drukować na określoną drukarkę w Node.js?

Przekaż obiekt printerOptions jako drugi argument do printer.print(). Ustaw pole printer na dokładną nazwę drukarki zwróconą przez printer.getPrinters(). Nazwy drukarek są uwzględniające wielkość liter i muszą dokładnie odpowiadać wpisowi w rejestrze systemu operacyjnego.

Czy mogę wygenerować PDF, a następnie go wydrukować w tym samym skrypcie Node.js?

Tak. Użyj IronPDF dla Node.js, aby najpierw wygenerować plik: wywołaj PdfDocument.fromHtml(html), aby wyrenderować treść HTML, zapisz go za pomocą pdf.saveAs(path), a potem przekaż tę ścieżkę do printer.print(path). Zainstaluj IronPDF za pomocą npm install @ironsoftware/ironpdf.

Czy pdf-to-printer działa na macOS i Linux?

Tak. Na macOS i Linux pakiet deleguje do polecenia lp z CUPS. Potwierdź, że CUPS działa za pomocą lpstat -p. Zauważ, że opcje scale i orientation mogą nie działać na wszystkich sterownikach drukarek CUPS.

Jak dodać dziennik audytu zadań drukowania w Node.js?

Owiń printer.print() w klasę, która przypisuje unikalny identyfikator zadania za pomocą crypto.randomBytes(8).toString('hex') i rejestruje ścieżkę pliku, ID użytkownika i znaczniki czasu. Przechowuj tablicę dziennika w bazie danych lub pliku tylko do dodawania danych, poza zapisywaną przez aplikację ścieżką katalogu.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej
Gotowy, aby rozpocząć?
Wersja: 2026.5 just released
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu?
Uruchom przykład i zobacz, jak Twój kod HTML zamienia się w plik PDF.