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 pdf-to-printer npm abstrahuje to wywołanie systemowe w API oparte na obietnicach, które działa na Windows, macOS i Linux, umożliwiając kolejkowanie zadania drukowania w jednym wywołaniu 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?

Node.js 14.x lub nowszy i npm są wymagane przed użyciem pdf-to-printer. 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. Na macOS i Linux, pakiet deleguje do polecenia lp, które jest częścią systemu drukowania CUPS. Potwierdź, że CUPS jest zainstalowany i że przynajmniej jedna drukarka jest zarejestrowana za pomocą lpstat -p.

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

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, utworzyć plik index.js dla swojej logiki drukowania i folder pdfs/, aby przechowywać dokumenty, które chcesz wydrukować. Oddzielny config.js dla ustawień drukarki utrzymuje nazwy drukarek poza twoją logiką główną — użyteczny wzorzec dla wdrożeń wielośrodowiskowych, gdzie docelowa drukarka różni się między tworzeniem a produkcją.

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ć wstępnie zbudowane binaria dla wykrytego systemu operacyjnego.

Jak wydrukować plik PDF z podstawowym użyciem?

Przekazać ścieżkę pliku absolutną lub względną 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 awariom, gdy ścieżka jest błędna lub plik został przeniesiony. Wywołanie fs.access() wyrzuca ENOENT, jeśli ścieżka nie zostanie rozwiązana, dając ci opisowy błąd zamiast ogólnego odrzucenia przez drukarkę. 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?

Gdy dokument nie istnieje jeszcze jako plik, wygenerować go przy użyciu IronPDF dla 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?

Przekazać obiekt printerOpcjas jako drugi argument do printer.print(), aby celować w konkretną drukarkę, ustawić ilość kopii, wybrać zakresy stron lub kontrolować skalowanie stron. Nazwa drukarki musi być dokładna i 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 online i osiągalna, oraz daje ci autorytatywny ciąg nazwy, 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.

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

Jakie opcje drukarek można skonfigurować?

Obiekt printerOpcjas wspiera następujące pola:

pdf-to-printer option properties
OpcjaTypOpisPrzykładowa wartość
drukarkastringDokładna nazwa drukarki, jak zwrócona przez getPrinters()"HP LaserJet Pro"
kopienumberLiczba kopii do wydruku2
stronystringZakres stron jako ciąg'1-3,5'
skalowaniestringTryb skalowania stron'dopasuj', 'bezskalowania', 'zmniejsz'
orientacjastringNadpisanie 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.

Icon Quote related to Jakie opcje drukarek można skonfigurować?

Moją ulubioną biblioteką tego typu jest IronPDF. Umożliwia ona szybkie i efektywne manipulowanie plikami PDF. Posiada także wiele cennych funkcji, takich jak eksport do formatu PDF/A i cyfrowe podpisywanie dokumentów PDF.

Milan Jovanovic related to Jakie opcje drukarek można skonfigurować?

Milan Jovanovic

Microsoft MVP

Zobacz studium przypadku
Icon Quote related to Jakie opcje drukarek można skonfigurować?

IronOCR pozwala nam oszczędzić 40 000 USD rocznie na ręcznym przetwarzaniu, jednocześnie zwiększając produktywność i uwalniając zasoby do zadań o wysokim wpływie. Gorąco polecam.

Brent Matzelle related to Jakie opcje drukarek można skonfigurować?

Brent Matzelle

Dyrektor technologiczny, OPYN

Zobacz studium przypadku
Icon Quote related to Jakie opcje drukarek można skonfigurować?

IronSuite odgrywa kluczową rolę w naszej działalności. Są to narzędzia zwiększające wydajność w całej firmie, w tym tworzenie planów pięter i poprawa zarządzania zapasami.

David Jones related to Jakie opcje drukarek można skonfigurować?

David Jones

Główny inżynier oprogramowania, Agorus Build

Zobacz studium przypadku

Jak zaimplementować drukowanie wsadowe w Node.js?

Przetwórz folder plików PDF lub dynamicznie utworzoną listę, iterując tablicę i wywołując printer.print() dla każdego pliku. Użycie for...of z await utrzymuje prace sekwencyjne, co zapobiega przeciążeniu kolejki drukarki przez jednoczesne żądania.

//: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(), więc pojedynczy brakujący plik nie przerywa całej partii. Metoda printAll() rejestruje błędy dla każdego pliku i zwraca podsumowanie, które można zapisać do dziennika lub przesłać do usługi monitorowania.

Dla dynamicznie generowanych raportów połącz ten wzór z konwersją HTML string 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.

PoradyDodać krótki await opóźnienie między zadaniami, jeśli drukarka powoli obsługuje kolejkowanie wydruków — 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 używa różnych poleceń systemowych na każdym systemie operacyjnym. Zrozumienie podstawowego mechanizmu pomaga w diagnozowaniu awarii specyficznych dla platformy.

Jak działa drukowanie PDF w systemie Windows?

Na Windows, pdf-to-printer używa powłoki zewnętrznej do SumatraPDF przez polecenie 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. Uruchomić Get-ExecutionPolicy w PowerShell, aby sprawdzić; jeśli wynik to Restricted, ustawić na RemoteSigned lub Bypass na sesję.

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?

Na macOS i Linux pakiet wywołuje lp (część CUPS). Potwierdź, że CUPS jest uruchomiony, za pomocą lpstat -p — wyświetli to listę wszystkich zarejestrowanych drukarek i ich obecny 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 na Linux lub włącz to poprzez Preferencje systemowe > Drukarki na macOS.

Polecenie lp nie obsługuje wszystkich tych samych opcji co ścieżka Windows SumatraPDF. 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 tylko na lokalne i sieciowe drukarki. 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 pracy do każdego żądania drukowania i rejestruje tożsamość użytkownika, ścieżkę pliku i sygnatury czasowe. Utrwalenie this.log w bazie danych lub w pliku dziennika tylko do dodawania zamienia to w trwały zapis audytu. 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 przesyłaj ścieżek plików dostarczonych przez użytkownika bezpośrednio do printer.print() bez sanitizacji.

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?

Niniejszy przewodnik obejmował drukowanie istniejących plików PDF na drukarki lokalne i sieciowe za pomocą pdf-to-printer, od podstawowego drukowania pojedynczych plików po kolejki zadań, niestandardowe opcje drukarki, kwestie platformowe i rejestrowanie audytów dla środowisk regulowanych.

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.

Darrius Serrant
Inżynier oprogramowania Full Stack (WebOps)

Darrius Serrant posiada tytuł licencjata z informatyki z Uniwersytetu Miami i pracuje jako Full Stack WebOps Marketing Engineer w Iron Software. Już od młodych lat zainteresował się kodowaniem, postrzegając informatykę jako zarówno tajemniczą, jak i dostępną, co czyni ją doskonałym medium dla kreatywności ...

Czytaj więcej
Gotowy, aby rozpocząć?
Wersja: 2026.6 właśnie wydany
Still Scrolling Icon

Wciąż przewijasz?

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