package com.example.demo.util.office;
import com.example.demo.util.BaseUtil;
import com.example.demo.util.FilesUtil;
import com.example.demo.util.WordUtils;
import com.itextpdf.io.font.PdfEncodings;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Text;
import com.itextpdf.layout.properties.TextAlignment;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPageMar;
import org.springframework.util.ObjectUtils;
import java.io.*;
import java.net.URL;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
* @Description: word转pdf
*/
public class Word2Pdf {
//文本
public static String TEXT = "text";
//对齐方式
public static String ALIGNMENT = "alignment";
//行间距
public static String FIXED_LEADING = "fixedLeading";
//字体样式
public static String FONT = "font";
//字体大小
public static String FONT_SIZE = "fontSize";
//是否粗体
public static String IS_BOLD = "isBold";
//首行缩进
public static String INDENT_FIRST_LINE = "indentFirstLine";
/**页边距*/
public static String TOP = "top";
public static String BOTTOM = "bottom";
public static String LEFT = "left";
public static String RIGHT = "right";
public static String IS_FIXED = "isFixed";
/**字体-宋体*/
protected static final String SIM_SUN = "SimSun.ttf";
/**字体-仿宋*/
protected static final String SIM_FANG = "simfang.ttf";
/**字体-宋体-粗体*/
protected static final String SIM_SUN_BD = "simsunbd.ttf";
public static String SONG_TI = "宋体";
public static String FANG_SONG = "仿宋";
private static Map<String,Map<String,Object>> orderMap =new HashMap<String, Map<String,Object>>();
/**
* 获取页眉信息
* @param doc XWPFDocument对象
* @return
*/
private static List<Map<String,Object>> getHeader(XWPFDocument doc){
List<Map<String,Object>> list = new ArrayList<>();
List<XWPFHeader> headerList = doc.getHeaderList(); // 获取页眉对象集合
for (XWPFHeader xwpfHeader : headerList) {
Map<String,Object> map = new HashMap<>();
map.put("页眉",xwpfHeader.getText()); // 获取页眉文本
List<XWPFParagraph> listParagraph = xwpfHeader.getListParagraph(); // 获取所有段落的列表
for (XWPFParagraph xwpfParagraph : listParagraph) {
List<XWPFRun> runs = xwpfParagraph.getRuns(); // 获取公共属性集的文本区域
for (XWPFRun xwpfRun : runs) {
map.put("页眉字体颜色", xwpfRun.getColor()); // 获取页眉字体颜色
map.put("页眉字体大小",xwpfRun.getFontSize()); // 获取页眉字体大小
map.put("页眉字体",xwpfRun.getFontName()); // 获取页眉字体
}
}
list.add(map);
}
return list;
}
/**
* 获取页脚信息
* @param doc
* @return
*/
private static List<Map<String,Object>> getFooter(XWPFDocument doc){
List<Map<String,Object>> list = new ArrayList();
List<XWPFFooter> footerList = doc.getFooterList(); // 获取页脚对象集合
for (XWPFFooter xwpfFooter : footerList) {
Map<String,Object> map = new HashMap<>();
map.put("页脚",xwpfFooter.getText()); // 获取页脚文本
List<XWPFParagraph> listParagraph = xwpfFooter.getListParagraph();
for (XWPFParagraph xwpfParagraph : listParagraph) {
List<XWPFRun> runs = xwpfParagraph.getRuns();
for (XWPFRun xwpfRun : runs) {
map.put("页脚字体颜色", xwpfRun.getColor()); // 获取页脚字体颜色
map.put("页脚字体大小",xwpfRun.getFontSize()); // 获取页脚字体大小
map.put("页脚字体",xwpfRun.getFontName()); // 获取页脚字体
}
}
list.add(map);
}
return list;
}
/**
* 获取段落信息
* @param doc
* @return
*/
private static List<Map<String,Object>> getXParagraph(XWPFDocument doc){
List<Map<String,Object>> list = new ArrayList();
List<XWPFParagraph> paragraphs2 = doc.getParagraphs();
for (XWPFParagraph xwpfParagraph : paragraphs2) {
Map<String,Object> map = new HashMap<>();
map.put(TEXT,xwpfParagraph.getParagraphText());// 段落内容
map.put(ALIGNMENT,xwpfParagraph.getAlignment());// 段落对齐方式
//获取段落行间距格式
LineSpacingRule spacingLineRule = xwpfParagraph.getSpacingLineRule();
map.put(IS_FIXED,spacingLineRule.getValue());
double spacingBetween = xwpfParagraph.getSpacingBetween(); // 返回段落行之间的间距。
if (((double) -1) == spacingBetween){
//此情况下为单倍行间距
spacingBetween = 1;
}
map.put(FIXED_LEADING,spacingBetween);
//567=1cm
map.put(INDENT_FIRST_LINE,xwpfParagraph.getFirstLineIndent());
List<XWPFRun> runs = xwpfParagraph.getRuns();
if (runs.size() == 0){
try {
if (xwpfParagraph.getCTP().getPPr().getRPr().getSz() == null){
map.put(TEXT,"\n");// 段落内容
}else {
map.put(FONT_SIZE,xwpfParagraph.getCTP().getPPr().getRPr().getSz().getVal().floatValue()/2);
map.put(FONT,xwpfParagraph.getCTP().getPPr().getRPr().getRFonts().getAscii());
map.put(TEXT,"\n");// 段落内容
}
} catch (NullPointerException e) {
map.put(TEXT,"\n");
}
}
for (XWPFRun xwpfRun : runs) {
//map.put("段落字体颜色",xwpfRun.getColor()); // 获取段落字体颜色
map.put(FONT_SIZE,xwpfRun.getFontSize()); // 获取段落字体大小
map.put(FONT,xwpfRun.getFontName()); // 获取段落字体
map.put(IS_BOLD,xwpfRun.isBold());
//map.put("段落下划线设置", xwpfRun.getUnderline()); // 获取段落字体下划线设置
//map.put("段落下划线颜色", xwpfRun.getUnderlineColor()); // 获取段落字体下划线颜色
}
// String titleLvl = getTitleLvl(doc,xwpfParagraph);// 获取段落级别
// if(!titleLvl.equals("")){
// String orderCode = getOrderCode(titleLvl);// 获取编号
// map.put("段落编号",orderCode);
// }
list.add(map);
}
return list;
}
/**
* Word中的大纲级别,可以通过getPPr().getOutlineLvl()直接提取,但需要注意,Word中段落级别,通过如下三种方式定义:
* 1、直接对段落进行定义;
* 2、对段落的样式进行定义;
* 3、对段落样式的基础样式进行定义。
* 因此,在通过“getPPr().getOutlineLvl()”提取时,需要依次在如上三处读取。
* @param doc
* @param para
* @return
*/
private static String getTitleLvl(XWPFDocument doc, XWPFParagraph para) {
String titleLvl = "";
try {
//�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
代码用maven方式引入jar包 无嵌入式处理word文件,工具类包括 1. docx转html处理 Docx2Html.java (poi jsoup) 2. doc转html处理 Doc2Html.java (poi jsoup) 3. word转pdf处理 Word2Pdf.java (poi itext7) 4. word模板填充 WordUtils.java (poi XWPF) 5. 序列id生成 6. 文件处理通用工具类
资源详情
资源评论
资源推荐
收起资源包目录
demo.7z (20个子文件)
demo
pom.xml 4KB
src
test
java
com
example
demo
DemoApplicationTests.java 215B
main
resources
application.properties 1B
simsunbd.ttf 11.29MB
SimSun.ttf 10.01MB
simfang.ttf 10.09MB
java
com
example
demo
DemoApplication.java 317B
util
office
Word2Pdf.java 17KB
AnalysisDom.java 768B
CodeRenderer.java 565B
Doc2Html.java 3KB
Docx2Html.java 2KB
WordUtils.java 8KB
BaseUtil.java 2KB
IdGeneratorUtils.java 4KB
FilesUtil.java 5KB
.idea
runConfigurations.xml 346B
misc.xml 541B
compiler.xml 705B
workspace.xml 4KB
共 20 条
- 1
传说中的Fly鸟
- 粉丝: 8
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论5