GitHub - wkhtmltopdf/wkhtmltopdf: Convert HTML to PD...
而且 RubyMine 的 container integration 如果 gem 有變動就比較麻煩,想改成用本地開發。所以尋找其他列印 PDF 的方案,最後選擇了 WeasyPrint
熊大架 Bear Su
因為 wkhtmltopdf 變成 public archive了。
熊大架 Bear Su
搭配 FastAPI 寫了一個簡單的 API,並包成 Container
GitHub - timfanda35/weasyprint-pdf-api: A Restful AP...
熊大架 Bear Su
在研究的過程中,發現多數方案採用了 Puppeteer 的方式,直接用瀏覽器的功能去產生 PDF,但這也表示要安裝 node package 與 chrome/chromium。Grover gem 就是一個例子
GitHub - Studiosity/grover: A Ruby gem to transform ...
熊大架 Bear Su
由於目前服務透過 docker compose 管理,每次部署一個新版都會在重新下載 chrome/chromium 不太實際。研究過程中我找到了 browserless/chrome https://github.com/... Container,讓 Grover 可以透過 remote connect 的方式存取瀏覽器
熊大架 Bear Su
我其實只要能夠產生 PDF,卻要安裝 node 環境與 puppetter,覺得不太實際。所以後來又找到了 puppeteer-ruby,這是用 ruby 去實作 puppeteer 功能的 gem,雖然沒有全部功能都實作,但有 to_pdf 就夠用了。
GitHub - YusukeIwaki/puppeteer-ruby: A Ruby port of ...
熊大架 Bear Su
即使如此還是覺得為了產生 PDF,就要在 Server 上跑一個瀏覽器,實際上部署後發現實在是有點佔空間。最後尋找其他方案的結果,發現 WeasyPrint 的文件比較詳細,而且 API 簡單,就決定用它來開發一個 Web API 來用。
熊大架 Bear Su
在過程中發現的 FastAPI,覺得自動產生 Swagger UI 的部分很方便,幾乎沒有做什麼設定,開箱即用
熊大架 Bear Su
接下來就是要部署到線上環境觀察一陣子 有空再把筆記整理一下貼到 Blog 湊文章