# Jak drukować pliki PDF za pomocą Node.js
Aby wydrukować plik PDF w Node.js, trzeba wysłać dokument do spoolera wydruków systemu operacyjnego. Pakiet [`pdf-to-printer`](https://www.npmjs.com/package/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](https://ironpdf.com/nodejs/) naturalnie współpracuje z tym przepływem pracy.
*as-heading:2(Szybki start: Wydrukuj plik PDF w Node.js)*
```javascript
//: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));
```
<div class="hsg-featured-snippet">
<h3>Minimalny przebieg pracy (5 kroków)</h3>
1. Zainstalować pakiet: `npm install pdf-to-printer`
2. Importować moduł: `const printer = require('pdf-to-printer');`
3. Wywołać `printer.print('./path/to/file.pdf')` - zwraca Obietnicę
4. Obsłużyć sukces za pomocą `.then()` i błędy za pomocą `.catch()`
5. Przekazać obiekt `printerOpcjas` jako drugi argument, aby celować w konkretną drukarkę lub ustawić ilość kopii
</div>
## 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](https://www.sumatrapdfreader.org/free-pdf-reader) 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](https://www.cups.org/). Potwierdź, że CUPS jest zainstalowany i że przynajmniej jedna drukarka jest zarejestrowana za pomocą `lpstat -p`.
[[i:(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.
```shell
//: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
```
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.
```javascript
//: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);
}
});
```
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.
[[n:(Obietnica 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](https://ironpdf.com/nodejs/docs/) 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.
```javascript
//: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');
```
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](https://ironpdf.com/nodejs/tutorials/html-to-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()`.
```javascript
//: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);
```
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.
[[t:(Na 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:
<table class="content__data-table" data-content-table>
<caption>pdf-to-printer option properties</caption>
<thead>
<tr>
<th>Opcja</th>
<th>Typ</th>
<th>Opis</th>
<th>Przykładowa wartość</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>drukarka</code></td>
<td>string</td>
<td>Dokładna nazwa drukarki, jak zwrócona przez <code>getPrinters()</code></td>
<td><code>"HP LaserJet Pro"</code></td>
</tr>
<tr>
<td><code>kopie</code></td>
<td>number</td>
<td>Liczba kopii do wydruku</td>
<td><code>2</code></td>
</tr>
<tr>
<td><code>strony</code></td>
<td>string</td>
<td>Zakres stron jako ciąg</td>
<td><code>'1-3,5'</code></td>
</tr>
<tr>
<td><code>skalowanie</code></td>
<td>string</td>
<td>Tryb skalowania stron</td>
<td><code>'dopasuj'</code>, <code>'bezskalowania'</code>, <code>'zmniejsz'</code></td>
</tr>
<tr>
<td><code>orientacja</code></td>
<td>string</td>
<td>Nadpisanie orientacji strony</td>
<td><code>'portret'</code>, <code>'landscape'</code></td>
</tr>
</tbody>
</table>
Dla dokumentów, które wymagają [niestandardowych rozmiarów papieru](https://ironpdf.com/nodejs/examples/custom-pdf-paper-size/) lub określonej [orientacji stron](https://ironpdf.com/nodejs/examples/pdf-page-orientation/) 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?
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.
```javascript
//: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.`);
})();
```
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](https://ironpdf.com/nodejs/examples/using-html-to-create-a-pdf/) IronPDF, aby generować i drukować w jednym potoku. Przykład [kompresji PDF](https://ironpdf.com/nodejs/examples/pdf-compression/) warto zastosować przed dużymi partiami drukowania, aby skrócić czas transferu spoolera na drukarkach sieciowych.
[[t:(Dodać 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.
[[w:(Pakiet `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.
```javascript
//: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'));
})();
```
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](https://ironpdf.com/nodejs/examples/encryption-and-decryption/), 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.
[[n:(Przechowuj 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](#trial-license) 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](#licensing).
Czy jesteś gotów pójść dalej? Poznaj pełną kolekcję poradników IronPDF for Node.js, aby dowiedzieć się, jak [scalić pliki PDF](https://ironpdf.com/nodejs/how-to/nodejs-merge-pdf/), [kompresować pliki PDF](https://ironpdf.com/nodejs/how-to/nodejs-compress-pdf/) i [konwertować PDF na obrazy](https://ironpdf.com/nodejs/how-to/nodejs-pdf-to-image/).
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-printerconst 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));
Obsłużyć sukces za pomocą .then() i błędy za pomocą .catch()
Przekazać obiekt printerOpcjas jako drugi argument, aby celować w konkretną drukarkę lub ustawić ilość kopii
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.
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.jsconst 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żne: Obietnica 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.jsconst { 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 = awaitPdfDocument.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.jsconst 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.
Porady: Na 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
Opcja
Typ
Opis
Przykładowa wartość
drukarka
string
Dokładna nazwa drukarki, jak zwrócona przez getPrinters()
"HP LaserJet Pro"
kopie
number
Liczba kopii do wydruku
2
strony
string
Zakres stron jako ciąg
'1-3,5'
skalowanie
string
Tryb skalowania stron
'dopasuj', 'bezskalowania', 'zmniejsz'
orientacja
string
Nadpisanie 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?
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.
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.
Porady: Dodać 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żenie: Pakiet 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.
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żne: Przechowuj 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.
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.
How can I handle security and permissions when printing sensitive PDFs?
For secure printing, use an audit log to track print job details, such as user identity and timestamps. Consider integrating IronPDF's PDF encryption features to protect files before they're sent to the printer.
How does IronPDF support multi-platform PDF generation?
IronPDF supports PDF generation across Windows, macOS, and Linux platforms, providing functionality such as HTML rendering and template processing to create consistently formatted PDFs that can subsequently be printed using `pdf-to-printer`.
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ęczników.