Ubuntu Java Word 转 Pdf

maven 依赖

<dependency>
	<groupId>fr.opensagres.xdocreport</groupId>
	<artifactId>org.apache.poi.xwpf.converter.pdf</artifactId>
	<version>1.0.4</version>
</dependency>

gradle 依赖

compile ‘fr.opensagres.xdocreport:org.apache.poi.xwpf.converter.pdf:1.0.4‘

示例

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.collections.MapUtils;
import org.apache.poi.xwpf.converter.pdf.PdfConverter;
import org.apache.poi.xwpf.converter.pdf.PdfOptions;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import fr.opensagres.xdocreport.utils.StringUtils;

/**
 * @author Rocca
 *
 */
public class WordPdfUtils {

	protected static final Logger logger = LoggerFactory.getLogger(WordPdfUtils.class);

    public static void main(String[] args) throws Exception{
        String filepath = "C:/Users/Rocca/Desktop/vork/xxx.docx";
        String outpath = "F:/test.pdf"; 
        
        InputStream source = new FileInputStream(filepath);
        OutputStream target = new FileOutputStream(outpath);
        Map<String, String> params = new HashMap<String, String>();
        
        
        PdfOptions options = PdfOptions.create();
        
        wordConverterToPdf(source, target, options, params);
    }

	/**
     * 将word文档, 转换成pdf, 中间替换掉变量
     * @param source 源为word文档, 必须为docx文档
     * @param target 目标输出
     * @param params 需要替换的变量
     * @throws Exception
     */
    public static void wordConverterToPdf(InputStream source,
			OutputStream target, Map<String, String> params) throws Exception {
		wordConverterToPdf(source, target, null, params);
	}

	/**
     * 将word文档, 转换成pdf, 中间替换掉变量
     * @param source 源为word文档, 必须为docx文档
     * @param target 目标输出
     * @param params 需要替换的变量
     * @param options PdfOptions.create().fontEncoding( "windows-1250" ) 或者其他
     * @throws Exception
     */
    public static void wordConverterToPdf(InputStream source, OutputStream target, 
    		PdfOptions options,
    		Map<String, String> params) throws Exception {
    	 XWPFDocument doc = new XWPFDocument(source);
         paragraphReplace(doc.getParagraphs(), params);
         for (XWPFTable table : doc.getTables()) {
 			for (XWPFTableRow row : table.getRows()) {
 				for (XWPFTableCell cell : row.getTableCells()) {
 					paragraphReplace(cell.getParagraphs(), params);
 				}
 			}
 		}
 		PdfConverter.getInstance().convert(doc, target, options);
    }
    
    /** 替换段落中内容 */
	private static void paragraphReplace(List<XWPFParagraph> paragraphs, Map<String, String> params) {
		if (MapUtils.isNotEmpty(params)) {
			for (XWPFParagraph p : paragraphs){
				for (XWPFRun r : p.getRuns()){
					String content = r.getText(r.getTextPosition());
					logger.info(content);
					if(StringUtils.isNotEmpty(content) && params.containsKey(content)) {
						r.setText(params.get(content), 0);
					}
				}
			}
		}
	}

}

调用

response.reset();
response.setContentType("application/pdf");
String exportName = new String((companyFullName + contractNo + ".pdf").getBytes("gbk"), "iso8859-1");
response.setHeader("Content-Disposition", "attachment; filename=" + exportName);
InputStream input = request.getServletContext().getResourceAsStream("/WEB-INF/classes/"+sourceFileName);
WordPdfUtils.wordConverterToPdf(input, response.getOutputStream(), params);

字体安装:

这里就把window上的字体打包,选择中文字体就行,上传到Ubuntu系统, 安装好就成。

window系统中的字体路径: C:\Windows\Fonts 下

Ubuntu系统的字体有多个地方, 我这里放在:/usr/share/fonts 目录下,在其中建立了一个win目录,用于存放上传的中文字体,再执行命令: fc-cache -fv 将字体刷到字体缓存中。然后重启下应用。

时间: 2024-10-29 03:45:02

Ubuntu Java Word 转 Pdf的相关文章

java word、pdf控件对比推荐

word:poi-tl(强推):http://deepoove.com/poi-tl/freemaker:https://www.cnblogs.com/lichmama/p/6652161.htmlpdf:itext(强推):https://www.cnblogs.com/h--d/p/6150320.htmlpdf-box:https://blog.csdn.net/qq_37022150/article/details/79486730 根据以上博客编写的实践demo: https://g

Java 将word转为pdf jacob方式

package com.doctopdf; import java.io.File; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.ComThread; import com.jacob.com.Dispatch; import com.jacob.com.Variant; /** * 效果最好的一种方法,但是需要 window 环境,而且速度是最慢的需要安装 msofficeWord * * 下载地址:http:

[原创]java实现word转pdf

最近遇到一个项目需要把word 转成pdf,百度了一下网上的方案有很多,比如虚拟打印.给word 装扩展插件等,这些方案都依赖于ms word 程序,在java代码中也得使用诸如jacob或jcom这类java com bridge,使得服务器开发受限于win平台,而且部署起来也很麻烦.后来在某论坛看到了一个openoffice+jodconverter的转换方案,可以完成word到PDF的转换工作,服务器开发端需要安装openoffice,但是需求一步额外的操作--需要在服务器开发上的某个端口

java实现word转pdf在线预览(前端使用PDF.js;后端使用openoffice、aspose)

背景 之前一直是用户点击下载word文件到本地,然后使用office或者wps打开.需求优化,要实现可以直接在线预览,无需下载到本地然后再打开. 随后开始上网找资料,网上资料一大堆,方案也各有不同,大概有这么几种方案: 1.word转html然后转pdf 2.Openoffice + swftools + Flexmapper + jodconverter 3.kkFileView 分析之后最后决定使用Openoffice+PDF.js方式实现 环境搭建 1.安装Openoffice,下载地址:

java 将word转为PDF (100%与word软件转换一样)

jdk环境:jdk_8.0.1310.11_64    (64位) 1.引入pom文件 <!-- word转pdf(依赖microsoft) --> <dependency> <groupId>com.jacob</groupId> <artifactId>jacob</artifactId> <version>1.18</version> </dependency> 2.下载jar文件,手动添加至

java doc转pdf

市场上主流的 WORD 转 PDF 工具有两个:OpenOffice 和 Microsoft Office 转换插件,可以通过部署这两个工具实现 WORD 转 PDF 功能. 1: Microsoft 提 供 了 一 个 转 换 插 件 实 现 Office 转 PDF 功 能 , 即SaveAsPDFandXPS.此插件是一个 com 组件,对于 C++.C#等语言可以直接使用,如果是 JAVA 语言,需要通过 jacob 来调用 com 组件.SaveAsPDFandXPS 插件要求必须有一

使用Tika、Luke工具解析多种类型(word、pdf、txt 等)索引文件

Tika 是2008年才产生的apache的一个项目,主要用于打开各种不同类型的文档,获取其文本信息.可以解析多种类型(word.pdf.txt .html等)文件! 甚至可以通过解析url,获取其网页信息.最后把其文本信息提起出来.这方面Tika有点像Jsoup..一般情况下,直接对word.pdf等文件直接创建索引是不对的,用luke工具查看之后,出现一大推乱七八糟的term.这个时候就可以用Tika 去在对其创建索引之前,转化处理其文本信息. package hhc; import jav

Aspose&#160;强大的服务器端 excel word ppt pdf 处理工具

Aspose 强大的服务器端 excel word ppt pdf 处理工具 http://www.aspose.com/java/word-component.aspx Aspose 强大的服务器端 excel word ppt pdf 处理工具

Java iText使用PDF模板生成PDF文档

我们系统需要生成一个可以打印的PDF文档,老板给了我一个Word文档,按照这个Word文档的格式生成PDF文档. 第一步:下载AdobeAcrobat DC,必须使用这个来制作from域. 第二步:使用AdobeAcrobat DC将Word导成PDF文档. 第三步:由于还要加水印的效果,所以还是使用AdobeAcrobat DC来添加水印,非常方便: 添加水印的方法:使用AdobeAcrobat DC打开PDF文档,"工具"->"编辑PDF"->&qu