在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
本教程将深入探讨 IronPDF 和 PDFKit 兩個 JavaScript PDF 庫的大名。兩者都是 Node.js 專案的可靠選擇,但各有優劣。
本文的目的是讓讀者真正了解如何將 IronPDF 和 PDFKit 工具整合到開發人員的 Node.js 工作流程中。不論是處理基本的 PDF 還是處理複雜的版面,理解 IronPDF 和 PDFKit 可以如何運作。 (和不能) 「做超級重要的事情。」
PDFKit 是一個先進的 JavaScript PDF 生成庫,適用於 Node.js 和瀏覽器環境。它全面的工具集使其非常適合輕鬆創建多頁、可打印文檔。該庫旨在簡化生成複雜文檔的過程,且使用簡單。
PDFKit 以其強大的向量圖形功能、大量的文本和字體樣式選項、嵌入圖片功能,以及對交互式和安全的 PDF 文檔的支持而脫穎而出。簡便的使用方式,結合其在伺服器端和瀏覽器環境中的多功能性,使它成為開發人員在各種應用中生成自定義 PDF 的寶貴工具。
靈活的 PDF 生成功能
PDFKit 並不依賴 HTML 到 PDF 的轉換;相反,它通過 JavaScript 代碼直接生成 PDF。這種方法為開發人員提供了對 PDF 文件佈局、樣式和內容的精確控制,因此生成複雜的文檔更容易。
圖形和文本格式設置
該庫支持高級圖形功能,包括直線、曲線、矩形、圓形等。文本格式設置功能如自定義字體、大小和顏色使文檔更具視覺吸引力。
圖片嵌入和向量圖形
PDFKit 允許嵌入多種格式的圖片並支持向量圖形,非常適合高品質的打印文檔。圖片嵌入支持 JPEG 和 PNG 文件。
高級文檔功能
開發人員可以為 PDF 添加註釋、書籤和超鏈接。該庫還支持創建頁眉和頁腳,以及頁碼和自定義 JavaScript 的包含。
可自定義和重用的組件
PDFKit API 使得創建可重用組件變得容易,簡化了具有重複結構的文檔(如發票或報告)的開發過程。
向量圖形
PDFKit 提供了一個類似 HTML5 畫布的 API 用於向量圖形,包括路徑操作、SVG 路徑解析、變換和漸變。這非常適合在 PDF 中創建可擴展的高質量圖形。該庫支持換行、多種文本對齊和項目符號列表。
嵌入字體
PDFKit 支持多種字體格式,如 TrueType、OpenType、WOFF 等,確保 PDF 中的排版一致。還提供字體子集選項,確保文檔大小保持可管理。
使用 IronPDF,可以輕鬆將 HTML 字串、文件甚至整個網頁轉換為 PDF,並且保持與原始內容完全一致,包括 CSS 樣式和圖像。這對於提供專業級文檔(如發票、合同和報告)至關重要,這些文檔需要保留網頁設計指定的品牌和佈局。
IronPDF 擅長將 HTML 內容轉換成高保真的 PDF 文件。其功能包括:
IronPDF 提供全面的格式化工具,允許從 HTML 內容創建的 PDF 進行自定義和增強,例如:
IronPDF 的編輯功能十分廣泛,提供了修改現有 PDF 以滿足特定需求的能力:
IronPDF支持創建和操作PDF表格,允許在PDF中包含交互元素:
PDF表格: 這包括創建可數位填寫的表格,使企業能夠自動化數據收集過程。使用IronPDF,您可以通過編程創建表格、填充字段,甚至檢索信息,從而簡化工作流程並減少手動數據輸入。
IronPDF 支援各種平台,使其在不同的開發環境中具有多樣性。它與 Node.js 12.0 及以上版本相容,並且可以在 Windows、Linux、Mac 和 Docker 上使用。
在進入PDF生成的世界之前,您需要設置您的專案環境。Visual Studio Code (VS Code) 提供了一個理想且使用者友好的平台。首先啟動VS Code並創建一個新的JavaScript項目。你可以通過為你的項目設置一個新的文件夾並在VS Code中打開它來完成這一步驟。這個環境將是你編寫程式碼和管理項目檔案的地方。
當您的資料夾在 VS Code 中開啟後,下一步是初始化一個新的 JavaScript 專案。在 VS Code 中打開整合終端機 (通常在選單中的終端 > 新終端下找到) 並輸入 npm init
。該命令將引導你創建一個 package.json
文件,這對於管理專案依賴項和元數據非常重要。
在設定好您的 JavaScript 專案後,是時候安裝 IronPDF 庫了。在您的 VS Code 終端機中,運行以下命令:
npm install ironpdf
npm install ironpdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'npm install ironpdf
此命令會獲取並安裝IronPDF庫,將其添加到專案的依賴項目中。
安裝後,請確保 IronPDF 列在您的 package.json
文件的依賴項部分中。這樣可以確保 IronPDF 正確集成到您的項目中,為無縫的 PDF 生成和操作鋪平道路。
接下來是 PDFKit,一個強大且多功能的 PDF 文件生成庫。要將 PDFKit 添加到你的項目中,請在 VS Code 的終端中執行以下命令:
npm install pdfkit
npm install pdfkit
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'npm install pdfkit
這將安裝 PDFKit 並將其添加到你的專案依賴項中。
成功安裝後,確認package.json文件中的依賴項目列表內是否出現PDFKit。這一確認對於確保你的專案現在具備創建複雜、詳細且視覺上吸引人的PDF文件所需的工具至關重要。
IronPDF for Node.js 在將 HTML 轉換為 PDF 方面表現出色,為開發者提供高效解決方案。這個庫能夠處理複雜的任務,例如渲染 CSS 樣式、執行 JavaScript 和添加自定義的頁眉和頁腳。這些功能顯著增強了其從 HTML 資源創建專業級 PDF 的能力。IronPDF for Node.js 提供三種方便的方法來進行這一轉換過程:
此方法允許開發人員將HTML代碼字串直接轉換為PDF文件。此功能在涉及動態內容生成的場景中特別有用。無論您是在創建自訂報告、即時生成發票,還是需要以精緻、專業的格式呈現數據驅動的內容,此功能都能使這個過程簡單化。
import { PdfDocument, PdfGenerator } from "@ironsoftware/ironpdf";
import { IronPdfGlobalConfig } from "@ironsoftware/ironpdf";
import fs from "fs";
(async function createPDFs() {
try {
// Input the license key
const IronPdfConfig = {
licenseKey:
"Your-License-Key",
};
// Set the config with the license key
IronPdfGlobalConfig.setConfig(IronPdfConfig);
// Create a PDF from the HTML String
const pdf = await PdfDocument.fromHtml(
"<h1>Hello JavaScript Developers! This is an Example PDF created with IronPDF NodeJS!</h1>"
);
// Save the PDF document to the file system.
await pdf.saveAs("HtmlStringToPDF.pdf");
} catch (error) {
// Handle errors here
console.error("An error occurred:", error);
}
})();
import { PdfDocument, PdfGenerator } from "@ironsoftware/ironpdf";
import { IronPdfGlobalConfig } from "@ironsoftware/ironpdf";
import fs from "fs";
(async function createPDFs() {
try {
// Input the license key
const IronPdfConfig = {
licenseKey:
"Your-License-Key",
};
// Set the config with the license key
IronPdfGlobalConfig.setConfig(IronPdfConfig);
// Create a PDF from the HTML String
const pdf = await PdfDocument.fromHtml(
"<h1>Hello JavaScript Developers! This is an Example PDF created with IronPDF NodeJS!</h1>"
);
// Save the PDF document to the file system.
await pdf.saveAs("HtmlStringToPDF.pdf");
} catch (error) {
// Handle errors here
console.error("An error occurred:", error);
}
})();
import
If True Then
PdfDocument, PdfGenerator
End If
from "@ironsoftware/ironpdf"
import
If True Then
IronPdfGlobalConfig
End If
from "@ironsoftware/ironpdf"
import fs from "fs"
(async [function] createPDFs() {
try {
const IronPdfConfig = { licenseKey:= "Your-License-Key"}; IronPdfGlobalConfig.setConfig(IronPdfConfig); const pdf = Await PdfDocument.fromHtml("<h1>Hello JavaScript Developers! This is an Example PDF created with IronPDF NodeJS!</h1>"); Await pdf.saveAs("HtmlStringToPDF.pdf");
}
catch ([error]) { console.error("An error occurred:", [error]); }
})()
這裡您可以看到代碼的輸出:
通過此功能,開發者可以將現有的 HTML 文件轉換為 PDF。這項功能對於處理靜態 HTML 文件特別有用。無論您是在處理預設的網頁、標準化的表單還是信息手冊,此功能都提供了一條簡單的途徑,將它們轉換為 PDF。
import { PdfDocument } from "@ironsoftware/ironpdf";
import { IronPdfGlobalConfig } from "@ironsoftware/ironpdf";
import fs from "fs";
(async function createPDFs() {
try {
// Input the license key
const IronPdfConfig = {
licenseKey:
"Your-License-Key",
};
// Set the config with the license key
IronPdfGlobalConfig.setConfig(IronPdfConfig);
// Create a PDF from the HTML File"
const pdf = await PdfDocument.fromFile("invoice.html");
// Save the PDF document to the file system.
await pdf.saveAs("invoice.pdf");
} catch (error) {
// Handle errors here
console.error("An error occurred:", error);
}
})();
import { PdfDocument } from "@ironsoftware/ironpdf";
import { IronPdfGlobalConfig } from "@ironsoftware/ironpdf";
import fs from "fs";
(async function createPDFs() {
try {
// Input the license key
const IronPdfConfig = {
licenseKey:
"Your-License-Key",
};
// Set the config with the license key
IronPdfGlobalConfig.setConfig(IronPdfConfig);
// Create a PDF from the HTML File"
const pdf = await PdfDocument.fromFile("invoice.html");
// Save the PDF document to the file system.
await pdf.saveAs("invoice.pdf");
} catch (error) {
// Handle errors here
console.error("An error occurred:", error);
}
})();
import
If True Then
PdfDocument
End If
from "@ironsoftware/ironpdf"
import
If True Then
IronPdfGlobalConfig
End If
from "@ironsoftware/ironpdf"
import fs from "fs"
(async [function] createPDFs() {
try {
const IronPdfConfig = { licenseKey:= "Your-License-Key"}; IronPdfGlobalConfig.setConfig(IronPdfConfig); const pdf = Await PdfDocument.fromFile("invoice.html"); Await pdf.saveAs("invoice.pdf");
}
catch ([error]) { console.error("An error occurred:", [error]); }
})()
生成的發票 PDF 如下:
此功能透過使用網址將網頁轉換為 PDF。這項功能特別適用於捕捉即時的線上內容。無論是用於存檔網頁、建立線上文章的離線副本,還是從基於網頁的數據生成報告,此功能都能輕鬆處理。
import { PdfDocument } from "@ironsoftware/ironpdf";
import { IronPdfGlobalConfig } from "@ironsoftware/ironpdf";
import fs from "fs";
(async function createPDFs() {
try {
// Input the license key
const IronPdfConfig = {
licenseKey:
"Your-License-Key",
};
// Set the config with the license key
IronPdfGlobalConfig.setConfig(IronPdfConfig);
// URL of the web page to convert to PDF
const url = "https://en.wikipedia.org/wiki/PDF";
// Convert the Web Page to a pixel-perfect PDF file.
const urlPDF = await PdfDocument.fromUrl(url);
// Save the document.
await urlPDF.saveAs("UrlToPdf.pdf");
} catch (error) {
// Handle errors here
console.error("An error occurred:", error);
}
})();
import { PdfDocument } from "@ironsoftware/ironpdf";
import { IronPdfGlobalConfig } from "@ironsoftware/ironpdf";
import fs from "fs";
(async function createPDFs() {
try {
// Input the license key
const IronPdfConfig = {
licenseKey:
"Your-License-Key",
};
// Set the config with the license key
IronPdfGlobalConfig.setConfig(IronPdfConfig);
// URL of the web page to convert to PDF
const url = "https://en.wikipedia.org/wiki/PDF";
// Convert the Web Page to a pixel-perfect PDF file.
const urlPDF = await PdfDocument.fromUrl(url);
// Save the document.
await urlPDF.saveAs("UrlToPdf.pdf");
} catch (error) {
// Handle errors here
console.error("An error occurred:", error);
}
})();
import
If True Then
PdfDocument
End If
from "@ironsoftware/ironpdf"
import
If True Then
IronPdfGlobalConfig
End If
from "@ironsoftware/ironpdf"
import fs from "fs"
(async [function] createPDFs() {
try {
const IronPdfConfig = { licenseKey:= "Your-License-Key"}; IronPdfGlobalConfig.setConfig(IronPdfConfig); const url = "https://en.wikipedia.org/wiki/PDF"; const urlPDF = Await PdfDocument.fromUrl(url); Await urlPDF.saveAs("UrlToPdf.pdf");
}
catch ([error]) { console.error("An error occurred:", [error]); }
})()
以下是從 URL 生成的輸出 PDF 檔案:
雖然 PDFKit 並非像 IronPDF 那樣主要設計用於 HTML 到 PDF 轉換,但它仍然提供了一種從 JavaScript 代碼中以編程方式創建 PDF 文件的方法。下面是一個演示如何創建簡單 PDF 文件的示例:
const PDFDocument = require('pdfkit');
const fs = require('fs');
let doc = new PDFDocument();
doc.pipe(fs.createWriteStream('output.pdf'));
doc.fontSize(25)
.text('PDFKit - Text to PDF Example', 100, 100);
doc.end();
const PDFDocument = require('pdfkit');
const fs = require('fs');
let doc = new PDFDocument();
doc.pipe(fs.createWriteStream('output.pdf'));
doc.fontSize(25)
.text('PDFKit - Text to PDF Example', 100, 100);
doc.end();
const PDFDocument = require( 'pdfkit');
const fs = require( 'fs');
Dim doc As let = New PDFDocument()
doc.pipe(fs.createWriteStream( 'output.pdf'));
doc.fontSize(25).text( 'PDFKit - Text @to PDF Example', 100, 100);
doc.end()
這段代碼片段會創建一個帶有文字標題的 PDF 文件。雖然 PDFKit 無法直接將 HTML 轉換為 PDF,但它允許對文本位置和格式進行詳細控制。
這是 PDFKit 生成的輸出文件:
密碼、安全性與中繼資料: IronPDF 讓開發者通過各種功能來增強 PDF 文件的安全性。它允許設置密碼,添加額外的保護層,要求用戶輸入密碼才能查看文檔。此外,IronPDF 提供在 PDF 中嵌入元數據的功能,這些元數據可以包括作者信息、標題和關鍵詞,從而增強文檔管理和組織能力。
import {PdfDocument} from "@ironsoftware/ironpdf";
(async () => {
// Import a PDF document or create a new PDF from Html
const pdf = await PdfDocument.open("encrypted.pdf", "password");
// Create an empty Map
const newMetadata = new Map();
// Add key-value pairs of metadata
newMetadata.set("Author", "Satoshi Nakamoto");
newMetadata.set("Keywords", "SEO, Friendly");
await pdf.overrideMetadata(newMetadata);
await pdf.removePasswordsAndEncryption();
// Make PDF read-only
await pdf.makePdfDocumentReadOnly("secret-key");
// Configure permissions
const permissions = {
AllowAnnotations: false,
AllowExtractContent: false,
AllowFillForms: false,
AllowPrint: true,
};
await pdf.setPermission(permissions);
// Change or set the document encrpytion password
await pdf.saveAs("secured.pdf", {
ownerPassword: "top-secret",
userPassword: "my-password",
});
})();
import {PdfDocument} from "@ironsoftware/ironpdf";
(async () => {
// Import a PDF document or create a new PDF from Html
const pdf = await PdfDocument.open("encrypted.pdf", "password");
// Create an empty Map
const newMetadata = new Map();
// Add key-value pairs of metadata
newMetadata.set("Author", "Satoshi Nakamoto");
newMetadata.set("Keywords", "SEO, Friendly");
await pdf.overrideMetadata(newMetadata);
await pdf.removePasswordsAndEncryption();
// Make PDF read-only
await pdf.makePdfDocumentReadOnly("secret-key");
// Configure permissions
const permissions = {
AllowAnnotations: false,
AllowExtractContent: false,
AllowFillForms: false,
AllowPrint: true,
};
await pdf.setPermission(permissions);
// Change or set the document encrpytion password
await pdf.saveAs("secured.pdf", {
ownerPassword: "top-secret",
userPassword: "my-password",
});
})();
import
If True Then
PdfDocument
End If
from "@ironsoftware/ironpdf"
(Async Sub()
const pdf = Await PdfDocument.open("encrypted.pdf", "password")
const newMetadata = New Map()
newMetadata.set("Author", "Satoshi Nakamoto")
newMetadata.set("Keywords", "SEO, Friendly")
Await pdf.overrideMetadata(newMetadata)
Await pdf.removePasswordsAndEncryption()
Await pdf.makePdfDocumentReadOnly("secret-key")
const permissions = { AllowAnnotations: False, AllowExtractContent: False, AllowFillForms: False, AllowPrint: True}
Await pdf.setPermission(permissions)
Await pdf.saveAs("secured.pdf", {
ownerPassword:= "top-secret",
userPassword:= "my-password"
})
End Sub)()
PDF加密和解密: 加密和解密是文件安全的重要組成部分,IronPDF輕鬆處理這些需求。它提供了不同級別的加密,從簡單的密碼保護到高級加密標準,確保敏感信息的安全。解密功能同樣強大,為授權用戶提供訪問和修改加密文件的方法。
數位簽章: 在數位文件的時代,真實性和完整性至關重要。 IronPDF 的數位簽名 功能允許用戶數位簽署 PDF,這不僅驗證了文件起源者的身份,還表明自簽署以來該文件未被更改,從而確保其真實性。
import {PdfDocument} from "@ironsoftware/ironpdf";
(async () => {
// Step 1. Import a PDF
const pdf = await PdfDocument.open("sample.pdf");
// Step 2. Sign the PDF with digital certificate
await pdf.signDigitalSignature({
certificatePath: "IronSoftware.pfx",
certificatePassword: "123456",
signingReason: "To show how to sign a PDF",
signingLocation: "Chicago, USA",
signatureImage: {
SignatureImagePath: "logo.png"
}
});
//Step 3. The PDF is not signed until saved to file.
await pdf.saveAs("signed.pdf");
})();
import {PdfDocument} from "@ironsoftware/ironpdf";
(async () => {
// Step 1. Import a PDF
const pdf = await PdfDocument.open("sample.pdf");
// Step 2. Sign the PDF with digital certificate
await pdf.signDigitalSignature({
certificatePath: "IronSoftware.pfx",
certificatePassword: "123456",
signingReason: "To show how to sign a PDF",
signingLocation: "Chicago, USA",
signatureImage: {
SignatureImagePath: "logo.png"
}
});
//Step 3. The PDF is not signed until saved to file.
await pdf.saveAs("signed.pdf");
})();
import
If True Then
PdfDocument
End If
from "@ironsoftware/ironpdf"
(Async Function()
const pdf = Await PdfDocument.open("sample.pdf")
Await pdf.signDigitalSignature({
certificatePath:= "IronSoftware.pfx",
certificatePassword:= "123456",
signingReason:= "To show how to sign a PDF",
signingLocation:= "Chicago, USA",
signatureImage:= { SignatureImagePath:= "logo.png" }
})
Await pdf.saveAs("signed.pdf")
End Function)()
PDF 壓縮: IronPDF 認識到高效存儲和快速共享文件的需求。它包括一個 PDF壓縮 此功能顯著減少檔案大小,對於優化儲存空間和加快文件傳輸至關重要,且不會損害PDF內容的品質和完整性。
import {PdfDocument} from "@ironsoftware/ironpdf";
(async () => {
// Load the existing PDF document
const pdf = await PdfDocument.fromFile("my-content.pdf");
// Compress images with quality parameter (1-100)
await pdf.compressSize(60);
// Save the compressed PDF
await pdf.saveAs("document_compressed.pdf");
// Compress images and scale down based on visible size in the PDF document
await pdf.compressSize(90, true);
// Save the scaled and compressed PDF
await pdf.saveAs("document_scaled_compressed.pdf");
});
import {PdfDocument} from "@ironsoftware/ironpdf";
(async () => {
// Load the existing PDF document
const pdf = await PdfDocument.fromFile("my-content.pdf");
// Compress images with quality parameter (1-100)
await pdf.compressSize(60);
// Save the compressed PDF
await pdf.saveAs("document_compressed.pdf");
// Compress images and scale down based on visible size in the PDF document
await pdf.compressSize(90, true);
// Save the scaled and compressed PDF
await pdf.saveAs("document_scaled_compressed.pdf");
});
import
If True Then
PdfDocument
End If
from "@ironsoftware/ironpdf"
(Async Function()
const pdf = Await PdfDocument.fromFile("my-content.pdf")
Await pdf.compressSize(60)
Await pdf.saveAs("document_compressed.pdf")
Await pdf.compressSize(90, True)
Await pdf.saveAs("document_scaled_compressed.pdf")
End Function)
合併兩個或多個PDF文件:IronPDF提供簡單的解決方案來合併 多個 PDF 文件合併為單一檔案. 這個功能對於合併各種文件(例如報告、合同或一系列表單)非常有用,有助於更好地管理和分發文件。
刪除特定的 PDF 頁面: 編輯的靈活性是任何 PDF 工具的關鍵,IronPDF 提供了這種能力 從 PDF 文件中移除特定頁面這在為不同受眾定制內容或省略不必要的頁面以創建更簡潔的文件時特別有用。
可自定義的佈局引擎: PDFKit 擁有可自定義的佈局引擎,開發人員可以控制 PDF 佈局的各個方面,從文字定位到複雜的圖形元素。
const PDFDocument = require('pdfkit');
const fs = require('fs');
let doc = new PDFDocument({ margin: 50 });
// Custom layouts
doc.text('Customized Layout Text', {
align: 'center',
valign: 'center'
});
doc.end();
doc.pipe(fs.createWriteStream('custom-layout.pdf'));
const PDFDocument = require('pdfkit');
const fs = require('fs');
let doc = new PDFDocument({ margin: 50 });
// Custom layouts
doc.text('Customized Layout Text', {
align: 'center',
valign: 'center'
});
doc.end();
doc.pipe(fs.createWriteStream('custom-layout.pdf'));
const PDFDocument = require( 'pdfkit');
const fs = require( 'fs');
Dim doc As let = New PDFDocument({ margin:= 50 })
' Custom layouts
doc.text( 'Customized Layout Text', { align: 'center', valign: 'center' });
doc.end()
doc.pipe(fs.createWriteStream( 'custom-layout.pdf'));
在此範例中,PDFDocument
用於創建具有居中文本的自訂版面。
先進的圖形和文本功能:PDFKit 提供了先進的圖形和文本功能,允許在 PDF 文件中進行精細的設計和樣式設計。它能夠繪製形狀並添加圖像和 SVG。關於文本,PDFKit 提供了完整的版面選項,從基本的文本框到先進的排版控制,確保每頁的版面都完全符合預期。
const PDFDocument = require('pdfkit');
const fs = require('fs');
let doc = new PDFDocument();
// Advanced graphics
doc.moveTo(100, 150)
.lineTo(100, 250)
.lineTo(200, 250)
.fill("#FF3300");
// Advanced text
doc.fontSize(15)
.font('Times-Roman')
.text('Advanced Text Features', 100, 300);
doc.end();
doc.pipe(fs.createWriteStream('advanced-graphics-text.pdf'));
const PDFDocument = require('pdfkit');
const fs = require('fs');
let doc = new PDFDocument();
// Advanced graphics
doc.moveTo(100, 150)
.lineTo(100, 250)
.lineTo(200, 250)
.fill("#FF3300");
// Advanced text
doc.fontSize(15)
.font('Times-Roman')
.text('Advanced Text Features', 100, 300);
doc.end();
doc.pipe(fs.createWriteStream('advanced-graphics-text.pdf'));
const PDFDocument = require( 'pdfkit');
const fs = require( 'fs');
Dim doc As let = New PDFDocument()
' Advanced graphics
doc.moveTo(100, 150).lineTo(100, 250).lineTo(200, 250).fill("#FF3300")
' Advanced text
doc.fontSize(15).font( 'Times-Roman').text('Advanced Text Features', 100, 300);
doc.end()
doc.pipe(fs.createWriteStream( 'advanced-graphics-text.pdf'));
流和缓冲处理:PDFKit 在流和缓冲处理方面表现出色,使得大型 PDF 文件及其数据的管理更加高效。
const PDFDocument = require('pdfkit');
const fs = require('fs');
const stream = require('stream');
let doc = new PDFDocument();
let buffers = [];
let writableStream = new stream.Writable();
writableStream._write = (chunk, encoding, done) => {
buffers.push(chunk);
done();
};
doc.pipe(writableStream);
doc.text('Streaming PDF Content');
doc.end();
writableStream.on('finish', () => {
let pdfData = Buffer.concat(buffers);
fs.writeFileSync('streamed.pdf', pdfData);
});
const PDFDocument = require('pdfkit');
const fs = require('fs');
const stream = require('stream');
let doc = new PDFDocument();
let buffers = [];
let writableStream = new stream.Writable();
writableStream._write = (chunk, encoding, done) => {
buffers.push(chunk);
done();
};
doc.pipe(writableStream);
doc.text('Streaming PDF Content');
doc.end();
writableStream.on('finish', () => {
let pdfData = Buffer.concat(buffers);
fs.writeFileSync('streamed.pdf', pdfData);
});
const PDFDocument = require( 'pdfkit');
const fs = require( 'fs');
const stream = require( 'stream');
Dim doc As let = New PDFDocument()
Dim buffers As let = ()
Dim writableStream As let = New stream.Writable()
writableStream._write = Sub(chunk, encoding, done)
buffers.push(chunk)
done()
End Sub
doc.pipe(writableStream)
doc.text( 'Streaming PDF Content');
doc.end()
writableStream.on( 'finish', () =>
If True Then
Dim pdfData As let = Buffer.concat(buffers)
fs.writeFileSync( 'streamed.pdf', pdfData);
End If
)
自定義頁眉和頁腳: 創建一個專業外觀的PDF涉及到細節的注意。PDFKit的自定義頁眉和頁腳功能使得能夠在頁面的頂部和底部精確放置文字和圖形。這特別適用於在多頁文件中添加一致的品牌標識、文件標題和頁碼。
互動式表單: PDFKit 擴展其功能到PDF文件中的互動式表單,允許創建文本框、複選框和單選按鈕。這個功能對於希望收集信息或提供互動內容的用戶極其有價值,增強了PDF的用戶體驗和功能性。
IronPDF 的文件 提供了一個完整的指南來使用該庫,包含詳細的關鍵功能範例,如將URL渲染為PDF以及從HTML字串創建PDF。它提供了PDF列印的自訂選項,如設置紙張尺寸和DPI,還有文件外觀的設定,如帶有郵件合併欄位的頁眉和頁腳。文檔還涵蓋了更高級的方面,如使用自訂的WebClient、創建可編輯的PDF表單以及在PDF中使用JavaScript。您可以瀏覽文檔以獲取完整的API文檔和更多例子。
對於設置頁眉和頁腳,HTML和文本選項都有詳細記錄,允許使用占位符字串來合併元數據。提供了授權詳細信息,指導用戶如何去除水印並獲得授權。文檔甚至提供了有關設置PDF頁眉和頁腳首頁頁碼的資訊,並包括有關HTML渲染後等待時間的詳情,考慮到JavaScript、AJAX或動畫的渲染時間。
IronPDF擁有一系列的疑難排解指南,解決常見問題並提供逐步解決方案。這可以是用戶嘗試解決問題的第一步。對於更複雜的問題或無法通過指南解決的問題,IronPDF提供技術支援。用戶可以提交工程支援請求,其中可能包括提供有關問題的詳細信息,例如平台或運行時的具體情況,以幫助支援團隊重現並解決問題。您也可以使用線上聊天選項。
PDFKit 的 npm 文件將該庫描述為一個可以輕鬆創建複雜、多頁、可打印文檔的工具。它強調其 API 的鏈式調用性,並包括低級功能和用於高級功能的抽象,設計上簡單到可以通過幾個函數調用即可生成複雜的文檔。
文件的功能部分非常全面,涵蓋了矢量圖形、文本、字體嵌入、圖像嵌入、註釋、表單創建、大綱和 PDF 安全性,所有這些都展示了該庫創建可訪問和安全文檔的能力。
PDFKit 作為一個開源庫,受益於社群支援。問題和功能要求可以通過其 GitHub 存儲庫來處理,用戶可以貢獻代碼、提交問題和提出拉取請求。圍繞 PDFKit 的社群也可能提供非官方支援渠道,如 Stack Overflow,開發者通常會在那裡分享他們的知識和解決方案。
IronPDF 採用商業授權模式,這意味著開發者或公司需要購買授權才能在他們的專案中無限制地使用這個庫。
Lite:價格為 $749,此一次性收費提供適合小型專案的基本套裝。
Professional:售價 $1,499,這一層級適用於專業用途,提供更多的功能和能力。
Unlimited:無限制層級售價為 $2,999,適合大型部署,提供對所有功能的無限制完全訪問。
IronPDF 也提供一個 免費試用允許開發人員在購買之前評估該庫。沒有免費或免費增強版可用,也不提供高級諮詢或整合服務。
PDFKit 是一個開源庫,並且基於 MIT 授權。這種寬鬆的授權允許免費使用、修改和分發該軟件。作為一個開源項目,PDFKit 沒有定價結構。用戶可以自由地將其整合到任何項目中,並可以通過 GitHub 為其開發做出貢獻。該項目接受捐贈,雖然捐贈不是強制性的,但能夠支持庫的持續開發和維護。
總結來說,IronPDF for Node.js 和 PDFKit 都是在各自環境中強大的 PDF 生成和操作工具,但 IronPDF for Node.js 因其專為 Node.js 平台量身定制的廣泛功能集而具有優勢。
IronPDF 在將 HTML 轉換為 PDF、進行高級編輯以及全面支持 JavaScript 和其他豐富媒體方面的能力,使其成為一個多用途的解決方案,適用於各種 PDF 處理任務。此外,IronPDF 對安全性的高度關注及其詳細的文檔,為開發人員提供了至關重要的保證和可訪問性。
PDFKit 作為開源軟件,提供了靈活性和易用性,對於希望獲得廣泛社區支持並能夠修改源代碼的開發人員來說,這點尤其具有吸引力。考慮到開源解決方案的成本效益,其功能令人印象深刻。
IronPDF 提供了免費試用版,允許開發人員在經濟上做出承諾之前評估其全部功能範圍。此外, Iron Software 的 Iron Suite,包括 IronPDF 在內的其他有價值的開發者工具,如 IronXL, IronBarcode, IronQR,和 IronOCR, 提供了經濟實惠的套餐,以兩個產品的價格提供全面的功能。
最終,在 IronPDF for Node.js 和 PDFKit 之間的選擇將取決於項目和開發人員或開發團隊的特定需求。對於那些尋求豐富功能集和在 Node.js 生態系統中擁有廣泛文檔的人來說,IronPDF for Node.js 是一個合適的選擇。