透過Email推送統計報告。一般除了要求將PPT報告檔案作為附件發給使用者,同時希望將報告內容在郵件中直觀展示。 一份統計報告中經常包含柱狀圖、餅圖、好看的圖表,這些資訊要直接在Email中展示比較複雜。本文推薦一種方式:將PPT圖表內容轉換為高保真的圖片,將圖片放到Email中傳送,在不丟失使用者體驗的前提下,工作量儘可能小。
一、 將PPT報告轉換為PNG圖片檔案。
**有兩種方式:**一種是採用POI元件將圖片繪製到剪下板再輸出為圖片檔案;另一種方式是透過COM介面呼叫PowerPoint的介面,使用PPT自身的”另存為”功能,將PPT內容另存為圖片檔案。
優劣比較:
POI元件:不依賴於Office, 再linux下也可以執行;不好的地方是儲存的圖片效果太差,文字模糊,圖表存在重影。參考程式碼:http://blog.csdn.net/jsudavid/article/details/10387959。輸出圖片檔案效果如部落格中描述。本人POI元件應用經驗比較少,不清楚如何最佳化,有經驗的同行可以給點建議。
COM介面:依賴於Office,需要安裝Office,只能部署在Windows平臺,效能比較低,不支援併發操作(注意新增同步鎖);匯出的圖片效果很好,功能強大,程式碼簡單。
參考程式碼:
public static void main(String[] args)
{
new PPT2Image().SaveAsImage("D:\\TEMP\\ppt\\xxx.pptx",
"D:\\TEMP\\ppt\\20151201");
}
/**
*
* 儲存PPT為圖片檔案,每一個Slide儲存為一個圖片檔案。
* @param pptFilePath ppt檔案路徑。
* @param savePath 儲存圖片檔案目錄,生成的圖片檔案放該目錄下。
*/
public synchronized void SaveAsImage(String pptFilePath, String savePath)
// 啟動 office PowerPoint程式
ActiveXComponent pptApp = new ActiveXComponent("PowerPoint.Application");
Dispatch.put(pptApp, "Visible", new Variant(true));
Dispatch presentations = pptApp.getProperty("Presentations").toDispatch();
// 開啟PPT檔案
Dispatch presentation = Dispatch.call(presentations, "Open", pptFilePath, false,
false, true).toDispatch();
// 另儲存為PNG圖片檔案。SaveAs支援將PPT儲存為各種格式的檔案。
// PpSaveAsFileType:18-儲存為PNG格式的圖片。MsoTriState:1-轉換狀態
// 完整的列舉定義參見MicroSoft說明文件:
// https://technet.microsoft.com/zh-cn/windows/bb251061(v=msdn.10).aspx
// https://technet.microsoft.com/zh-cn/aa432714(v=office.12)
Dispatch.call(presentation, "SaveAs", savePath, 18, 1);
// 儲存,關閉檔案。退出power point程式。
Dispatch.call(presentation, "Save");
Dispatch.call(presentation, "Close");
Dispatch.call(pptApp, "Quit");
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
如果POI能否做一些調優,效果達到COM介面輸出的圖片效果。優先使用POI元件,否則選擇COM介面的方式。畢竟需要優先保證使用者體驗。
二、 將圖片新增到郵件正文
2.1 原理描述
將PPT轉換後的圖片檔案儲存在Tomcat的Web應用路徑下,提供域名(或者IP地址)下載該圖片檔案。使用者開啟收到的郵件時會透過http協議請求載入圖片檔案。需要注意的是中文版本的PPT轉換後的PNG圖片名中包含中文,要將Tomcat的資源定位編碼設定為UTF-8。Conf\ server.xml。
圖片檔案在伺服器上按日期、按型別長期儲存,提供下載服務。如果Tomcat伺服器關閉了,使用者開啟郵件就看不到圖片。
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL HTTP/1.1 Connector on port 8080
-->
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
2.2 參考程式碼
email.setMailHeader("Email推送報告技術說明及樣例程式碼");
mailContext += "建立人: Elon";
mailContext += "<br />"
+ "<br />"
+ "本文件主要解決報告轉換為圖片, 新增到Email正文傳送的問題。"
+ "<br />";
mailContext += "<img src=http://192.168.1.1:80/app/images/report/幻燈片3.PNG />";
透過Email推送統計報告。一般除了要求將PPT報告檔案作為附件發給使用者,同時希望將報告內容在郵件中直觀展示。 一份統計報告中經常包含柱狀圖、餅圖、好看的圖表,這些資訊要直接在Email中展示比較複雜。本文推薦一種方式:將PPT圖表內容轉換為高保真的圖片,將圖片放到Email中傳送,在不丟失使用者體驗的前提下,工作量儘可能小。
一、 將PPT報告轉換為PNG圖片檔案。
**有兩種方式:**一種是採用POI元件將圖片繪製到剪下板再輸出為圖片檔案;另一種方式是透過COM介面呼叫PowerPoint的介面,使用PPT自身的”另存為”功能,將PPT內容另存為圖片檔案。
優劣比較:
POI元件:不依賴於Office, 再linux下也可以執行;不好的地方是儲存的圖片效果太差,文字模糊,圖表存在重影。參考程式碼:http://blog.csdn.net/jsudavid/article/details/10387959。輸出圖片檔案效果如部落格中描述。本人POI元件應用經驗比較少,不清楚如何最佳化,有經驗的同行可以給點建議。
COM介面:依賴於Office,需要安裝Office,只能部署在Windows平臺,效能比較低,不支援併發操作(注意新增同步鎖);匯出的圖片效果很好,功能強大,程式碼簡單。
參考程式碼:
public static void main(String[] args)
{
new PPT2Image().SaveAsImage("D:\\TEMP\\ppt\\xxx.pptx",
"D:\\TEMP\\ppt\\20151201");
}
/**
*
* 儲存PPT為圖片檔案,每一個Slide儲存為一個圖片檔案。
*
* @param pptFilePath ppt檔案路徑。
* @param savePath 儲存圖片檔案目錄,生成的圖片檔案放該目錄下。
*/
public synchronized void SaveAsImage(String pptFilePath, String savePath)
{
// 啟動 office PowerPoint程式
ActiveXComponent pptApp = new ActiveXComponent("PowerPoint.Application");
Dispatch.put(pptApp, "Visible", new Variant(true));
Dispatch presentations = pptApp.getProperty("Presentations").toDispatch();
// 開啟PPT檔案
Dispatch presentation = Dispatch.call(presentations, "Open", pptFilePath, false,
false, true).toDispatch();
// 另儲存為PNG圖片檔案。SaveAs支援將PPT儲存為各種格式的檔案。
// PpSaveAsFileType:18-儲存為PNG格式的圖片。MsoTriState:1-轉換狀態
// 完整的列舉定義參見MicroSoft說明文件:
// https://technet.microsoft.com/zh-cn/windows/bb251061(v=msdn.10).aspx
// https://technet.microsoft.com/zh-cn/aa432714(v=office.12)
Dispatch.call(presentation, "SaveAs", savePath, 18, 1);
// 儲存,關閉檔案。退出power point程式。
Dispatch.call(presentation, "Save");
Dispatch.call(presentation, "Close");
Dispatch.call(pptApp, "Quit");
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
如果POI能否做一些調優,效果達到COM介面輸出的圖片效果。優先使用POI元件,否則選擇COM介面的方式。畢竟需要優先保證使用者體驗。
二、 將圖片新增到郵件正文
2.1 原理描述
將PPT轉換後的圖片檔案儲存在Tomcat的Web應用路徑下,提供域名(或者IP地址)下載該圖片檔案。使用者開啟收到的郵件時會透過http協議請求載入圖片檔案。需要注意的是中文版本的PPT轉換後的PNG圖片名中包含中文,要將Tomcat的資源定位編碼設定為UTF-8。Conf\ server.xml。
圖片檔案在伺服器上按日期、按型別長期儲存,提供下載服務。如果Tomcat伺服器關閉了,使用者開啟郵件就看不到圖片。
1
2
1
2
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL HTTP/1.1 Connector on port 8080
-->
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2.2 參考程式碼
email.setMailHeader("Email推送報告技術說明及樣例程式碼");
mailContext += "建立人: Elon";
mailContext += "<br />"
+ "<br />"
+ "本文件主要解決報告轉換為圖片, 新增到Email正文傳送的問題。"
+ "<br />"
+ "<br />";
mailContext += "<img src=http://192.168.1.1:80/app/images/report/幻燈片3.PNG />";
mailContext += "<br />"
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12