javascript
使用poi写入doc文档中文档打不开_基于NodeJS和浏览器的PDF文档引擎——PDFKit
介紹
PDFKit是一個用于Node和瀏覽器的PDF文檔生成庫,可以輕松創建復雜的多頁面可打印文檔。API包含可鏈接性,包括低級功能以及更高級功能的抽象。PDFKit API設計簡單,因此生成復雜文檔通常與一些函數調用一樣簡單。最直接的好處就是節省了服務器端的資源,讓生成工作在本地完成!
如何獲取?
由于最近限制頗多,不便于直接放鏈接,截圖都不行,大家可以直接到Github搜索
安裝使用
- 使用npm包管理
npm install pdfkit
- 創建文檔
創建PDFKit文檔非常簡單。只需要引用pdfkit的JavaScript源文件中的模塊并創建PDFDocument該類的實例
const PDFDocument = require('pdfkit');const doc = new PDFDocument;
PDFDocument實例是可讀的節點流。它們不會自動保存在任何地方,但您可以調用管道方法將PDF文檔的輸出發送到正在寫入的另一個可寫節點流。完成文檔后,請調用end方法以完成它。下面是一個示例,說明如何管道傳輸文件或HTTP響應。
doc.pipe(fs.createWriteStream('/path/to/file.pdf')); // 寫pdfdoc.pipe(res); // HTTP響應// 添加內容doc.end();
- 瀏覽器使用
在瀏覽器中使用PDFKit與在Node中使用它完全相同,除非你想要將輸出通過管道傳輸到瀏覽器中支持的目標,例如Blob。Blob可用于生成URL以允許通過iframe直接在瀏覽器中顯示生成的PDF,或者它們可用于將PDF上傳到服務器,或在用戶的瀏覽器中觸發下載。
// 引入依賴const PDFDocument = require('pdfkit');const blobStream = require('blob-stream');// 同樣的創建方式const doc = new PDFDocument;//傳輸文檔到Blobconst stream = doc.pipe(blobStream());//像以往一樣將內容添加到文檔// 最終得到Blobdoc.end();stream.on('finish', function() { // 得到一個可以隨心所欲的Blob const blob = stream.toBlob('application/pdf'); //或獲取blob URL以在瀏覽器中顯示 const url = stream.toBlobURL('application/pdf'); iframe.src = url;});
- 添加頁
這個地方除非你設置autoFirstPage: false,不然PDFkit會自動給你添加第一頁,后續頁面你需要自己添加
doc.addPage()//事件監聽doc.on('pageAdded', () => doc.text("Page Title"));
還可以為頁面設置一些選項,例如其大小和方向以及邊距等
// 所有頁面添加50邊距doc.addPage({ margin: 50});// 在每一側添加不同的邊距doc.addPage({ margins: { top: 50, bottom: 50, left: 72, right: 72 }});
- 切換到之前的頁面
bufferPages: true// 配置//調用doc.switchToPage(pageNumber)
// 創建一個文檔,bufferPages設置為truelet i;let end;const doc = new PDFDocument({ bufferPages: true});// 添加一些內容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();
- 設置文檔元數據
PDF文檔可以具有與其相關聯的各種元數據,例如標題或文檔的作者??梢酝ㄟ^將該信息添加到doc.info對象中,或者通過在創建時將info對象傳遞到文檔中來添加該信息。
以下是可以添加到文檔元數據的所有屬性的列表。根據PDF規范,每個屬性必須首字母大寫。
- Title - 文件的標題
- Author - 作者的姓名
- Subject - 文件的主題
- Keywords - 與文檔關聯的關鍵字
- CreationDate - 文檔創建的日期(由PDFKit自動添加)
- ModDate - 上次修改文檔的日期
- 加密和訪問權限
PDF規范允許你在打開文件時加密PDF文件且需要密碼,以及設置用戶可以對PDF文件執行的操作的權限。要啟用加密,在創建時提供用戶密碼PDFDocument的options對象。提供用戶密碼時將對PDF文件進行加密,并在打開文件時提示用戶輸入密碼以解密文件。
- userPassword - 用戶密碼(字符串值)
要設置PDF文件的訪問權限,您需要option在創建時在對象中提供所有者密碼和權限設置PDFDocument。默認情況下,不允許所有操作。您需要明確允許某些操作。
- ownerPassword - 所有者密碼(字符串值)
- permissions - 指定PDF文件權限的對象
permissions對象中允許以下設置:
- printing - 是否允許打印。指定"lowResolution"允許降級打印,或"highResolution"允許以高分辨率打印
- modifying - 是否允許修改文件。指定true允許修改文檔內容
- copying - 是否允許復制文本或圖形。指定true允許復制
- annotating - 是否允許注釋,填寫表格。指定true允許注釋和表單填寫
- fillingForms - 是否允許填寫表格和簽字。指定true允許填寫表單字段和簽名
- contentAccessibility - 是否允許復制文本以便訪問。指定true允許復制可訪問性
- documentAssembly - 是否允許裝配文件。指定true允許文檔組裝
可以指定用戶密碼,所有者密碼或兩個密碼。行為因提供的密碼而異:
- 僅提供用戶密碼時,具有用戶密碼的用戶可以解密文件并具有對文檔的完全訪問權限。
- 當僅提供所有者密碼時,用戶能夠在不提供任何密碼的情況下解密和打開文檔,但訪問僅限于明確允許的操作。擁有所有者密碼的用戶可以完全訪問該文檔。
- 提供兩個密碼時,具有用戶密碼的用戶可以解密文件,但只能根據權限設置對文件進行有限的訪問。擁有所有者密碼的用戶可以完全訪問該文檔。
以上介紹的都是基本使用方法,核心用法包括矢量圖創建和繪制、文本內容、圖片以及注釋等文檔實在太過詳細,因此就不在詳細介紹,看文檔更有用,由于是英文文檔,可以借助瀏覽器自帶的翻譯插件查看
在線預覽查看
總結一下
目前pdf文檔的預覽非常容易實現,但是生成,這里說的是客戶端生成相對來說要復雜一些,但是借助PDFKit就可以使用簡單的API來實現非常復雜的功能,可以說很貼心了,有需求的小伙伴趕緊去看看吧!
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的使用poi写入doc文档中文档打不开_基于NodeJS和浏览器的PDF文档引擎——PDFKit的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python逗号代码_基于Python3
- 下一篇: python如何在循环中保存文件_Pyt