通过Email推送统计报告。一般除了要求将PPT报告文件作为附件发给用户,同时希望将报告内容在邮件中直观展示。 一份统计报告中经常包含柱状图、饼图、好看的图表,这些信息要直接在Email中展示比较复杂。本文推荐一种方式:将PPT图表内容转换为高保真的图片,将图片放到Email中发送,在不丢失用户体验的前提下,工作量尽可能小。

一、 将PPT报告转换为PNG图片文件。

有两种方式:一种是采用POI组件将图片绘制到剪切板再输出为图片文件;另一种方式是通过COM接口调用PowerPoint的接口,使用PPT自身的”另存为”功能,将PPT内容另存为图片文件。

优劣比较:

1) POI组件:不依赖于Office, 再linux下也可以执行;不好的地方是保存的图片效果太差,文字模糊,图表存在重影。参考代码:http://blog.csdn.net/jsudavid/article/details/10387959。输出图片文件效果如博客中描述。本人POI组件应用经验比较少,不清楚如何优化,有经验的同行可以给点建议。

2) 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");
    }

如果POI能否做一些调优,效果达到COM接口输出的图片效果。优先使用POI组件,否则选择COM接口的方式。毕竟需要优先保证用户体验。

二、 将图片添加到邮件正文

2.1 原理描述

将PPT转换后的图片文件存储在Tomcat的Web应用路径下,提供域名(或者IP地址)下载该图片文件。用户打开收到的邮件时会通过http协议请求加载图片文件。需要注意的是中文版本的PPT转换后的PNG图片名中包含中文,要将Tomcat的资源定位编码设置为UTF-8。Conf\ server.xml。
图片文件在服务器上按日期、按类型长期保存,提供下载服务。如果Tomcat服务器关闭了,用户打开邮件就看不到图片。
<!-- A "Connector" represents an endpoint by which requests are received
         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"/>
    <!-- A "Connector" using the shared thread pool-->
    <!--
    <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 />"
                        + "<br />";

            mailContext += "<img src=http://192.168.1.1:80/app/images/report/幻灯片3.PNG />";

            mailContext += "<br />"

将PPT文件内容转换为图片放在Email邮件正文中发送的更多相关文章

  1. Shell 示例:将指定的文件内容转换为大写

    程序代码如下: #!/bin/bash # 将一个指定的输入文件内容转换为大写 E_FILE_ACCESS=70 E_WRONG_ARGS=71 if [ ! -r "$1" ] ...

  2. PPT文件流转为图片,并压缩成ZIP文件输出到指定目录

    实现流程: 接收InputStream流->复制流->InputStream流转为PPT->PPT转为图片->所有图片压缩到一个压缩文件下 注意: 1.PPT文件分为2003和 ...

  3. 如何把上传图片时候的文件对象转换为图片的url !

    getObjectURL(file) { var url = null; if (window.createObjectURL != undefined) { url = window.createO ...

  4. C#操作EML邮件文件实例(含HTML格式化邮件正文和附件)

    使用QQ邮箱.163邮箱等导出的EML邮件,包含了邮件的发件人.主题.内容.附件等所有信息,该实例就如何解析这些信息,并在编辑后保存做个Demo. 如下图所示,EML文件是编码后的文本文件,可以使用正 ...

  5. springboot 项目中读取资源文件内容 如图片、文档文件

    1 问题描述:在 springboot 项目中有时候会需要读取一些资源文件,例如 office的 docx 文档或者 png.jpg的图片.在多模块项目中资源文件需要放到启动项目的 Resources ...

  6. java读取文件内容并输出到控制台,java中实现文件复制

    public class TestFileInputStream { public static void main(String [] args) { //读取指定文件中内容,并在控制台输出 Fil ...

  7. iconv内容,convmv文件名,unix2dos,dos2unix文件格式转换,od/cut/wc/dd/diff/uniq/nice/du等命令,linux文件名乱码,文件名,文件内容,vim编码设置

    1.enconv文件名编码转换,比如要将一个GBK编码的文件转换成UTF-8编码,操作如下 enconv -L zh_CN -x UTF-8 filename enconv -L GB2312 -x  ...

  8. C# CAD批量转换为图片

    最近写了个工具,将指定目录下的CAD文件批量转换为图片格式. 首先需要添加对应的引用 : 在AutoCAD2008的环境下对应AutoCAD 2008 Type Library 和 AutoCAD/O ...

  9. Lodop导出图片,导出单页内容的图片

    用如下语句设置图片的格式,设置导出的图片初识的默认名称,Lodop可以把打印内容导出成图片. LODOP.SET_SAVE_MODE("SAVEAS_IMGFILE_EXENAME" ...

随机推荐

  1. 自动统计安卓log中Anr,Crash,Singnal出现数量的Python脚本

    作为测试,在测试工作中一定会经常抓log,有时log收集时间很长,导致log很大,可能达到几G,想找到能打开如此大的log文件的工具都会变得困难:即使log不大时,我们可以直接把log发给开发同学去分 ...

  2. DLL文件修复

    当你在Windows计算机中安装非操作系统的软件时,往往会覆盖或改写系统共享文件, 如动态链接库(.dll文件)和可执行文件(.exe文件). * 对于Windows系统来说,当用户操作不当(如非正常 ...

  3. UVA - 11624 多点bfs [kuangbin带你飞]专题一

    题意:某人身陷火场,总有k个点着火,着火点可向四周扩散,问此人能否逃离. 思路:可能有多个着火点,以这些着火点作为起点进行bfs,得到整个火场的最短距离,然后又以人所在坐标作为起点进行bfs,得到该人 ...

  4. shell脚本中 杀死可能成为僵尸进程的方法

    交互式 Bash Shell 获取进程 pid 在已知进程名(name)的前提下,交互式 Shell 获取进程 pid 有很多种方法,典型的通过 grep 获取 pid 的方法为(这里添加 -v gr ...

  5. mysql修改记录

    增加一列:alter table bf_agt_dep_acct_sap_sub add column cust_age varchar(10) not null; 改变属性:alter table ...

  6. Hibernate入门这一篇就够了

    前言 本博文主要讲解介绍Hibernate框架,ORM的概念和Hibernate入门,相信你们看了就会使用Hibernate了! 什么是Hibernate框架? Hibernate是一种ORM框架,全 ...

  7. Mycat 分布式事务的实现

    引言:Mycat已经成为了一个强大的开源分布式数据库中间件产品.面对企业应用的海量数据事务处理,是目前最好的开源解决方案.但是如果想让多台机器中的数据保存一致,比较常规的解决方法是引入"协调 ...

  8. linux之hdparm命令说明及其测试硬盘读写速度

    hdparm -t /dev/sda1功能说明:显示与设定硬盘的参数. 语 法:hdparm [-CfghiIqtTvyYZ] [-a <快取分区>][-A <0或1>][-c ...

  9. android的Live架构

    MVC.MVP.MVVM的选择 一开始我们在这几种框架上的选择上就没花太多的心思,因为他们都只是为了实现清晰的分层逻辑,差异化的地方无非是讲UI逻辑.交互逻辑.数据绑定逻辑.业务逻辑堆放在那一层的问题 ...

  10. Java中的i++和i--

    /** * @Title:DataCate.java * @Package:com.you.dao * @Description:数据类型转换 * @Author: 游海东 * @date: 2014 ...