前段时间写了个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了.过段时间给大家上传不需要第三方软件支持的转换方式.
希望对各位有点儿帮助.
相关推荐
本项目专注于“doc2docx 文件类型转换”,使用Java后台技术实现。Eclipse作为流行的Java集成开发环境,被选为开发工具,使得开发者能够方便地编译和运行代码。 在标题中提到的“doc文件转换docx文件”,涉及到了...
本资源包括word模板、aspose-words相关jar包、poi相关jar包,及java类,该类引入工程,导入jar包即可运行。警告:请勿用于商业用途,仅供学习研究,如有任何版权纠纷,本人概不负责!
本文将深入探讨如何利用Java程序将Word文档转换成HTML文件,包括技术背景、具体实现步骤以及代码解析。 ### 技术背景 在Java中,实现Word文档到HTML文件的转换主要依赖于以下技术: 1. **Java和COM交互**:Java...
总的来说,Java后台生成Word文档是一个涉及多方面技能的任务,包括对Apache POI和FreeMarker的理解,以及文件处理和模板引擎的使用。通过学习和实践,你可以创建出满足各种需求的复杂Word文档。
3. `phantomjs`:这是一个无头浏览器的可执行文件,Java后台生成图表时会用到。 要使用这些工具,你需要按照以下步骤操作: 1. 引入 `echartspoi` 和 `echarts-java` 的依赖,将jar包放入项目的lib目录或者配置到...
在Java中,可以使用Apache POI库来处理Microsoft Office格式的文件,包括Word(.doc和.docx)。POI提供了一套API,允许开发者读取、写入和修改Word文档。通过这个库,我们可以创建新的文档,添加文本,设置样式,...
通常,Java处理Word文件需要使用Apache POI或JODConverter等库。如果项目确实包含了Word打印,那么可能借助了这些第三方库将Word文档转换为PDF或其他可打印格式,再通过上述PDF处理方式实现打印。 6. **iTextPDF**...
### Java程序将Word文档直接转换成HTML文件:深入解析与实践 #### 一、引言 在企业级应用开发中,文档处理是一项常见的需求。尤其是将Word文档转换为其他格式,如HTML,以便于在网络环境中展示或进行进一步的处理...
将Word转换为HTML意味着要保留所有这些格式信息,并将其转化为HTML元素。 在C#中,我们可以利用Microsoft Office Interop库来实现这个转换。该库允许我们直接与Office应用程序进行交互,包括Word。但是,需要注意的...
// 将Word转换为PDF doc.save(out, SaveFormat.PDF); // 关闭文档和输出流 doc.close(); out.close(); ``` 在实际开发中,我们还需要考虑错误处理、资源管理以及复杂的格式转换问题,例如保持原始格式的完整性、...
为了实现文档预览,我们需要创建一个Controller,该Controller接收前端请求,读取服务器上的PDF、Word或Excel文件,然后将文件内容转换为适合在浏览器中展示的格式。 对于PDF文件,在Java Web环境中,可以使用...
本话题将深入探讨如何利用Java和Echarts将前台数据与图表导出为Word文件,以及涉及到的关键库和技术。 首先,我们需要理解Java中导出Word文档的主要库Apache POI。Apache POI是Java社区中广泛采用的API,它允许...
Java使用OpenOffice转换Office文档为PDF是一种常见的技术需求,尤其在企业级应用中,为了保持一致性和跨平台兼容性,可能会需要将Word、Excel或PowerPoint文档转换为PDF格式。以下将详细介绍如何在Java环境中利用...
Java操作Word技术主要涉及到Apache POI库的使用,这是一...综上所述,Java操作Word结合Web技术,能够实现在Web页面上动态编辑Word文档并保持与后台数据的同步,这对于在线文档协作和办公自动化场景具有很高的实用价值。
在Java后端,你可以创建一个RESTful API,接收前端发送的文件路径或ID,然后利用Apache POI读取并转换Word文档为HTML格式。这样,前端就可以以纯文本的形式展示文档内容,避免了用户必须下载原始文件的需求。以下是...
"基于Java实现wps在线编辑、在线预览后台服务"这个标题指出,我们将探讨一个使用Java编程语言构建的系统,该系统能够支持WPS文档的在线编辑和预览功能。这意味着该服务可能是一个Web应用程序,它允许用户在浏览器中...
JACOB同样能在这个场景中发挥作用,允许Java后台生成报表,并通过Word或Excel模板将数据填充到相应位置,再进行打印。 JACOB的使用指南通常包括如何创建COM对象,如何操作这些对象,以及如何处理异常和资源清理。...
在纯Java环境下使用JODConverter进行转换,首先需要安装和配置相应的Office套件,因为JODConverter是通过调用这些套件的后台服务来完成转换的。然后,可以通过Java代码调用JODConverter提供的API,指定输入的Word...
2. **Word到PDF转换**:在Java环境中,可以利用开源库如Apache POI来读取和操作Microsoft Word(.doc或.docx)文档,然后使用转换工具如JODConverter将其转换为PDF格式。Apache POI提供了对Office文档的低级访问,而...
在Java编程中,将数据打印输出成Word格式文件是一项常见的需求,特别是在生成报告、文档或者报表时。Apache POI是一个强大的库,它允许开发者使用Java处理Microsoft Office格式的文件,包括Word(.doc和.docx)文件...