跳過到頁腳內容
NODE 說明

JsdomNPM(開發者的使用方法)

當 JSDOM 和 IronPDF 在 Node.js 中結合時,程式設計師可以獲得一個廣泛的工具包,用於創建和修改 PDF 文件。 JSDOM 是一個 W3C DOM 的純 JavaScript 實現,讓在伺服器端操作 HTML 和 XML 文檔變得像在瀏覽器中一樣可能。 相反地,IronPDF 使用簡單的 Node.js API,使從 HTML 內容創建高質量 PDF 更容易。

結合 JSDOM 和 IronPDF,開發者可以在其 Node.js 應用程序中輕鬆地將網頁轉換為 PDF,更改現有的 PDF,並即時從 HTML 模板創建 PDF 文檔。 這種組合是一個對於需要強大 PDF 創建能力的項目的絕佳選擇,因為它不僅確保了與當代網絡技術的合規性,還加快了文件生成操作。

什麼是 JSDOM NPM?

JSDOM NPM (Node Package Manager) is a JavaScript 庫,讓您可以使用 Node.js 解析和處理 HTML 文檔。 它在 Node.js 中提供了一個類似瀏覽器的環境,並支持 W3C DOM(文檔對象模型)。 因此,您可以以程式化方式操作 HTML 和 XML 文檔的特徵和內容。 您甚至可以模擬點擊和表單提交等操作。

JSDOM NPM(對開發人員的工作原理):圖1

JSDOM 在創建基於 HTML 的報告、測試和驗證在線網站以及網絡抓取等活動中非常有用。 在伺服器端環境中處理 HTML 頁面時(標準瀏覽器功能不可用的情況下),它對開發人員有所幫助。 JSDOM NPM 包通過在 Node.js 應用程序中處理 HTML 操作和交互,彌合了客戶端瀏覽器功能和伺服器端 JavaScript 之間的差距。

通過在 Node.js 中實現許多強大的網絡功能,JSDOM 成為伺服器端環境中處理 HTML 和 XML 文檔的開發人員的一個有用工具。 JSDOM 的顯著特徵如下:

W3C DOM 實現

JSDOM 提供了對許多 W3C DOM 和 HTML 規範的全面 JavaScript 實現。 這使您能夠使用知名的 DOM API 以程式化方式操作 HTML 和 XML 文檔。

類似瀏覽器的環境

因為 JSDOM 在 Node.js 中模仿了一個瀏覽器環境,您可以像在瀏覽器中運行 JavaScript 一樣操作 HTML 頁面。 這涵蓋了對文檔對象模型的操作、事件管理、運行腳本以及訪問和更改項目。

支持標準

支持現代網絡標準,包括 HTML5、CSS3 和最新的 JavaScript 特性。 這確保了與大多數網絡內容的兼容性,並使其能夠準確地操作和解析複雜的頁面。

解析和序列化

JSDOM 可以將 HTML 字符串解析為 DOM 結構,並且可以將 DOM 節點序列化回 HTML 字符串。 這是為了允許我們在頁面內執行腳本並從網頁中編輯和生成更新的 HTML 輸出。

可自定義配置

JSDOM 可以配置為模仿許多與瀏覽器相關的功能,包括外部資源(如載入外部腳本和執行外部腳本或樣式表)的處理,在不同的 JavaScript 引擎(如 V8 或 SpiderMonkey)之間切換等。

與測試框架集成

JSDOM 是用於在測試框架(如 Jest 和 Mocha)中編寫單元測試和集成測試的流行工具,包括 DOM 操作。 它讓您在不需要完整的瀏覽器環境下對 web 應用進行無頭測試。

可訪問性和兼容性

由於其具有可訪問性特性,如與屏幕閱讀器的兼容性和對 ARIA 屬性的支持,它適合需要符合可訪問性標準的應用程序。

Node.js 生態系統集成

JSDOM 與其他庫以及更大的 Node.js 生態系統很好地協作。 例如,它可以與像 Puppeteer 這樣的包一起用於更複雜的網頁抓取和自動化活動,或者與 Cheerio 一起用於有效的 HTML 解析。

創建和配置 JSDOM Node.js

以下步驟可用於在 Node.js 應用程序中構建和配置 JSDOM:

安裝 JSDOM

首先,確保您的計算機上安裝了 npm 和 Node.js。 npm 可用於安裝 JSDOM:

npm install jsdom
npm install jsdom
SHELL

基本的 JSDOM 使用

這是設置 JSDOM 環境和處理 HTML 文檔的一個簡單例子:

const { JSDOM } = require('jsdom');

// Example HTML content
const htmlContent = `
<!DOCTYPE html>
<html>
<head>
  <title>JSDOM Example</title>
</head>
<body>
  <div id="content">
    <p>Hello, JSDOM!</p>
  </div>
</body>
</html>
`;

// Create a JSDOM instance
const dom = new JSDOM(htmlContent);

// Access and manipulate the DOM
const document = dom.window.document;
const contentDiv = document.getElementById('content');
contentDiv.innerHTML = '<p>Hello, modified JSDOM!</p>';

// Serialize the modified DOM back to HTML
const modifiedHtml = dom.serialize();
console.log(modifiedHtml);
const { JSDOM } = require('jsdom');

// Example HTML content
const htmlContent = `
<!DOCTYPE html>
<html>
<head>
  <title>JSDOM Example</title>
</head>
<body>
  <div id="content">
    <p>Hello, JSDOM!</p>
  </div>
</body>
</html>
`;

// Create a JSDOM instance
const dom = new JSDOM(htmlContent);

// Access and manipulate the DOM
const document = dom.window.document;
const contentDiv = document.getElementById('content');
contentDiv.innerHTML = '<p>Hello, modified JSDOM!</p>';

// Serialize the modified DOM back to HTML
const modifiedHtml = dom.serialize();
console.log(modifiedHtml);
JAVASCRIPT

JSDOM NPM(對開發人員的工作原理):圖2

配置選項

JSDOM 構造函數接受選項,您可以提供它們來自定義其功能的不同部分。 以下是一些常見的設置選擇:

它調節了 JSDOM 對象 API 應如何載入外部資源的腳本和樣式表。 決定是否應由 JSDOM 執行解析的 HTML 中的腳本。 允許在 JSDOM 中運行的腳本捕獲其控制台輸出。 模仿瀏覽器的可視環境,這可能會影響多個 CSS 和佈局計算。

這是使用選項設置 JSDOM 代碼的例子。

const { JSDOM } = require('jsdom');

const htmlContent = '<!DOCTYPE html><html><body><p>Hello, JSDOM!</p></body></html>';

const options = {
  resources: 'usable', // Load external resources (e.g., scripts, stylesheets)
  runScripts: 'dangerously', // Allow scripts to run
};

const dom = new JSDOM(htmlContent, options);

// Access the document and window objects
const document = dom.window.document;
const window = dom.window;

// Manipulate the DOM or interact with the window object here
console.log(document.documentElement.outerHTML); // Output the modified HTML
const { JSDOM } = require('jsdom');

const htmlContent = '<!DOCTYPE html><html><body><p>Hello, JSDOM!</p></body></html>';

const options = {
  resources: 'usable', // Load external resources (e.g., scripts, stylesheets)
  runScripts: 'dangerously', // Allow scripts to run
};

const dom = new JSDOM(htmlContent, options);

// Access the document and window objects
const document = dom.window.document;
const window = dom.window;

// Manipulate the DOM or interact with the window object here
console.log(document.documentElement.outerHTML); // Output the modified HTML
JAVASCRIPT

進階使用

在更複雜的情況下,如將測試代碼與測試框架連接或模擬用戶交互,JSDOM 也可以應用。 這裡是一個如何使用 JSDOM 和 Jest 進行測試的例子:

const { JSDOM } = require('jsdom');

test('modifying DOM with JSDOM', () => {
  const dom = new JSDOM('<!DOCTYPE html><html><body><p>Hello, JSDOM!</p></body></html>');
  const document = dom.window.document;
  const contentParagraph = document.querySelector('p');

  // Assert initial content
  expect(contentParagraph.textContent).toBe('Hello, JSDOM!');

  // Modify content
  contentParagraph.textContent = 'Hello, modified JSDOM!';

  // Assert modified content
  expect(contentParagraph.textContent).toBe('Hello, modified JSDOM!');
});
const { JSDOM } = require('jsdom');

test('modifying DOM with JSDOM', () => {
  const dom = new JSDOM('<!DOCTYPE html><html><body><p>Hello, JSDOM!</p></body></html>');
  const document = dom.window.document;
  const contentParagraph = document.querySelector('p');

  // Assert initial content
  expect(contentParagraph.textContent).toBe('Hello, JSDOM!');

  // Modify content
  contentParagraph.textContent = 'Hello, modified JSDOM!';

  // Assert modified content
  expect(contentParagraph.textContent).toBe('Hello, modified JSDOM!');
});
JAVASCRIPT

入門指南

要在 Node.js 中運行 IronPDF 和 JSDOM 需要結合這些庫,以便將 HTML 信息轉換為 PDF 文檔。 JSDOM 讓您以程式化方式處理 HTML 文檔,而 IronPDF 使從 HTML 轉換為 PDF 更加容易。 這裡有一個指南來幫助您入門。

什麼是 IronPDF for Node.js?

IronPDF for Node.js 從 HTML 文本生成高質量的 PDF 文件。 在保持原始網絡內容完整性的同時,它簡化了將 HTML、CSS 和 JavaScript 轉換為完整格式的 PDF 的過程。 需要生成動態、可打印文檔(例如報告、發票和證書)的 Web 應用可能會發現這個工具特別有用。

IronPDF 提供的眾多功能中包含可調頁面設置、頁眉、頁腳以及嵌入圖片和字體的能力。 為了確保生成的 PDF 符合預期設計,它允許複雜的佈局和樣式。 此外,IronPDF 管理 HTML 中 JavaScript 的執行,從而能夠精準渲染動態和交互性內容。

JSDOM NPM(對開發人員的工作原理):圖3

IronPDF 的功能

從 HTML 到 PDF 的生成

轉換 JavaScript、HTML 和 CSS 到 PDF。 支持當代網絡標準的媒體查詢和響應式設計。 適用於使用 HTML 和 CSS 動態裝飾 PDF 文檔、報告和賬單。

PDF 編輯

可以向現有的 PDF 中添加文本、圖像和其他內容,或者選擇將這些 PDF 文件中的文本和圖片提取出來。 合併多個 PDF 到一個文件中。將 PDF 文件分成多個單獨的文檔。 包括水印、註解、頁眉和頁腳。

性能和可靠性

高性能和可靠性是工業設計中期望的設計品質。 IronPDF 可以輕鬆管理大的文檔集。

安裝 IronPDF

安裝 IronPDF 包為您的 Node 項目提供所需的工具,以處理與 PDF 的工作。

npm install @ironsoftware/ironpdf
npm install @ironsoftware/ironpdf
SHELL

使用 JSDOM 和 IronPDF 將 HTML 轉換為 PDF

準備好 HTML 材料以轉換為 PDF。 作為一個示例:

<!-- example.html -->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Example Document</title>
  <style>
    body {
      font-family: Arial, sans-serif;
    }
    .content {
      margin: 20px;
    }
  </style>
</head>
<body>
  <div class="content">
    <h1>Hello, JSDOM with IronPDF!</h1>
    <p>This is a sample HTML document converted to PDF using JSDOM and IronPDF.</p>
  </div>
</body>
</html>
<!-- example.html -->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Example Document</title>
  <style>
    body {
      font-family: Arial, sans-serif;
    }
    .content {
      margin: 20px;
    }
  </style>
</head>
<body>
  <div class="content">
    <h1>Hello, JSDOM with IronPDF!</h1>
    <p>This is a sample HTML document converted to PDF using JSDOM and IronPDF.</p>
  </div>
</body>
</html>
HTML

創建一個名為 convertToPdf.js 的 Node.js 腳本,使用 JSDOM 解析 HTML 內容並使用 IronPDF 創建 PDF。

const { JSDOM } = require('jsdom');
const IronPdf = require("@ironsoftware/ironpdf");
const fs = require('fs');

// Configure IronPDF with the license key (if applicable)
var config = IronPdf.IronPdfGlobalConfig;
config.setConfig({ licenseKey: '' });

// Load the HTML content from the file
const htmlContent = fs.readFileSync('example.html', 'utf8');

// Create a JSDOM instance and parse the HTML
const dom = new JSDOM(htmlContent);
const jdocument = dom.window.document;

// Convert the HTML to PDF
IronPdf.PdfDocument.fromHtml(jdocument.documentElement.outerHTML).then((pdfres) => {
  const filePath = `${Date.now()}.pdf`;
  pdfres.saveAs(filePath).then(() => {
    console.log('PDF saved successfully!');
  }).catch((e) => {
    console.log(e);
  });
});
const { JSDOM } = require('jsdom');
const IronPdf = require("@ironsoftware/ironpdf");
const fs = require('fs');

// Configure IronPDF with the license key (if applicable)
var config = IronPdf.IronPdfGlobalConfig;
config.setConfig({ licenseKey: '' });

// Load the HTML content from the file
const htmlContent = fs.readFileSync('example.html', 'utf8');

// Create a JSDOM instance and parse the HTML
const dom = new JSDOM(htmlContent);
const jdocument = dom.window.document;

// Convert the HTML to PDF
IronPdf.PdfDocument.fromHtml(jdocument.documentElement.outerHTML).then((pdfres) => {
  const filePath = `${Date.now()}.pdf`;
  pdfres.saveAs(filePath).then(() => {
    console.log('PDF saved successfully!');
  }).catch((e) => {
    console.log(e);
  });
});
JAVASCRIPT

JSDOM NPM(對開發人員的工作原理):圖4

從數據庫、文件或動態創建內容中加載 HTML 內容。 使用 IronPDF 將解析的 HTML 內容創建為 PDF 文件。 IronPDF 的 RenderHtmlAsPdf 函數接受 HTML 字符串,然後返回一個帶有 PDF 數據的 Promise。 使用 Node.js 的文件系統模組(fs),IronPDF 將 PDF 文件創建為緩衝(pdfBuffer),可以保存到文件中。錯誤處理可確保在生成 PDF 的過程中更高的容錯能力(如 HTML 損壞或網絡問題)。

JSDOM NPM(對開發人員的工作原理):圖5

結論

JSDOM 提供了一個可靠的選擇,用於從 HTML 信息中程式化地創建高質量的 PDF 文檔。 利用 JSDOM,開發者可以與 DOM 元素互動並動態編輯 HTML 頁面內容,這使得解析和操作 HTML 頁面就像在模擬的瀏覽器環境中一樣簡單。 此功能對於數據提取、動態報告生成和網絡抓取等任務至關重要。

通過其強大的特性,IronPDF 可以將 HTML 文本轉換為 PDF,這讓您對佈局、分頁、頁眉、頁腳和其他 PDF 特定功能擁有精確的控制。 它使從 Node.js 應用中直接將複雜 HTML 結構轉換為可打印、已準備好的 PDF 文件更更容易。

結合 JSDOM 和 IronPDF,開發者可以自動從 HTML 模板或動態生成的信息中創建 PDF 文檔。 這使得這些文檔對於各種使用場景皆有幫助,如產生報告、憑證、發票等。 該集成通過利用這兩個庫的優勢來提高生產效率和保持文件保真度,從而有效地滿足在 Node.js 生態系統內文件為中心的應用的獨特需求。

IronPDF 和 Iron Software 使您可以擴展 .NET 開發工具包的功能,如 OCR、條碼掃描、PDF 創建、Excel 集成及其他功能。 IronPDF combines Iron Software 高度可配置的系統和套件,其核心支持以提供開發者更多的網絡應用程序和功能,以及更高效的開發,基本版只需 $799。

當許可選項清晰並針對項目量身定制時,開發者可以更輕鬆地選擇最優的模式。 這些功能幫助開發者能以一種簡單、有效和高度集成的方式解決廣泛的問題。

Darrius Serrant
全棧軟件工程師 (WebOps)

Darrius Serrant 擁有邁阿密大學計算機科學學士學位,目前任職於 Iron Software 的全栈 WebOps 市場營銷工程師。從小就迷上編碼,他認為計算既神秘又可接近,是創意和解決問題的完美媒介。

在 Iron Software,Darrius 喜歡創造新事物,並簡化複雜概念以便於理解。作為我們的駐場開發者之一,他也自願教學生,分享他的專業知識給下一代。

對 Darrius 來說,工作令人滿意因為它被重視且有實際影響。