在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
本教程将深入探讨 IronPDF 和 PDFKit - 是 JavaScript PDF 库中的两大巨头。这两个库都是 Node.js 项目的可靠选择,但它们各有优缺点。
本文旨在让读者真正了解 IronPDF 和 PDFKit 工具如何融入开发人员的 Node.js 工作流程。无论是制作基本的 PDF 还是处理复杂的布局,了解 IronPDF 和 PDFKit 可以 (而不能) 这一点非常重要。
PDFKit 是一个先进的 JavaScript PDF 生成库,适用于 Node.js 和浏览器环境。其全面的工具集使其成为轻松创建多页可打印文档的理想工具。该库易于使用,可简化复杂文档的生成过程。
PDFKit 因其强大的矢量图形功能、广泛的文本和字体样式选项、图像嵌入功能以及对交互式安全 PDF 文档的支持而脱颖而出。PDFKit 易于使用,而且在服务器端和浏览器环境中都具有多功能性,因此对于需要在各种应用程序中生成自定义 PDF 的开发人员来说,PDFKit 是一个非常有价值的工具。
灵活的 PDF 生成
PDFKit 不依赖 HTML 到 PDF 的转换,而是直接通过 JavaScript 代码生成 PDF。这种方法为开发人员提供了对其创建的 PDF 文件的布局、样式和内容的精确控制,因此生成复杂文档变得更加容易。
图形和文本格式
图形库支持高级图形功能,包括线条、曲线、矩形、圆等。通过自定义字体、大小和颜色等文本格式功能,可以创建具有视觉吸引力的文档。
图像嵌入和矢量图形
PDFKit 允许嵌入各种格式的图像,并支持矢量图形,是高质量打印文档的理想选择。图像嵌入支持 JPEG 和 PNG 文件。
高级文档功能
开发人员可在 PDF 文件中添加注释、书签和超链接。该库还支持创建页眉和页脚,以及加入页码和自定义 JavaScript。
可定制和可重复使用的组件
PDFKit API 为创建可重复使用的组件提供了便利,从而简化了具有重复结构(如发票或报告)的文档的开发流程。
矢量图形
PDFKit 为矢量图形提供了类似 HTML5 画布的 API,包括路径操作、SVG 路径解析、变换和渐变。这非常适合在 PDF 中创建可缩放的高质量图形。该库支持换行、各种文本对齐方式和列表。
嵌入字体
PDFKit 支持 TrueType、OpenType、WOFF 等多种字体格式,使 PDF 中的排版保持一致。此外,PDFKit 还提供字体子设置功能,确保文档大小在可控范围内。
使用 IronPDF,您可以轻松地将 HTML 字符串、文件甚至整个网页转换为 PDF,这些文件看起来与原始内容一模一样,并带有 CSS 样式和图像。这对于交付发票、合同和报告等需要保留网页设计所指定的品牌和布局的专业级文档至关重要。
IronPDF 擅长将 HTML 内容转换为高保真 PDF 文档。其功能包括
HTML 文件转 PDF:使用该功能,可将静态 HTML 文件无缝转换为 PDF 格式,并保持布局和样式。
IronPDF 提供全面的格式化工具,允许自定义和增强根据 HTML 内容创建的 PDF,例如
IronPDF 的编辑功能非常广泛,能够修改现有 PDF 以满足特定需求:
高效添加 HTML 内容:用户可以在现有 PDF 中插入更多 HTML 内容。该功能经过优化,可确保附加内容不会影响文档的性能或加载时间。
IronPDF 支持创建和操作 PDF 表单,允许在 PDF 中使用交互式元素:
PDF 表单:这包括创建可通过数字方式填写的表单,使企业能够自动执行数据收集流程。使用 IronPDF,您可以以编程方式创建表格、填充字段甚至检索信息,从而简化工作流程并减少手动数据输入。
IronPDF 支持多种平台,因此适用于不同的开发环境。它兼容 Node.js 12.0 及以上版本,可在 Windows、Linux、Mac 和 Docker 上使用。
在进入 PDF 生成世界之前,您需要设置项目环境。Visual Studio 代码 (VS 编码) 提供了一个理想的、用户友好的平台。首先,启动 VS Code 并创建一个新的 JavaScript 项目。您可以为项目新建一个文件夹,然后在 VS Code 中打开。这个环境将是你编写代码和管理项目文件的地方。
在 VS Code 中打开文件夹后,下一步就是初始化一个新的 JavaScript 项目。在 VS 代码中打开集成终端 (通常可在菜单中的终端 > 新终端下找到) 并键入 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 并将其添加到项目的依赖项中。
安装成功后,请确认 PDFKit 是否出现在package.json文件的依赖项中。这一确认对于确认您的项目现在已配备了创建复杂、详细和具有视觉吸引力的 PDF 文件所需的工具至关重要。
IronPDF for Node.js 擅长将 HTML 转换为 PDF,为开发人员提供了高效的解决方案。该库善于处理复杂的任务,如渲染 CSS 样式、执行 JavaScript 以及合并自定义页眉和页脚。这些功能大大增强了它从 HTML 源创建专业级 PDF 的能力。IronPDF for Node.js 为这一转换过程提供了三种便捷的方法:
1.将 HTML 字符串转换为 PDF
2.HTML 文件转 PDF
3.URL 转 PDF:这项独特的功能只需使用网页的 URL 即可将网页转换为 PDF。这是一种以 PDF 格式捕获实时在线内容的有效方法。
此方法允许开发人员直接将 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 输出发票:
该功能只需使用网页的 URL 即可将网页转换为 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)
Merge Two or More PDFs: IronPDF 提供了一个直接的解决方案来合并两个或多个 PDF 文件。 将多个 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,以及文档外观的自定义选项,如带有邮件合并字段的页眉和页脚。文档还涉及更高级的方面,如使用自定义 WebClients、创建可编辑的 PDF 表单以及在 PDF 中使用 JavaScript。您可以浏览文档,了解完整的 api 文档和更多示例。
在设置页眉和页脚时,HTML 和文本选项都有详细的文档说明,允许使用占位符字符串合并元数据。还提供了许可证详细信息,指导用户如何去除水印和获得许可证。文档甚至还提供了关于设置 PDF 页眉和页脚首页码的信息,并详细说明了在打印之前,考虑到 JavaScript、AJAX 或动画的呈现,HTML 呈现后需要等待多长时间。
IronPDF 拥有一系列故障排除指南,可解决常见问题并提供逐步解决方案。这可以作为用户解决问题的第一站。对于更复杂的问题或无法通过指南解决的问题,IronPDF 可提供技术支持。用户可以提交工程支持请求,其中可能包括提供有关问题的详细信息,如平台或运行时的具体信息,以帮助支持团队复制和解决问题。您还可以使用即时聊天选项。
PDFKit 的 npm 文档将该库描述为轻松创建复杂、多页、可打印文档的工具。它强调其 API 的连锁性,包括底层函数和高层功能的抽象,其设计足够简单,只需调用几个函数即可生成复杂的文档。
文档的功能部分非常全面,涵盖了矢量图形、文本、字体嵌入、图像嵌入、注释、表单创建、大纲和 PDF 安全性,所有这些都展示了该库创建可访问和安全文档的能力。
PDFKit 作为一个开源库,得益于社区的支持。问题和功能请求可通过 GitHub 存储库处理,用户可在其中贡献代码、提交问题和提出拉取请求。围绕 PDFKit 的社区还可能提供非官方的支持渠道,如 Stack Overflow,开发人员经常在这里分享他们的知识和解决方案。
IronPDF 采用商业许可模式,这意味着开发人员或公司需要购买许可证才能在其项目中不受任何限制地使用该库。
Lite:这种一次性收费的"$liteLicense "提供了适合小型项目的基本软件包。
专业:该级别的价格为 1 499 美元,用于专业用途,提供更多的功能和性能。
无限制:无限制层级的价格为 2999 美元,是大规模部署的理想选择,可无限制地使用所有功能。
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 提供免费试用版,允许开发人员在投入资金之前评估其全部功能。此外,IronPDF 还提供免费试用、 Iron 软件公司的 Iron Suite其中包括 IronPDF 和其他有价值的开发人员工具,如 IronXL, IronBarcode, IronQR和 IronOCR它提供了一个具有成本效益的一揽子交易,以两个产品的价格提供一套全面的功能。
最终,在 IronPDF for Node.js 和 PDFKit 之间做出选择将取决于项目的特定需求以及开发人员或开发团队的偏好。对于那些在 Node.js 生态系统中寻求丰富功能集和广泛文档的人来说,IronPDF for Node.js 是一个合适的选择。