PDF 也能像 PowerPoint 一樣簡報?pdf-presenter for Windows 實測與部署教學
這兩天我剛好挖到一個滿有趣的小工具,叫做 pdf-presenter。
它做的事情其實很單純,但很實用。講白話就是,讓 PDF 也能用接近 PowerPoint Presenter View 的方式來簡報。也就是說,觀眾看投影片,你自己則看到另一個簡報者畫面,上面有目前頁、下一頁、講稿備註、計時器,甚至還有一些額外控制功能。
我第一眼看到的時候,真的有一種「這個想法很聰明耶」的感覺。因為我們平常很多簡報,最後流通出去的格式其實都是 PDF。PDF 的好處大家都知道,分享方便,跨裝置也比較不容易跑版。可是它一進到簡報情境,體驗往往就掉一截。你可以把 PDF 打開來播,但通常就只是把投影片一頁一頁切過去而已。你沒有像 PowerPoint 那種成熟的簡報者檢視,也沒有那種「觀眾看一套、自己看另一套」的控制感。
所以這篇文章,我想做兩件事。
第一,我想介紹這個工具本身,因為它真的解決了一個很實際的痛點。
第二,我也想分享一下,我後來為什麼乾脆用 vibe coding 幫它包了一個更適合 Windows 一般使用者的入口,讓它從一個「很有趣的 CLI 工具」,變成一個我自己真的會繼續用,也比較敢推薦給別人的版本。
PDF 很常是最後交付格式,但簡報體驗常常卡住
這件事其實很常見。
很多簡報在製作階段也許是 PowerPoint,也可能是 Keynote,甚至有些是從其他工具匯出來的。但到了最後要寄給別人、要留存、要跨裝置分享時,大家通常還是會落到 PDF。因為 PDF 穩,格式固定,也比較不怕對方沒有原本那套軟體。(當然還有很多情況是 speaker 或主辦方就是不想給原始 PPT,例如很多醫學會議的簡報檔......)
問題是,PDF 雖然很適合「交付」,卻不見得很適合直接拿來「上台簡報」(當然這或許也就是提供方只想給你PDF 的原因....)。
最常見的卡點大概有幾個。
第一,它通常只有單一畫面。你如果直接用 PDF 閱讀器開,大多數情況下就是看到一頁投影片,然後翻下一頁。
第二,它不像 PowerPoint 那樣有現成的 Presenter View。你不太容易同時看到下一頁、講稿備註、時間控制。
第三,如果你想把 PDF 再轉回 PowerPoint 或其他簡報格式,往往又得靠另外的軟體,而且轉檔之後還不一定完全穩,版面、字型、圖片都可能有落差。
換句話說,PDF 不是不能簡報,而是它在簡報這件事上,原生支援其實不夠好。
也因為這樣,當我看到 pdf-presenter 這個專案時,會覺得它切入的位置很準。它不是在做 PDF 編輯,也不是在做投影片重製。它做的事情很聚焦,就是保留 PDF 原檔,然後想辦法把它變成一個更適合簡報的使用方式。
先向原始專案致敬
這個工具的原始專案是 htlin222/pdf-presenter,作者是 Hsiehting Lin(和信醫院林協霆醫師)。
我覺得這個專案最值得稱讚的地方,是它的核心概念很清楚,而且做法很俐落。它不是走很重的桌面應用程式路線,也不是把整份 PDF 重新轉成一套複雜的 HTML 投影片系統。它的方式比較輕巧,就是在本機啟動一個小型服務,然後用瀏覽器去開兩個畫面:
一個是 Audience,給觀眾或投影幕看。
一個是 Presenter,給簡報者自己操作。
這樣的好處是,你還是保留原本的 PDF,但使用體驗已經不是單純的 PDF 閱讀器,而是比較接近真正簡報工具的感覺。
所以先講清楚,這篇文章裡面提到的 Windows 版,不是我從零做了一套新的簡報系統。比較準確的說法是,我是在原作者已經做得很好的基礎上,往前再補了一步,把它調整成更適合 Windows 與一般 GUI 使用者的版本。
我實測後的第一個感受:核心功能很好,但入口真的有門檻
我自己實際跑過一次之後,第一個感受其實不是「這工具不好用」,反而是「這工具核心功能很有價值,只是入口門檻偏高」。
原始版本本身是 CLI 工具。對熟悉命令列的人來說,這件事其實不算太難。安裝 Node.js,跑一個指令,指定 PDF 路徑,工具就會在本機開一個服務,接著把瀏覽器打開。這一整套流程,對工程背景的人來說很正常。
可是如果把目標使用者換成一般 Windows 使用者,情況就不一樣了。
你要先安裝 Node.js。
你要知道怎麼打命令列。
你要知道 PDF 路徑怎麼填。
你要理解這個工具其實是在本機開 localhost。
你還要知道 Audience 跟 Presenter 是兩個不同頁面。
講白話就是,真正卡住人的,不是功能,而是那個第一步。
而且我自己在 Windows 上測的時候,也不是完全一次就順。中間還遇到一些實務上的小坑。例如前端靜態資源載入在 Windows 路徑上有狀況,頁面會只剩文字和按鈕;還有 Presenter 右側資訊區原本某些字體尺寸偏小,實際拿來簡報時可讀性沒有那麼理想。這些問題不算架構性大問題,但如果不處理,使用者第一印象就很容易被打斷。
所以我後來的想法很簡單。既然核心已經不錯,那我就不要重做整個產品。我只需要把入口包好,把幾個實際使用時會卡的地方修掉,這個工具就會從「有趣」,變成「真的可以落地」。
所以我做了一個 Windows 友善版入口
我後來用 vibe coding 幫這個專案包了一個比較適合 Windows 使用者的版本,現在公開放在這裡:
- Windows 版 fork:https://github.com/taoyutsun/pdf-presenter
- Release 下載頁:https://github.com/taoyutsun/pdf-presenter/releases
目前這個版本的主要調整,大概有幾個:
第一,新增 Windows 雙擊啟動器。
現在不用一開始就打 CLI 指令,可以直接雙擊 launch-pdf-presenter.cmd。
第二,新增 PowerShell 圖形介面。
開啟之後會有一個小視窗,讓你選 PDF,也可以直接把 PDF 拖曳進去。
第三,可以在啟動前直接填倒數計時分鐘數。
如果你這場報告是 20 分鐘、30 分鐘,起跑前就能先設定好。
第四,自動幫你找可用 port,然後自動開啟 Audience 與 Presenter 頁面。
使用者不用自己處理 localhost:3000 被占用怎麼辦這種事。
第五,保留一個 PowerShell server 視窗。
這個視窗存在的目的很實際,就是讓你知道簡報真的正在執行,而且想停止時,直接把它關掉就可以。
第六,順手把一些 Windows 上的實測問題一起修掉。
包含前端資源路徑問題,以及 Presenter 右側控制區的字體與排版可讀性調整。
所以這個版本比較像是把原本的 CLI 工具,往「一般使用者可操作」這條路推近一步。
這個工具現在能做什麼
回到工具本身,它最核心的價值其實還是很清楚。
它可以讓你用 PDF 做雙畫面簡報。
觀眾那邊看到的是乾淨的投影片畫面。
你自己這邊看到的是 Presenter 畫面。
Presenter 畫面裡目前有幾個我覺得很實用的東西:
- 目前投影片
- 下一張投影片預覽
- speaker notes 備註欄
- 計時器
- 投影片頁碼
- Grid 縮圖總覽
- Cursor Sync 滑鼠雷射點同步
- Freeze / Black 控制
- Audio 錄音
一般使用者怎麼開始用
如果你是一般使用者,我會建議走這條最簡單的路。
第一步,先安裝 Node.js
這一步還是需要。因為這個工具本質上仍然是 Node.js 應用,只是我把啟動入口包得比較友善。
如果你的電腦沒有裝 Node.js,可以先到 Node.js 官網 安裝 LTS 版本。
如果你習慣用指令,也可以在 PowerShell 執行:
winget install OpenJS.NodeJS.LTS
安裝完之後,可以用下面兩個指令確認:
node -v
npm -v
第二步,下載 Release
到這個頁面下載 zip:
https://github.com/taoyutsun/pdf-presenter/releases
下載之後把 zip 解壓縮。
第三步,雙擊啟動器
在解壓縮後的資料夾中,直接雙擊:
launch-pdf-presenter.cmd
接著會開一個小視窗,讓你:
- 選擇 PDF
- 或直接把 PDF 拖進去
- 視需要填入倒數計時分鐘數
- 按
Start
- Audience 分頁
- Presenter 分頁
這樣的使用方式,對一般 Windows 使用者就直覺很多。你不用先記一串指令,也不用先理解一堆參數。
如果你本來就習慣 CLI,也可以直接用命令列
如果你是熟悉命令列的人,其實原本的方式還是保留著。
在專案資料夾中執行:
npm install
npm run build
node .\\dist\\pdf-presenter.js "C:\\path\\to\\slides.pdf"
如果你想加倒數計時,也可以這樣:
node .\\dist\\pdf-presenter.js "C:\\path\\to\\slides.pdf" --timer 20
所以這個 Windows 版不是把 CLI 拿掉,而是多補了一個 GUI 入口。懂 CLI 的人照樣可以用原本那套方式,不懂 CLI 的人則可以直接雙擊。
Presenter 畫面裡,幾個我自己覺得最實用的功能
1. Type notes for this slide...
這個欄位其實很好用。它可以直接當成每一頁的講稿區。
你可以在 Presenter 畫面裡直接輸入備註,內容會自動存到 *.notes.json。
這代表你的講稿不是只能事前準備,也可以一邊試講、一邊微調。
如果你有先產生 notes 模板,它還會保留每頁的 hint。所以當某一頁還沒正式寫好講稿時,至少還會有一個頁面提示,不至於完全空白。
2. Grid
這個功能很適合實戰。
簡報時最怕的一種情況,就是臨時被問到別頁內容,或是臨時想跳去某一張補充。這時候如果只能一直按左右鍵,效率很差。Grid 開起來之後,你可以直接看到所有投影片縮圖,跳頁會快很多。
3. Cursor sync
這個我覺得比我一開始預期的更實用。
它的效果是,把 Presenter 畫面中滑鼠在投影片上的位置,同步成 Audience 畫面上的一個紅色雷射點。
如果你是遠端分享、線上教學,或是現場要指某一行、某一格數據,這個功能就很直覺。
4. Freeze 和 Black
這兩個是很有簡報實戰味道的功能。
Freeze 的意思是把觀眾畫面凍結在當前頁。你自己可以先偷看別頁、先準備下一段,但觀眾不會跟著跳走。
Black 則是直接讓觀眾畫面黑掉。
這種功能平常你可能不會一直用,可是真的到了問答、轉場、或不想讓觀眾一直盯著投影片讀的時候,它就很好用。
5. Audio
錄音不是這個工具的主角,但它是個滿有意思的附加功能。
你可以在 Presenter 畫面中直接錄音,錄完後會產生一個音檔,以及一個 .meta.json。那份 metadata 會記錄每一張投影片對應到錄音的哪一段時間。
如果你之後想拿去做逐字稿、對照逐頁內容,或做簡單的整理,這份資料就很有用。
老實說,對我來講,錄音功能不是我這次最在意的核心,但它有被保留,而且在特定情境下確實有價值。
如果你想先建立 speaker notes 模板
這個工具也有保留 CLI 方式來產生 notes 模板。
在專案資料夾中執行:
node .\\dist\\pdf-presenter.js -gn "C:\\path\\to\\slides.pdf"
跑完之後,PDF 同層會出現一個:
slides.notes.json
裡面會包含每一頁的 hint 與 note。
hint是系統從 PDF 自動抓的提示文字note是你真正要寫給自己看的講稿內容
我自己的使用心得:它不是要取代 PowerPoint,而是補上 PDF 簡報的缺口
如果要我用一句話說這個工具的定位,我會這樣講:
它不是要取代 PowerPoint。它比較像是在補一個很實際的缺口,就是「當你的簡報最後已經是 PDF 了,但你還是希望保留簡報者控制感」這件事。
所以它最適合的人,我覺得大概是這幾種:
- 最後交付格式常常是 PDF 的人
- 簡報時想保留講稿備註與下一頁預覽的人
- 不想為了簡報再把 PDF 重新轉成 PowerPoint 的人
- 願意接受本機啟動、小型服務、瀏覽器操作這種模式的人
例如你還是需要本機 Node.js。
它本質上還是本機服務加瀏覽器,不是那種完全免安裝的單檔 EXE。
所以如果未來真的要再推給更大範圍的一般使用者,下一步大概會是繼續往 EXE 或安裝包靠近。
但以目前這個版本來說,我覺得已經很夠用了。
至少對我來講,它已經從「一個看起來很酷的小工具」,變成「我真的會留著,以後有機會再拿出來用」的東西。
結語
很多工具其實不是不能用,而是入口還差一步。
這次 pdf-presenter 給我的感覺就是就是這樣。原始專案的核心能力其實已經很不錯,但如果直接丟給一般 Windows 使用者,CLI 入口的門檻還是會讓不少人先停下來。
所以我這次做的事,某種程度上很小。不是重寫系統,不是從零做產品,而是把那個最容易卡住人的第一步補起來。把「要打指令」改成「雙擊、選 PDF、開始」,再把幾個實際使用時會遇到的問題修一修。
結果也很直接。
一個原本偏工程背景的好工具,瞬間就比較像是一個可以真的拿去用、也比較容易分享給別人的工具。
對我來說,這次這個小 fork 最有意思的地方,也在這裡。
如果你對手邊過往那些無法直接拿來簡報的 PDF 曾有一絲怨念,不用懷疑,趕快下載這個小工具吧。
留言
張貼留言