日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

使用poi写入doc文档中文档打不开_基于NodeJS和浏览器的PDF文档引擎——PDFKit

發(fā)布時間:2025/1/21 javascript 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用poi写入doc文档中文档打不开_基于NodeJS和浏览器的PDF文档引擎——PDFKit 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

介紹

PDFKit是一個用于Node和瀏覽器的PDF文檔生成庫,可以輕松創(chuàng)建復(fù)雜的多頁面可打印文檔。API包含可鏈接性,包括低級功能以及更高級功能的抽象。PDFKit API設(shè)計(jì)簡單,因此生成復(fù)雜文檔通常與一些函數(shù)調(diào)用一樣簡單。最直接的好處就是節(jié)省了服務(wù)器端的資源,讓生成工作在本地完成!



如何獲取?

由于最近限制頗多,不便于直接放鏈接,截圖都不行,大家可以直接到Github搜索



安裝使用

  • 使用npm包管理

npm install pdfkit
  • 創(chuàng)建文檔

創(chuàng)建PDFKit文檔非常簡單。只需要引用pdfkit的JavaScript源文件中的模塊并創(chuàng)建PDFDocument該類的實(shí)例


const PDFDocument = require('pdfkit');const doc = new PDFDocument;

PDFDocument實(shí)例是可讀的節(jié)點(diǎn)流。它們不會自動保存在任何地方,但您可以調(diào)用管道方法將PDF文檔的輸出發(fā)送到正在寫入的另一個可寫節(jié)點(diǎn)流。完成文檔后,請調(diào)用end方法以完成它。下面是一個示例,說明如何管道傳輸文件或HTTP響應(yīng)。


doc.pipe(fs.createWriteStream('/path/to/file.pdf')); // 寫pdfdoc.pipe(res); // HTTP響應(yīng)// 添加內(nèi)容doc.end();
  • 瀏覽器使用

在瀏覽器中使用PDFKit與在Node中使用它完全相同,除非你想要將輸出通過管道傳輸?shù)綖g覽器中支持的目標(biāo),例如Blob。Blob可用于生成URL以允許通過iframe直接在瀏覽器中顯示生成的PDF,或者它們可用于將PDF上傳到服務(wù)器,或在用戶的瀏覽器中觸發(fā)下載。


// 引入依賴const PDFDocument = require('pdfkit');const blobStream = require('blob-stream');// 同樣的創(chuàng)建方式const doc = new PDFDocument;//傳輸文檔到Blobconst stream = doc.pipe(blobStream());//像以往一樣將內(nèi)容添加到文檔// 最終得到Blobdoc.end();stream.on('finish', function() { // 得到一個可以隨心所欲的Blob const blob = stream.toBlob('application/pdf'); //或獲取blob URL以在瀏覽器中顯示 const url = stream.toBlobURL('application/pdf'); iframe.src = url;});
  • 添加頁

這個地方除非你設(shè)置autoFirstPage: false,不然PDFkit會自動給你添加第一頁,后續(xù)頁面你需要自己添加


doc.addPage()//事件監(jiān)聽doc.on('pageAdded', () => doc.text("Page Title"));

還可以為頁面設(shè)置一些選項(xiàng),例如其大小和方向以及邊距等


// 所有頁面添加50邊距doc.addPage({ margin: 50});// 在每一側(cè)添加不同的邊距doc.addPage({ margins: { top: 50, bottom: 50, left: 72, right: 72 }});
  • 切換到之前的頁面

bufferPages: true// 配置//調(diào)用doc.switchToPage(pageNumber)
// 創(chuàng)建一個文檔,bufferPages設(shè)置為truelet i;let end;const doc = new PDFDocument({ bufferPages: true});// 添加一些內(nèi)容doc.addPage();// ...doc.addPage();//查看緩沖頁面的范圍const range = doc.bufferedPageRange(); // => { start: 0, count: 2 }for (i = range.start, end = range.start + range.count, range.start <= end; i < end; i++;) { doc.switchToPage(i); doc.text(`Page ${i + 1} of ${range.count}`);}// 手動刷新已緩沖的頁面doc.flushPages();doc.end();
  • 設(shè)置文檔元數(shù)據(jù)

PDF文檔可以具有與其相關(guān)聯(lián)的各種元數(shù)據(jù),例如標(biāo)題或文檔的作者。可以通過將該信息添加到doc.info對象中,或者通過在創(chuàng)建時將info對象傳遞到文檔中來添加該信息。

以下是可以添加到文檔元數(shù)據(jù)的所有屬性的列表。根據(jù)PDF規(guī)范,每個屬性必須首字母大寫。


  • Title - 文件的標(biāo)題
  • Author - 作者的姓名
  • Subject - 文件的主題
  • Keywords - 與文檔關(guān)聯(lián)的關(guān)鍵字
  • CreationDate - 文檔創(chuàng)建的日期(由PDFKit自動添加)
  • ModDate - 上次修改文檔的日期

  • 加密和訪問權(quán)限

PDF規(guī)范允許你在打開文件時加密PDF文件且需要密碼,以及設(shè)置用戶可以對PDF文件執(zhí)行的操作的權(quán)限。要啟用加密,在創(chuàng)建時提供用戶密碼PDFDocumentoptions對象。提供用戶密碼時將對PDF文件進(jìn)行加密,并在打開文件時提示用戶輸入密碼以解密文件。


  • userPassword - 用戶密碼(字符串值)

要設(shè)置PDF文件的訪問權(quán)限,您需要option在創(chuàng)建時在對象中提供所有者密碼和權(quán)限設(shè)置PDFDocument。默認(rèn)情況下,不允許所有操作。您需要明確允許某些操作。

  • ownerPassword - 所有者密碼(字符串值)
  • permissions - 指定PDF文件權(quán)限的對象

permissions對象中允許以下設(shè)置:

  • printing - 是否允許打印。指定"lowResolution"允許降級打印,或"highResolution"允許以高分辨率打印
  • modifying - 是否允許修改文件。指定true允許修改文檔內(nèi)容
  • copying - 是否允許復(fù)制文本或圖形。指定true允許復(fù)制
  • annotating - 是否允許注釋,填寫表格。指定true允許注釋和表單填寫
  • fillingForms - 是否允許填寫表格和簽字。指定true允許填寫表單字段和簽名
  • contentAccessibility - 是否允許復(fù)制文本以便訪問。指定true允許復(fù)制可訪問性
  • documentAssembly - 是否允許裝配文件。指定true允許文檔組裝

可以指定用戶密碼,所有者密碼或兩個密碼。行為因提供的密碼而異:

  • 僅提供用戶密碼時,具有用戶密碼的用戶可以解密文件并具有對文檔的完全訪問權(quán)限。
  • 當(dāng)僅提供所有者密碼時,用戶能夠在不提供任何密碼的情況下解密和打開文檔,但訪問僅限于明確允許的操作。擁有所有者密碼的用戶可以完全訪問該文檔。
  • 提供兩個密碼時,具有用戶密碼的用戶可以解密文件,但只能根據(jù)權(quán)限設(shè)置對文件進(jìn)行有限的訪問。擁有所有者密碼的用戶可以完全訪問該文檔。

以上介紹的都是基本使用方法,核心用法包括矢量圖創(chuàng)建和繪制、文本內(nèi)容、圖片以及注釋等文檔實(shí)在太過詳細(xì),因此就不在詳細(xì)介紹,看文檔更有用,由于是英文文檔,可以借助瀏覽器自帶的翻譯插件查看



在線預(yù)覽查看



總結(jié)一下

目前pdf文檔的預(yù)覽非常容易實(shí)現(xiàn),但是生成,這里說的是客戶端生成相對來說要復(fù)雜一些,但是借助PDFKit就可以使用簡單的API來實(shí)現(xiàn)非常復(fù)雜的功能,可以說很貼心了,有需求的小伙伴趕緊去看看吧!



與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的使用poi写入doc文档中文档打不开_基于NodeJS和浏览器的PDF文档引擎——PDFKit的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。