iT邦幫忙

2

請問vue3可以編輯PDF嗎?

  • 分享至 

  • xImage

PDF如果用自己電腦的檢視器開啟,有些可以編輯的欄位就可以直接輸入。
想問如果用vue3顯示PDF,是否有辦法做到和在電腦上用檢視器一樣,直接編輯輸入那些欄位,然後把這份編輯過的PDF傳給後端?

目前找了一段時間,還沒找到解法。

froce iT邦大師 1 級 ‧ 2024-12-05 09:42:11 檢舉
https://github.com/phihag/pdfform.js/blob/master/README.md
https://pdf-lib.js.org/
要在vue用應該得自己包組件。

但我沒真的試過
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
2
copemoe
iT邦好手 2 級 ‧ 2024-12-05 09:22:04

可以參考此篇實作
用VUE3做个PDF动态合同表单(含编辑+渲染)
https://juejin.cn/post/7379995743883624485

1
淺水員
iT邦大師 6 級 ‧ 2024-12-05 14:51:17

我不知道有沒有 vue3 可以直接套用的
昨天看到這問題後嘗試了一下
有找到在瀏覽器編輯後把資料送到後端的方法

(以下只是研究「做不做得到」的過程,所以直接改 build 好的東西,如果要用自己再進一步看相關文件吧)

我用的是 PDF.js
這是 FireFox 開啟 pdf 使用的程式碼
我在那網站下載 Prebuilt (modern browsers) 版本:
https://github.com/mozilla/pdf.js/releases/download/v4.9.124/pdfjs-4.9.124-dist.zip

解壓縮放到伺服器環境後,他的 web/viewer.html 可以直接打開
會顯示一個示範的 pdf

接著我去修改 web/viewer.mjs 的程式碼
在 4364 行是一個 download 方法
裡面的 if(data) 內容我改成這樣

if (data) {
    let file = new File([data], filename, {type: 'application/pdf'});
    let formData = new FormData();
    formData.append('file2save', file);
    fetch('save-pdf.php', {
        method: 'post',
        body: formData
    }).then(r => r.text())
    .then(text => console.log(text));
}

如此一來,當使用者按下儲存檔案按鈕,就會把修改後的 pdf 資料送到後端
而上述方法,只要 FireFox 本身能修改 pdf 的功能,應該都有支援

0
YC
iT邦好手 1 級 ‧ 2024-12-05 17:36:04

pdfme這個 react UI 可能接近你的需求。
他有提供網頁編輯器
他提供一個 template,當 User 改完後,你直接把 JSON 數值回傳 server。
下載的話,是用剛剛的 template + JSON 數值重新 render 一個 pdf。

0
smfself
iT邦新手 5 級 ‧ 2024-12-08 13:54:40

我目前開發過的專案有用 vue3 (vite 建置) 搭配 pdfjs(pdfjs-dist) 來針對前端呈現 PDF 檔案,然後再根據前端 vue UI(HTML/JS/CSS) 的方式來處理 呈現+編輯功能(非編輯實際 PDF 檔案) ,之後再透過 回傳編輯資料的 json (資料+位置),在後端(java Spring 後台)用另外可處理 PDF 檔案的元件將這些重新寫入到PDF檔案中!

就我所知 前端目前 pdfjs(pdfjs-dist)以檢視功能為主,透過 canvas / img 的方式一頁一頁呈現指定的 PDF 內容,至於目前官網比較新的版本提供的 editor 功能看起來也不是在前端直接編輯 PDF 檔案(若有錯誤請更正)!

此外我沒用過 pdf-lib.js ,但查詢了一下根據這篇的說明 "PDF處理庫"NPM套件對比 https://npm-compare.com/zh-TW/pdf-lib,pdf-parse,pdfjs-dist

看起來是可以在前端(Browser) 中編修 PDF 檔案,可能需要嘗試才會知道如何使用!
不過我會認為[前端直接回傳 PDF] 的資安風險(惡意PDF上傳) ,比僅透過 [傳回資料並由後端再編輯處理PDF 後產生] 來的高,這個可能需要謹慎考慮!

淺水員 iT邦大師 6 級 ‧ 2024-12-08 23:54:20 檢舉

pdfjs-dist(也就是 PDF.js)是直接編輯 PDF 喔
雖然只有簡單的功能
像是加文字在某些地方、畫線或螢光筆
也可以填寫 PDF 表單

smfself iT邦新手 5 級 ‧ 2024-12-09 12:30:07 檢舉

是的,我又查了一下官方範例,官方展示: https://mozilla.github.io/pdf.js/web/viewer.html
看起來是可以編輯後存檔,不回傳server ,而是直接用 js 把異動檔案轉為 download 方式存檔, 這個方式就不會有上傳 PDF的資安問題!
相關資料: viewer.html : https://github.com/mozilla/pdf.js/blob/master/web/viewer.html
pdf.js/web/app.js : https://github.com/mozilla/pdf.js/blob/master/web/app.js#L1109
**pdf.js/src/display/api.js : ** https://github.com/mozilla/pdf.js/blob/master/src/display/api.js#L2966

我要發表回答

立即登入回答