前段时间写了个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了.过段时间给大家上传不需要第三方软件支持的转换方式.
希望对各位有点儿帮助.
相关推荐
本资源包括word模板、aspose-words相关jar包、poi相关jar包,及java类,该类引入工程,导入jar包即可运行。警告:请勿用于商业用途,仅供学习研究,如有任何版权纠纷,本人概不负责!
C#实现把多个Word文件转换成HTML,保持原有格式。
java后台把word转换为html,包里包含内容工具包,代码,使用说明
简单的java方式实现 word 转为pdf的操作,互相学习,彼此沟通。仅仅是一个小的demo,有需要的可以自行获取。。
在官方代码的基础上增加了后台生成图片的功能,依赖Springboot,启动web服务后,由ImageUtil根据option的内容,生成html临时文件,并调用自带的打开浏览器功能进行预览,在浏览器端生成图片后,将图片的DataUrl发送...
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 ...
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 ...
实例139 利用POI读取Word文件中的内容 208 7.3 字符流 209 实例140 按顺序创建文件 210 实例141 按顺序读取文件 211 实例142 追加文件内容 211 实例143 只显示文件中指定的字符 214 实例...
实例139 利用POI读取Word文件中的内容 208 7.3 字符流 209 实例140 按顺序创建文件 210 实例141 按顺序读取文件 211 实例142 追加文件内容 211 实例143 只显示文件中指定的字符 214 实例144 读取jar包文件 215 实例...
实例139 利用POI读取Word文件中的内容 208 7.3 字符流 209 实例140 按顺序创建文件 210 实例141 按顺序读取文件 211 实例142 追加文件内容 211 实例143 只显示文件中指定的字符 214 实例144 ...
实例139 利用POI读取Word文件中的内容 208 7.3 字符流 209 实例140 按顺序创建文件 210 实例141 按顺序读取文件 211 实例142 追加文件内容 211 实例143 只显示文件中指定的字符 214 实例144 读取jar包文件 ...
实例139 利用POI读取Word文件中的内容 208 7.3 字符流 209 实例140 按顺序创建文件 210 实例141 按顺序读取文件 211 实例142 追加文件内容 211 实例143 只显示文件中指定的字符 214 实例144 读取jar包文件 215 实例...
pdf合并 、打印、pdf转图片,word2pdf 基于pdfbox的二次开发,实现将多个pdf文件合并成一个pdf,word转换成pdf,pdf转化成图片,pdf文件的后台打印,相当于虚拟打印机
获取word模板文件,根据后台数据填充模板生成新WORD并转换成PDF
batik可以实现JAVA画SVG图,也可以将后台生成图表转换成png格式图片。配合iText等打印技术,可以实现word打印各类分析图表的功能。
★ 支持标签管理、定位和标签文字更改 由于系统强大的前后台数据交互功能,所以能够做到在打开Word,Excel文件的状态下,根据需要从服务器数据库中提取相关数据,替换标签处的文字内容,所以,能够做到在指定位置显示...
同时能够将已有的复杂应用迅速转换到使用控件的应用。降低开发成本,节约开发时间。 18 基于标准协议,无任何自定义数据格式,通用性好 基于标准协议的开发,使得合作伙伴无须担心技术的进步带来后续维护和开发风险...
oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...
参数:字符串的URL地址,用以解决前后台不在同一路径的资源定位问题 备注:1.1.0新添加 urlType:本地URL地址强制转换方式选择 参数:abs(绝对路径),root(根路径),rel(相对路径) 备注:1.0.0 beta2新添加,v1.1.0版中...