`
xiangdong_li
  • 浏览: 7438 次
  • 性别: 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  
好东西,自己顶下~

相关推荐

    doc2docx 文件类型转换 java后台

    本项目专注于“doc2docx 文件类型转换”,使用Java后台技术实现。Eclipse作为流行的Java集成开发环境,被选为开发工具,使得开发者能够方便地编译和运行代码。 在标题中提到的“doc文件转换docx文件”,涉及到了...

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

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

    巧用Java程序把Word转换成Html文件

    本文将深入探讨如何利用Java程序将Word文档转换成HTML文件,包括技术背景、具体实现步骤以及代码解析。 ### 技术背景 在Java中,实现Word文档到HTML文件的转换主要依赖于以下技术: 1. **Java和COM交互**:Java...

    Java后台的word生成

    总的来说,Java后台生成Word文档是一个涉及多方面技能的任务,包括对Apache POI和FreeMarker的理解,以及文件处理和模板引擎的使用。通过学习和实践,你可以创建出满足各种需求的复杂Word文档。

    java后台生成echarts图表

    3. `phantomjs`:这是一个无头浏览器的可执行文件,Java后台生成图表时会用到。 要使用这些工具,你需要按照以下步骤操作: 1. 引入 `echartspoi` 和 `echarts-java` 的依赖,将jar包放入项目的lib目录或者配置到...

    用java实现word统计报表和图形统计的导出

    在Java中,可以使用Apache POI库来处理Microsoft Office格式的文件,包括Word(.doc和.docx)。POI提供了一套API,允许开发者读取、写入和修改Word文档。通过这个库,我们可以创建新的文档,添加文本,设置样式,...

    纯java代码跨平台调用打印机打印word、pdf、图片等。

    通常,Java处理Word文件需要使用Apache POI或JODConverter等库。如果项目确实包含了Word打印,那么可能借助了这些第三方库将Word文档转换为PDF或其他可打印格式,再通过上述PDF处理方式实现打印。 6. **iTextPDF**...

    Java程序把Word文档直接转换成HTML文件

    ### Java程序将Word文档直接转换成HTML文件:深入解析与实践 #### 一、引言 在企业级应用开发中,文档处理是一项常见的需求。尤其是将Word文档转换为其他格式,如HTML,以便于在网络环境中展示或进行进一步的处理...

    Word文件转化成HTML

    将Word转换为HTML意味着要保留所有这些格式信息,并将其转化为HTML元素。 在C#中,我们可以利用Microsoft Office Interop库来实现这个转换。该库允许我们直接与Office应用程序进行交互,包括Word。但是,需要注意的...

    java 的 word 转pdf的小demo

    // 将Word转换为PDF doc.save(out, SaveFormat.PDF); // 关闭文档和输出流 doc.close(); out.close(); ``` 在实际开发中,我们还需要考虑错误处理、资源管理以及复杂的格式转换问题,例如保持原始格式的完整性、...

    java web在线预览pdf、word、excel

    为了实现文档预览,我们需要创建一个Controller,该Controller接收前端请求,读取服务器上的PDF、Word或Excel文件,然后将文件内容转换为适合在浏览器中展示的格式。 对于PDF文件,在Java Web环境中,可以使用...

    java 前台数据和echarts图表导出为word文件的jar

    本话题将深入探讨如何利用Java和Echarts将前台数据与图表导出为Word文件,以及涉及到的关键库和技术。 首先,我们需要理解Java中导出Word文档的主要库Apache POI。Apache POI是Java社区中广泛采用的API,它允许...

    Java用OpenOffice将office转换为PDF

    Java使用OpenOffice转换Office文档为PDF是一种常见的技术需求,尤其在企业级应用中,为了保持一致性和跨平台兼容性,可能会需要将Word、Excel或PowerPoint文档转换为PDF格式。以下将详细介绍如何在Java环境中利用...

    java操作word,web操作,后台操作

    Java操作Word技术主要涉及到Apache POI库的使用,这是一...综上所述,Java操作Word结合Web技术,能够实现在Web页面上动态编辑Word文档并保持与后台数据的同步,这对于在线文档协作和办公自动化场景具有很高的实用价值。

    java+js实现word文档在线查看(前台+后台所使用到的jar包和js包)

    在Java后端,你可以创建一个RESTful API,接收前端发送的文件路径或ID,然后利用Apache POI读取并转换Word文档为HTML格式。这样,前端就可以以纯文本的形式展示文档内容,避免了用户必须下载原始文件的需求。以下是...

    基于Java实现wps在线编辑、在线预览后台服务.zip

    "基于Java实现wps在线编辑、在线预览后台服务"这个标题指出,我们将探讨一个使用Java编程语言构建的系统,该系统能够支持WPS文档的在线编辑和预览功能。这意味着该服务可能是一个Web应用程序,它允许用户在浏览器中...

    jacob-java调用word

    JACOB同样能在这个场景中发挥作用,允许Java后台生成报表,并通过Word或Excel模板将数据填充到相应位置,再进行打印。 JACOB的使用指南通常包括如何创建COM对象,如何操作这些对象,以及如何处理异常和资源清理。...

    纯Java实现的WORD转PDF,免费

    在纯Java环境下使用JODConverter进行转换,首先需要安装和配置相应的Office套件,因为JODConverter是通过调用这些套件的后台服务来完成转换的。然后,可以通过Java代码调用JODConverter提供的API,指定输入的Word...

    java代码将word转pdf,pdf转swf 操作文档及代码

    2. **Word到PDF转换**:在Java环境中,可以利用开源库如Apache POI来读取和操作Microsoft Word(.doc或.docx)文档,然后使用转换工具如JODConverter将其转换为PDF格式。Apache POI提供了对Office文档的低级访问,而...

    java 将数据打印输出成word格式文件

    在Java编程中,将数据打印输出成Word格式文件是一项常见的需求,特别是在生成报告、文档或者报表时。Apache POI是一个强大的库,它允许开发者使用Java处理Microsoft Office格式的文件,包括Word(.doc和.docx)文件...

Global site tag (gtag.js) - Google Analytics