Java后台截圖功能的實現
背景介紹:
在近期開發的可視化二期項目中的郵件項目中,郵件中的正文中含有圖片。該圖片的產生是將一些html網頁轉為圖片格式,剛開始考慮使用第三方組件庫html2image和一些手動截屏工具。不過如此種解決方式不是對一些css,js支持不完整,就是效率低。
為了實現將網頁url作為參數傳入,后台自動截圖。我們采用了DJ native Swing組件,該組件是由一個名為chrriis的軟件工程師開發的。免費開源。該組件主要是以桌面窗體的形式展示的。如何在與web工程整合就需要改造代碼。
http://djproject.sourceforge.net/main/index.html 可以下載到最新的jar包(包括Linux版本和win版本)和源碼。為了方便起見,該截圖所用的jar包都已經隨文檔放在了文件夾中。
一:功能實現:java后台截圖和郵件發送的配合實現案例
案例圖示:
java后台截圖代碼的封裝
1.截圖工具所需工具jar
(32位window版本)
在springmvc中寫一個controller方法,該方法可以在后台將模擬的Swing窗體啟動起來。因為該窗體耗費好多內存,故需要項目啟動前將tomcat 內存調大。
2.自定義監聽器的編寫
自定義監聽器的編寫主要是為了解決后台截圖工具在啟動后只能截取一張圖的尷尬,為了一個截圖工具頻繁截取新圖片。特意根據swing的api改寫了一個自定義的監聽器。此監聽器與截圖工具已整合在了一起。該監聽器的主要監聽url參數的傳入,傳入一個url就自動加入到內存一個url隊列中。然后后台截圖瀏覽器將拿一個url刷新頁面。
如果如下圖除了紅色類標注外的其他.java文件都是監聽器的一部分。
3.郵件定時發送的配合使用
郵件平台搭好調試通過后,又加入了定時器的模塊,在指定的時間點觸發定時器,然后將執行一個名為ServiceImpl的java文件,該java文件產生好多的頁面url.這些url正是被截圖頁面的路徑。截圖工具自定義監聽器監聽到這些路徑,便會一張張的截圖。產生的圖片將作為郵件的正文發出去。