`
xiangdong_li
  • 浏览: 6981 次
  • 性别: Icon_minigender_2
  • 来自: 南京
社区版块
存档分类
最新评论

Java后台word转换传真文件

阅读更多

前段时间写了个word转换tif文件的Java后台工具.文件工程比较大,等会把代码上传.
现在吧部分的代码给大家贴出来吧~
1.所需要的Jar包 

 

 2.需要使用到的软件,Openoffice,Adobe Player.

 3.所需要的Java类.

public class FilesChanage
{
    
    private static final Logger log = Logger.getLogger(FilesChanage.class);
    
    /**
     * TXT文本内容转换成PDF文档
     * @param  filePath 文本文件地址
     * @return String   PDF文件地址
     * @throws IOException
     * @see [类、类#方法、类#成员]
     */
    private String txtToPDF(String filePath)
        throws IOException
    {
        log.info("TXT文本内容转换成PDF文档");
        // 分析生成pdf文件路径
        String pdfFilePath = filePath.substring(0, filePath.lastIndexOf('.')) + ".pdf";
        
        // 读取TXT文件内容
        FileReader file = null;
        String readLine = null;
        
        // 生成PDF文件
        File files = new File(pdfFilePath);
        // FileOutputStream out = null;
        Document document = null;
        
        PdfWriter writer = null;
        
        BufferedReader inputStream = null;
        
        try
        {
            // 创建文档,设置页面大小, 左、右、上和下页边距。
            document = new Document(PageSize.A4, 50, 50, 50, 50);
            // document是创建的文档,out是输出
            writer = PdfWriter.getInstance(document, new FileOutputStream(files));
            // 打开文档
            writer.setViewerPreferences(PdfWriter.PageModeUseOutlines);
            document.open();
            
            file = new FileReader(filePath);
            inputStream = new BufferedReader(file);
            BaseFont bfChinese =
                BaseFont.createFont("c:\\WINDOWS\\Fonts\\simfang.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
            Font font = new Font(bfChinese, 15, Font.BOLD);
            while ((readLine = inputStream.readLine()) != null)
            {
                if (readLine.length() == 0)
                {
                    readLine = " ";
                }
                // 写文本内容
                Paragraph text = new Paragraph(readLine, font);
                document.add(text);
            }
        }
        catch (DocumentException e)
        {
            log.debug("没有发现 c:\\WINDOWS\\Fonts\\simfang.ttf 字体");
            log.error(e.getMessage());
        }
        catch (FileNotFoundException e)
        {
            log.debug("没有发现需要转换的PDF文档");
            log.error(e.getMessage());
        }
        catch (IOException e)
        {
            log.debug("生成PDF文档错误");
            log.error(e.getMessage());
        }
        finally
        {
            if (document != null)
            {
                document.close();
            }
            if (inputStream != null)
            {
                inputStream.close();
            }
            if (file != null)
            {
                file.close();
            }
            if (writer != null)
            {
                writer.flush();
                writer.close();
            }
        }
        return pdfFilePath;
    }
    
    /**
     * DOC转PDF文档
     * @param  docFilePath DOC文档地址
     * @return int         转换成TIF文件的数量
     * @see [类、类#方法、类#成员]
     */
    private int docToPdf(String docFilePath)
    {
        log.info("DOC转PDF文档");
        File inputFile = new File(docFilePath);
        String newFilePath = docFilePath.substring(0, docFilePath.length() - 3) + "pdf";
        File outputFile = new File(newFilePath);
        log.info("连接OpenOffice服务,实现PDF文档转换");
        OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
        try
        {
            connection.connect();
            DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
            converter.convert(inputFile, outputFile);
            log.info("doc转换成PDF文档成功!");
        }
        catch (ConnectException cex)
        {
            log.error("连接OpenOffice错误");
        }
        finally
        {
            log.info("OpenOffice断开连接");
            if (connection != null)
            {
                connection.disconnect();
                connection = null;
            }
        }
        return pdfToJpg(newFilePath);
    }
    
    /**
     * PDF转JPEG图片
     * <功能详细描述>
     * @param  pdfFilePath PDF文档路径
     * @return int         转换成TIF文件的数量
     * @see [类、类#方法、类#成员]
     */
    private int pdfToJpg(String pdfFilePath)
    {
        log.info("PDF转JPEG图片");
        int pageAll = 0; // 总数量
        int pageAll_temp = 0;// 总数量
        File file = null;
        RandomAccessFile raf = null;
        FileChannel channel = null;
        FileOutputStream out = null;
        MappedByteBuffer buf = null;
        Image img = null;
        BufferedImage bufferImage = null;
        try
        {
            file = new File(pdfFilePath);
            raf = new RandomAccessFile(file, "r");
            channel = raf.getChannel();
            buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
            PDFFile pdffile = new PDFFile(buf);
            String filePath = pdfFilePath.substring(0, pdfFilePath.length() - file.getName().length());
            String filaName = file.getName().substring(0, file.getName().indexOf('.'));
            String newFileName = filePath + filaName;
            pageAll = pdffile.getNumPages();
            log.info("创建JPEG图片");
            for (int i = 1; i <= pageAll; i++)
            {
                PDFPage page = pdffile.getPage(i);
                Rectangle2D rect =
                    new Rectangle(0, 0, ((int)page.getBBox().getWidth()), ((int)page.getBBox().getHeight()));
                img = page.getImage((int)rect.getWidth(), (int)rect.getHeight(), rect, null, true, true);
                bufferImage =
                    new BufferedImage((int)rect.getWidth(), (int)rect.getHeight(), BufferedImage.TYPE_INT_RGB);
                bufferImage.getGraphics().drawImage(img, 0, 0, Color.WHITE, null);
                String newJPEGFileName = newFileName + i + ".jpg";
                String newTIFFileName = newFileName + i + ".tif";
                out = new FileOutputStream(newJPEGFileName);
                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
                encoder.encode(bufferImage);
                boolean isSuccess = jpgTotiff(newJPEGFileName, newTIFFileName);
                if (isSuccess)
                {
                    pageAll_temp++;
                }
                if (out != null)
                {
                    out.flush();
                    out.close();
                }
                if (img != null)
                {
                    img.flush();
                }
                if (bufferImage != null)
                {
                    bufferImage.flush();
                }

                File jpgFile = new File(newJPEGFileName);
                if (jpgFile.exists())
                {
                    jpgFile.delete();
                }
            }
        }
        catch (Exception e)
        {
            log.error("生成JPEG图片错误");
            log.error(e.getMessage());
        }
        finally
        {
            log.info("关闭相关的文件操作流");
            try
            {
                if (buf != null)
                {
                    unmap(buf);
                }
                if (channel != null)
                {
                    channel.close();
                }
                if (raf != null)
                {
                    raf.close();
                }
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            if (file.exists())
            {
                file.delete();
            }
            if (pageAll_temp != pageAll)
            {
                pageAll = 0;
            }
        }
        return pageAll;
    }
    
    /**
     * JPEG转TIF文件
     * @param  jpgFilePath JPEG图片路径
     * @param  tifFilePath TIF图片路径
     * @return boolean     是否转换成功
     * @see [类、类#方法、类#成员]
     */
    private boolean jpgTotiff(String jpgFilePath, String tifFilePath)
    {
        log.info("JPEG转TIF文件");
        RenderedOp src = JAI.create("fileload", jpgFilePath);
        OutputStream os = null;
        ImageEncoder enc = null;
        boolean isSuccess = false;
        try
        {
            os = new FileOutputStream(tifFilePath);
            TIFFEncodeParam param = new TIFFEncodeParam();
            enc = ImageCodec.createImageEncoder("TIFF", os, param);
            enc.encode(src);
            isSuccess = true;
        }
        catch (FileNotFoundException e)
        {
            isSuccess = false;
            log.error("需要创建的TIF文件路径不正确");
            log.error(e.getMessage());
        }
        catch (IOException e)
        {
            isSuccess = false;
            log.error("生成TIF文件失败");
            log.error(e.getMessage());
        }
        finally
        {
            log.info("关闭文件操作流");
            try
            {
                if (os != null)
                {
                    os.flush();
                    os.close();
                }
            }
            catch (IOException e)
            {
                log.error("关闭文件操作流失败");
                log.error(e.getMessage());
            }
        }
        return isSuccess;
    }
    
    /**
     * 释放PDF集合
     * @param buffer
     * @see [类、类#方法、类#成员]
     */
    public void unmap(final Object buffer)
    {
        log.info("释放PDF集合");
        AccessController.doPrivileged(new PrivilegedAction()
        {
            public Object run()
            {
                try
                {
                    Method getCleanerMethod = buffer.getClass().getMethod("cleaner", new Class[0]);
                    getCleanerMethod.setAccessible(true);
                    sun.misc.Cleaner cleaner = (sun.misc.Cleaner)getCleanerMethod.invoke(buffer, new Object[0]);
                    cleaner.clean();
                }
                catch (Exception e)
                {
                    log.error("释放PDF集合失败");
                    log.error(e.getMessage());
                }
                return null;
            }
        });
    }
    
   /**
    * 文档转换成TIF文件
    * @param  filePath 需要转换的文件路径
    * @return int      转换后文件的数量
    * @see [类、类#方法、类#成员]
    */
    public int ChangeFile(String filePath)
    {
        log.info("DOC TXT文档转换成TIF文件");
        String fileType = filePath.substring(filePath.lastIndexOf('.'), filePath.length());
        
        int pagesize = 0;
        
        if (".doc".equals(fileType))
        {
            log.info("doc文档转换");
            pagesize = docToPdf(filePath);
        }
        else
        {
            log.info("txt文档转换");
            String pdfFilePath;
            try
            {
                pdfFilePath = txtToPDF(filePath);
                pagesize = pdfToJpg(pdfFilePath);
            }
            catch (IOException e)
            {
                log.error("生成PDF文档失败");
                log.error(e.getMessage());
            }
        }
        return pagesize;
    }
    
}

 

public class ComeAction extends DispatchAction
{
    
    private static final Logger log = Logger.getLogger(FilesChanage.class);
    
    /**
     * 文档转换Action
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @see [类、类#方法、类#成员]
     */
    public void chanageFile(ActionMapping mapping, ActionForm form, HttpServletRequest request,
        HttpServletResponse response)
    {
        log.info("进入文档转换Action");
        // 获取文件路径
        String filePath = request.getParameter("filePath");
        // 实现文件转换
        FilesChanage filesChanage = new FilesChanage();
        String pagenumber = String.valueOf(filesChanage.ChangeFile(filePath));
        log.info("获取转换文件数量。共" + pagenumber + "页");
        // 数据回写
        try
        {
            log.info("将获取到的数据回写");
            response.setContentType("text/html");
            response.setHeader("Pragma", "no-cache");
            response.setHeader("Cache-Control", "no-cache, must-revalidate");
            response.setHeader("Pragma", "no-cache");
            response.getWriter().write(pagenumber);
        }
        catch (IOException e)
        {
            log.error("response数据流回写失败");
            log.error(e.getMessage());
        }
        finally
        {
            try
            {
                response.getWriter().flush();
                response.getWriter().close();
            }
            catch (IOException e)
            {
                log.error("response数据流关闭失败");
                log.error(e.getMessage());
            }
        }
    }
}

 里面还涉及了监听器的东东,者立即不上传了.这些代码已经可以完成doc文件转tif了.过段时间给大家上传不需要第三方软件支持的转换方式.

希望对各位有点儿帮助.

  • 大小: 24.6 KB
分享到:
评论
8 楼 lhw0531 2012-12-10  
求源码 谢谢 124523820@qq.com
7 楼 skyrain521 2012-12-10  
能把源码发我一份  谢谢!!!skyrain1024@yahoo.com.cn
6 楼 xiangdong_li 2012-11-13  
wow0107l 写道
能不能把代码 发份到我邮箱啊 谢谢
wow0107L@163.com

源码找不到了。呵呵,不好意思啊。你直接把这个Copy一下就可以运行的。
5 楼 xiangdong_li 2012-11-13  
shqv 写道
好东东,,求源码  shqv@163.com

源码找不到了。呵呵,不好意思啊。你直接把这个Copy一下就可以运行的。
4 楼 shqv 2012-11-06  
好东东,,求源码  shqv@163.com
3 楼 wow0107l 2012-06-14  
能不能把代码 发份到我邮箱啊 谢谢
wow0107L@163.com
2 楼 wow0107l 2012-06-14  
顶 好东东  能不能把源码给我份
1 楼 xiangdong_li 2011-11-02  
好东西,自己顶下~

相关推荐

    通过java后台代码实现修改word内容将word转换为图片并以图片流形式返回给前台

    本资源包括word模板、aspose-words相关jar包、poi相关jar包,及java类,该类引入工程,导入jar包即可运行。警告:请勿用于商业用途,仅供学习研究,如有任何版权纠纷,本人概不负责!

    Word文件转化成HTML

    C#实现把多个Word文件转换成HTML,保持原有格式。

    word转html的java代码

    java后台把word转换为html,包里包含内容工具包,代码,使用说明

    java 的 word 转pdf的小demo

    简单的java方式实现 word 转为pdf的操作,互相学习,彼此沟通。仅仅是一个小的demo,有需要的可以自行获取。。

    Echarts-Java 3.0.0.6.jar(附后台生成图片功能)

    在官方代码的基础上增加了后台生成图片的功能,依赖Springboot,启动web服务后,由ImageUtil根据option的内容,生成html临时文件,并调用自带的打开浏览器功能进行预览,在浏览器端生成图片后,将图片的DataUrl发送...

    一篇不错的关于java工作流方面讲解及代码

    5.4.1 中文字符格式的转换模块(Stringto.java) 22 5.4.2 自动生成验证码(Ran.java) 22 5.4.3 数据库的连接(ConnectionFactory.java) 23 5.4.4 数据库连接的关闭(DatabaseUtils.java)--只提供接口 23 5.4.5 ...

    java实现工作流

    5.4.1 中文字符格式的转换模块(Stringto.java) 22 5.4.2 自动生成验证码(Ran.java) 22 5.4.3 数据库的连接(ConnectionFactory.java) 23 5.4.4 数据库连接的关闭(DatabaseUtils.java)--只提供接口 23 5.4.5 ...

    java范例开发大全源代码

     实例139 利用POI读取Word文件中的内容 208  7.3 字符流 209  实例140 按顺序创建文件 210  实例141 按顺序读取文件 211  实例142 追加文件内容 211  实例143 只显示文件中指定的字符 214  实例...

    java范例开发大全

    实例139 利用POI读取Word文件中的内容 208 7.3 字符流 209 实例140 按顺序创建文件 210 实例141 按顺序读取文件 211 实例142 追加文件内容 211 实例143 只显示文件中指定的字符 214 实例144 读取jar包文件 215 实例...

    Java范例开发大全 (源程序)

     实例139 利用POI读取Word文件中的内容 208  7.3 字符流 209  实例140 按顺序创建文件 210  实例141 按顺序读取文件 211  实例142 追加文件内容 211  实例143 只显示文件中指定的字符 214  实例144 ...

    Java范例开发大全(全书源程序)

    实例139 利用POI读取Word文件中的内容 208 7.3 字符流 209 实例140 按顺序创建文件 210 实例141 按顺序读取文件 211 实例142 追加文件内容 211 实例143 只显示文件中指定的字符 214 实例144 读取jar包文件 ...

    java范例开发大全(pdf&源码)

    实例139 利用POI读取Word文件中的内容 208 7.3 字符流 209 实例140 按顺序创建文件 210 实例141 按顺序读取文件 211 实例142 追加文件内容 211 实例143 只显示文件中指定的字符 214 实例144 读取jar包文件 215 实例...

    pdf合并打印

    pdf合并 、打印、pdf转图片,word2pdf 基于pdfbox的二次开发,实现将多个pdf文件合并成一个pdf,word转换成pdf,pdf转化成图片,pdf文件的后台打印,相当于虚拟打印机

    poi-demo.7z

    获取word模板文件,根据后台数据填充模板生成新WORD并转换成PDF

    batik框架 jar包

    batik可以实现JAVA画SVG图,也可以将后台生成图表转换成png格式图片。配合iText等打印技术,可以实现word打印各类分析图表的功能。

    NTKO文档在线编辑控件独立安装包4.0.6.5(适合TA2009\2010\2011版本)

    ★ 支持标签管理、定位和标签文字更改 由于系统强大的前后台数据交互功能,所以能够做到在打开Word,Excel文件的状态下,根据需要从服务器数据库中提取相关数据,替换标签处的文字内容,所以,能够做到在指定位置显示...

    NTKO文档在线编辑控件4.0.1.2

    同时能够将已有的复杂应用迅速转换到使用控件的应用。降低开发成本,节约开发时间。 18 基于标准协议,无任何自定义数据格式,通用性好 基于标准协议的开发,使得合作伙伴无须担心技术的进步带来后续维护和开发风险...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...

    xheditor-1.1.14

    参数:字符串的URL地址,用以解决前后台不在同一路径的资源定位问题 备注:1.1.0新添加 urlType:本地URL地址强制转换方式选择 参数:abs(绝对路径),root(根路径),rel(相对路径) 备注:1.0.0 beta2新添加,v1.1.0版中...

Global site tag (gtag.js) - Google Analytics