Java 实现word模板转为pdf

1. pom相关依赖

工具poi-tl (操作word文档模板) + jacob (将操作后的word模板转为pdf)

<!-- poi-tl的pom依赖 -->
<dependency>
  <groupId>com.deepoove</groupId>
  <artifactId>poi-tl</artifactId>
  <version>1.9.1</version>
</dependency>
<!-- jacob的pom依赖(需自行导入.jar包) -->
<dependency>
  <groupId>com.jacob</groupId>
  <artifactId>jacob</artifactId>
  <version>1.17</version>
  <scope>system</scope>
  <systemPath>${project.basedir}/src/main/resources/lib/jacob.jar</systemPath>
</dependency>

2. 对word模板进行插入数据操作

使用poi-tl操作word需要创建一个用于向word插入数据的Map<String, Object>集合, word模板中标签格式为"{{标签}}", 其中标签内容为Map<String, Object> 的key.

// 项目根路径
String abPath = new File("").getAbsolutePath() + "/src/main/resources";
// 创建用于插入数据的Map
Map<String, Object> map = new HashMap<>();
map.put(<k>, <v>);
...
// 填充word文档
XWPFTemplate template = XWPFTemplate.compile(abPath + "<模板路径>").render(map);
// 输出文档
template.writeAndClose(new FileOutPutStream("<输出路径>"));

3. 对word模板的表格执行插入数据操作(动态表格)

使用poi-tl操作word的表格,动态的插入数据,需要用到poi-tl的可选插件进行自定义渲染策略, 首先在word需要操作的表格中的任意单元格添加标签“{{标签}}”

自定义渲染策略

/**
 * 自定义渲染策略
 *
 * @author
 */
public class DetailTablePolicy extends DynamicTableRenderPolicy {
  // 表格起始行行数
  int tableStartRow = 1;

  /**
   * 自定义渲染策略
   *
   * @data 传入的封装好的数据
   */
  @Override
  public void render(XWPFTable table, Object data) throws Exception {
    // 如果数据为空,直接返回
    if (null == data) return;
    // 封装数据List的数据封装对象
    NdrwhkhzbData detailData = (NdrwhkhzbData) data;
		// 获取当前列表行高
    int height = table.getRow(2).getHeight();
    // 从封装对象中获取数据集合
    List<RowRenderData> datas = detailData.getNdrwhkhzbs();
    if (null != datas) {
      // 循环移除空白表格中数据数量的空白行
      for (int i = 1; i < datas.size() + 2; i++) {
        table.removeRow(i);
      }
      // 循环插入数据
      for (int i = 0; i < datas.size(); i++) {
        // 新增一行空白行
        XWPFTableRow insertNewTableRow = table.insertNewTableRow(tableStartRow);
        // 设置行高
        insertNewTableRow.setHeight(height);
        // 循环添加单元格(4为每行单元格数量)
        for (int j = 0; j < 4; j++) {
          insertNewTableRow.createCell();
        }
        // 填充表格
        TableRenderPolicy.Helper.renderRow(table.getRow(tableStartRow), datas.get(i));
      }
    }
  }
}

把自定义渲染策略当做工具类, 在主逻辑中直接配置使用

	/**
   * 操作年度任务和考核指标表
   *
   * @throws IOException 输入输出流异常
   */
  private void createNdrwhkhzb(Integer uid, String dirPath) throws IOException {
    PageData datas = new PageData();
    NdrwhkhzbData detailTable = new NdrwhkhzbData();
    List<RowRenderData> nds = new ArrayList<>();
    // 根据uid查询年度任务和考核指标数据
    List<NdrwhkhzbEntity> list = ndrwhkhzbService.selectNdrwhkhzbByUid(uid);
    for (NdrwhkhzbEntity ndrwhkhzbEntity : list) {
      RowRenderData rrd = Rows.of(ndrwhkhzbEntity.getNd(), ndrwhkhzbEntity.getNdrw(), ndrwhkhzbEntity.getNdkhzb()
          , ndrwhkhzbEntity.getZyrwdsjjd()).center().create();
      nds.add(rrd);
    }
    detailTable.setNdrwhkhzbs(nds);
    datas.setNdrwhkhzbData(detailTable);

    // 配置表格
    Configure config = Configure.builder().bind("detail_table", new DetailTablePolicy()).build();
    // 调用渲染策略进行填充
    XWPFTemplate template =
        XWPFTemplate.compile(dirPath + "/" + uid + "_Complete.docx", config).render(datas);
    // 写入表格中
    template.writeToFile(dirPath + "/" + uid + "_Complete.docx");
  }

用到的一些实体类

// PageData
public class PageData {
  @Name("detail_table")
  private NdrwhkhzbData ndrwhkhzbData;

  public NdrwhkhzbData getNdrwhkhzbData() {
    return ndrwhkhzbData;
  }

  public void setNdrwhkhzbData(NdrwhkhzbData ndrwhkhzbData) {
    this.ndrwhkhzbData = ndrwhkhzbData;
  }
}

// NdrwhkhzbData
public class NdrwhkhzbData {
  private List<RowRenderData> ndrwhkhzbs;

  public List<RowRenderData> getNdrwhkhzbs() {
    return ndrwhkhzbs;
  }

  public void setNdrwhkhzbs(List<RowRenderData> ndrwhkhzbs) {
    this.ndrwhkhzbs = ndrwhkhzbs;
  }
}

4. 将编辑好的Word转为pdf格式(jacob)

这里将word转为pdf时需要用到jacob, 这里需要将jacob的dll文件放到jdk和jre的bin目录下, 下载的jacob中dll文件一般为两个版本, X86为32位, X64为64位, 根据自己安装的jdk版本添加所对应的dll文件

  /*
	* 将 .docx 转换为 .pdf
	*/
  ActiveXComponent app = null;
  String wordFile = dirPath + "/" + uid + "_Complete.docx";
  String pdfFile = dirPath + "/" + dirName + ".pdf";

  System.out.println("开始转换...");
  // 开始时间
  long start = System.currentTimeMillis();
  try {
    // 打开word
    app = new ActiveXComponent("Word.Application");
    // 设置word不可见,很多博客下面这里都写了这一句话,其实是没有必要的,因为默认就是不可见的,如果设置可见就是会打开一个word文档,对于转化为pdf明显是没有必要的
    //app.setProperty("Visible", false);
    // 获得word中所有打开的文档
    Dispatch documents = app.getProperty("Documents").toDispatch();
    System.out.println("打开文件: " + wordFile);
    // 打开文档
    Dispatch documentP = Dispatch.call(documents, "Open", wordFile, false, true).toDispatch();
    // 如果文件存在的话,不会覆盖,会直接报错,所以我们需要判断文件是否存在
    File target = new File(pdfFile);
    if (target.exists()) {
      target.delete();
    }
    System.out.println("另存为: " + pdfFile);
    // 另存为,将文档报错为pdf,其中word保存为pdf的格式宏的值是17
    Dispatch.call(documentP, "SaveAs", pdfFile, 17);
    // 关闭文档
    Dispatch.call(documentP, "Close", false);
    // 结束时间
    long end = System.currentTimeMillis();
    System.out.println("转换成功,用时:" + (end - start) + "ms");
  } catch (Exception e) {
    e.getMessage();
    System.out.println("转换失败" + e.getMessage());
  } finally {
    // 关闭office
    app.invoke("Quit", 0);
  }

5. 通过lo流将生成好的文件传到浏览器下载

/*
 * 下载pdf
 */
String fileName = dirName + ".pdf";
File file = new File(dirPath + "/" + fileName);
if (file.exists()) {
  BufferedInputStream bis = null;
  FileInputStream fis = null;
  try {
    response.setHeader("Content-disposition", "attachment; filename=" + fileName);
    byte[] buff = new byte[2048];
    fis = new FileInputStream(file);
    bis = new BufferedInputStream(fis);
    OutputStream os = response.getOutputStream();
    int i = bis.read(buff);
    while (i != -1) {
      os.write(buff, 0, i);
      i = bis.read(buff);
    }
    os.close();
  } catch (Exception e) {
    e.printStackTrace();
  } finally {
    assert fis != null;
    fis.close();
    assert bis != null;
    bis.close();
  }
}

6. 最后的Controller整体代码

package org.example.controller;

import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.data.Includes;
import com.deepoove.poi.data.RowRenderData;
import com.deepoove.poi.data.Rows;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import org.example.entity.*;
import org.example.service.*;
import org.example.utils.DetailTablePolicy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.util.DigestUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 创建pdf控制器
 *
 * @author: yoojyn
 * @data: 2021/1/11
 */
@Controller
@RequestMapping("/createPdfController")
public class CreatePdfController {
  @Autowired
  private IKtfmService ktfmService;
  @Autowired
  private IKtjbxxService ktjbxxService;
  @Autowired
  private IKtbyxfxService ktbyxfxService;
  @Autowired
  private IZtmbhkhzbService ztmbhkhzbService;
  @Autowired
  private INdrwhkhzbService ndrwhkhzbService;
  @Autowired
  private IKtjfysjsmService ktjfysjsmService;
  @Autowired
  private IXjxhkxxfxService xjxhkxxfxService;

  /**
   * 生成word文件
   *
   * @param session 作用域
   */
  @Scope("prototype")
  @ResponseBody
  @RequestMapping("/createPdf")
  public void createPdf(HttpSession session, HttpServletResponse response) {
    // 获取当前用户id
    Userinfo loginedUser = (Userinfo) session.getAttribute("loginedUser");
    Integer uid = loginedUser.getUid();
    String dirName = DigestUtils.md5DigestAsHex((uid + "_国家重大专项任务合同申报").getBytes());
    String dirPath = "D:/" + dirName;
    String abPath = new File("").getAbsolutePath() + "/src/main/resources";

    try {
      // 创建用于存储中间文件的文件夹
      new File(dirPath).mkdirs();
      // 创建用于存储数据的map集合
      Map<String, Object> map = new HashMap<>();
      // 获取封面数据
      createKtfm(uid, map);
      // 获取基本信息数据
      createJbxx(uid, map);
      // 获取必要性分析
      createByxfx(uid, map);
      // 获取总体目标和考核指标
      createZtmbhkhzb(uid, map);
      // 获取经费预算及说明
      createJfysjsm(uid, map);
      // 查询附件
      XjxhkxxfxEntity xjxhkxxfxEntity = xjxhkxxfxService.selectXjxhkxxfxByUid(uid);
      // 设置下一步处理表格要用到的标签
      map.put("page9",
          Includes.ofLocal(abPath + "/static/file/upload/" + xjxhkxxfxEntity.getFilename()).create());
      map.put("detail_table", "{{detail_table}}");
      // 填充文档
      XWPFTemplate template = XWPFTemplate.compile(abPath + "/static/file/moban/moban.docx").render(map);
      // 输出文档
      template.writeAndClose(new FileOutputStream(dirPath + "/" + uid + "_Complete.docx"));
      // 操作年度任务和考核指标表
      createNdrwhkhzb(uid, dirPath);
    } catch (IOException e) {
      e.printStackTrace();
    }

    try {
      /*
       * 将 .docx 转换为 .pdf
       */
      ActiveXComponent app = null;
      String wordFile = dirPath + "/" + uid + "_Complete.docx";
      String pdfFile = dirPath + "/" + dirName + ".pdf";

      System.out.println("开始转换...");
      // 开始时间
      long start = System.currentTimeMillis();
      try {
        // 打开word
        app = new ActiveXComponent("Word.Application");
        // 设置word不可见,很多博客下面这里都写了这一句话,其实是没有必要的,因为默认就是不可见的,如果设置可见就是会打开一个word文档,对于转化为pdf明显是没有必要的
        //app.setProperty("Visible", false);
        // 获得word中所有打开的文档
        Dispatch documents = app.getProperty("Documents").toDispatch();
        System.out.println("打开文件: " + wordFile);
        // 打开文档
        Dispatch documentP = Dispatch.call(documents, "Open", wordFile, false, true).toDispatch();
        // 如果文件存在的话,不会覆盖,会直接报错,所以我们需要判断文件是否存在
        File target = new File(pdfFile);
        if (target.exists()) {
          target.delete();
        }
        System.out.println("另存为: " + pdfFile);
        // 另存为,将文档报错为pdf,其中word保存为pdf的格式宏的值是17
        Dispatch.call(documentP, "SaveAs", pdfFile, 17);
        // 关闭文档
        Dispatch.call(documentP, "Close", false);
        // 结束时间
        long end = System.currentTimeMillis();
        System.out.println("转换成功,用时:" + (end - start) + "ms");
      } catch (Exception e) {
        e.getMessage();
        System.out.println("转换失败" + e.getMessage());
      } finally {
        // 关闭office
        app.invoke("Quit", 0);
      }

      /*
       * 下载pdf
       */
      String fileName = dirName + ".pdf";
      File file = new File(dirPath + "/" + fileName);
      if (file.exists()) {
        BufferedInputStream bis = null;
        FileInputStream fis = null;
        try {
          response.setHeader("Content-disposition", "attachment; filename=" + fileName);
          byte[] buff = new byte[2048];
          fis = new FileInputStream(file);
          bis = new BufferedInputStream(fis);
          OutputStream os = response.getOutputStream();
          int i = bis.read(buff);
          while (i != -1) {
            os.write(buff, 0, i);
            i = bis.read(buff);
          }
          os.close();
        } catch (Exception e) {
          e.printStackTrace();
        } finally {
          assert fis != null;
          fis.close();
          assert bis != null;
          bis.close();
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      delDir(new File(dirPath));
    }
  }

  /**
   * 删除文件夹
   *
   * @param file 文件夹对象
   */
  private void delDir(File file) {
    if (file.isFile()) {
      file.delete();
    }
    if (file.isDirectory()) {
      File[] files = file.listFiles();
      for (File f : files) {
        f.delete();
      }
      file.delete();
    }
  }

  /**
   * 储存经费预算及说明
   *
   * @param uid 用户id
   * @param map 储存数据的map集合
   */
  private void createJfysjsm(Integer uid, Map<String, Object> map) {
    // 根据用户编号查询经费预算及说明
    KtjfysjsmEntity ktjfysjsmEntity = ktjfysjsmService.getDatesByUid(uid);
    // 添加到map集合
    map.put("zjzyczzj", ktjfysjsmEntity.getZjzyczzj());
    map.put("zjdfczzj", ktjfysjsmEntity.getZjdfczzj());
    map.put("zjdwzczj", ktjfysjsmEntity.getZjdwzczj());
    map.put("zjqt", ktjfysjsmEntity.getZjqt());
  }

  /**
   * 操作年度任务和考核指标表
   *
   * @throws IOException 输入输出流异常
   */
  private void createNdrwhkhzb(Integer uid, String dirPath) throws IOException {
    PageData datas = new PageData();
    NdrwhkhzbData detailTable = new NdrwhkhzbData();
    List<RowRenderData> nds = new ArrayList<>();
    // 根据uid查询年度任务和考核指标数据
    List<NdrwhkhzbEntity> list = ndrwhkhzbService.selectNdrwhkhzbByUid(uid);
    for (NdrwhkhzbEntity ndrwhkhzbEntity : list) {
      RowRenderData rrd = Rows.of(ndrwhkhzbEntity.getNd(), ndrwhkhzbEntity.getNdrw(), ndrwhkhzbEntity.getNdkhzb()
          , ndrwhkhzbEntity.getZyrwdsjjd()).center().create();
      nds.add(rrd);
    }
    detailTable.setNdrwhkhzbs(nds);
    datas.setNdrwhkhzbData(detailTable);

    Configure config = Configure.builder().bind("detail_table", new DetailTablePolicy()).build();
    XWPFTemplate template =
        XWPFTemplate.compile(dirPath + "/" + uid + "_Complete.docx", config).render(datas);
    template.writeToFile(dirPath + "/" + uid + "_Complete.docx");
  }

  /**
   * 储存总体目标和考核指标
   *
   * @param uid 用户id
   * @param map 储存数据的map集合
   */
  private void createZtmbhkhzb(Integer uid, Map<String, Object> map) {
    // 根据用户编号查询总体目标和考核指标
    ZtmbhkhzbEntity ztmbhkhzbEntity = ztmbhkhzbService.selectZtmbhkhzbByUid(uid);
    // 添加到map集合
    map.put("page6", ztmbhkhzbEntity.getZtmbhkhzb());
  }

  /**
   * 储存必要性分析数据
   *
   * @param uid 用户id
   * @param map 储存数据的map集合
   */
  private void createByxfx(Integer uid, Map<String, Object> map) {
    // 根据用户编号查询必要性分析数据
    KtbyxfxEntityWithBLOBs ktbyxfxEntity = ktbyxfxService.selectKtbyxfxByUid(uid);
    // 添加到map集合
    map.put("page5_ktyzx", ktbyxfxEntity.getKtyzx());
    map.put("page5_ktysfgc", ktbyxfxEntity.getKtysf());
    map.put("page5_ktyq", ktbyxfxEntity.getKtyq());
  }

  /**
   * 储存基本信息数据
   *
   * @param uid 用户编号
   * @param map 储存数据的map集合
   */
  private void createJbxx(Integer uid, Map<String, Object> map) {
    // 根据用户编号查询基本信息数据
    KcjbxxEntity kcjbxxEntity = ktjbxxService.selectKtjbxxByUid(uid);
    // 添加到map集合
    map.put("page3_ktmc", kcjbxxEntity.getKtmc());
    map.put("page3_ktmj", kcjbxxEntity.getKtmj());
    map.put("page3_yjwcsj", kcjbxxEntity.getYjwcsj());
    map.put("page3_kyhdlx", kcjbxxEntity.getKthdlx());
    map.put("page3_yqcglx", kcjbxxEntity.getYqcglx());
    map.put("page3_dwmc", kcjbxxEntity.getDwmc());
    map.put("page3_dwxz", kcjbxxEntity.getDwxz());
    map.put("page3_txdz", kcjbxxEntity.getTxdz());
    map.put("page3_yzbm", kcjbxxEntity.getYzbm());
    map.put("page3_szdq", kcjbxxEntity.getSzdq());
    map.put("page3_dwzgbm", kcjbxxEntity.getDwzgbm());
    map.put("page3_lxdh", kcjbxxEntity.getLxdh());
    map.put("page3_zzjgdm", kcjbxxEntity.getZzjgdm());
    map.put("page3_czhm", kcjbxxEntity.getCzhm());
    map.put("page3_dwclsj", kcjbxxEntity.getDwclsj());
    map.put("page3_dzxx", kcjbxxEntity.getDzxx());
  }

  /**
   * 储存课题封面数据
   *
   * @param uid 用户编号
   * @param map 储存数据的map集合
   */
  private void createKtfm(Integer uid, Map<String, Object> map) {
    // 根据用户编号查询封面数据
    KtfmEntity ktfmEntity = ktfmService.selectKtfmByUid(uid);
    // 添加到map集合
    map.put("page1_zxmc", "5G总体及关键器件");
    map.put("page1_xmbh", "2016ZX03001_001");
    map.put("page1_xmmc", "新一代宽带无线移动通信网");
    map.put("page1_ktbh", "2016ZX03001_001_002");
    map.put("page1_ktmc", "5G高性能基站A/D、D/A转换器试验样片研发");
    map.put("page1_zrdw", "program_test");
    map.put("page1_ktzz", ktfmEntity.getKtfzr());
    map.put("page1_ktnx1", "2016-01-01");
    map.put("page1_ktnx2", "2017-12-31");
    map.put("page1_tbrq", "2020-12-28");
    map.put("page1_nian", "二一");
    map.put("page1_yue", "一");
  }

}

以上就是Java 实现word模板转为pdf的详细内容,更多关于Java word模板转为pdf的资料请关注我们其它相关文章!

(0)

相关推荐

  • java使用jacob.jar将word转pdf

    本文实例为大家分享了java利用jacob.jar将word转pdf的具体代码,供大家参考,具体内容如下 1.jacob.jar配置说明 JACOB 就是 JAVA-COM Bridge的缩写,提供自动化的访问com的功能,使用jacob.jar首先电脑要安装了office. 将jacob.jar jacob.jar导入到项目lib目录使用前,还要然后把jacob.bll放入C:\Windows\System32目录下,同时还要放入java/jdk/jre/bin目录下(选择bll文件的时候,如

  • Java实现Word/Pdf/TXT转html的示例

    引言: 最近公司在做一个教育培训学习及在线考试的项目,本人主要从事网络课程模块,主要做课程分类,课程,课件的创建及在线学习和统计的功能,因为课件涉及到多种类型,像视频,音频,图文,外部链接及文档类型.其中就涉及到一个问题,就是文档型课件课程在网页上的展示和学习问题,因为要在线统计学习的课程,学习的人员,学习的时长,所以不能像传统做法将文档下载到本地学习,那样就不受系统控制了,所以最终的方案是,在上传文档型课件的时候,将其文件对应的转换成HTML文件,以便在网页上能够浏览学习 下边主要针对word

  • java实现word文档转pdf并添加水印的方法详解

    本文实例讲述了java实现word文档转pdf并添加水印的方法.分享给大家供大家参考,具体如下: 前段时间,项目需要自动生成word文档,用WordFreeMarker生成word文档后,又要求生成的文档能在浏览器浏览,思来想去,把word文档转成pdf就好了,于是乎研究了一下. 将word文档转化为PDF是项目中常见的需求之一,目前主流的方法可以分为两大类,一类是利用各种Office应用进行转换,譬如Microsoft Office.WPS以及LiberOffice,另一种是利用各种语言提供的

  • java利用jacob将word转pdf

    本文实例为大家分享了java开发利用jacob将word转pdf的具体代码,供大家参考,具体内容如下 jacob 缺点:需要 window 环境,而且速度是最慢的需要安装 msofficeWord 以及 SaveAsPDFandXPS.exe ( word 的一个插件,用来把 word 转化为 pdf ) 开发流程: SaveAsPDFandXPS 下载地址 jacob 包下载地址: 1.先安装SaveAsPDFandXPS 2.下载 jacob 解压后存放路径: jacob.jar 放在 C:

  • Java使用jacob将微软office中word、excel、ppt转成pdf

    本文实例为大家分享了Java使用jacob将微软office文档转成pdf的具体代码,供大家参考,具体内容如下 在使用jacb前,我们需要去下载 jacob.jar 和 jacob-1.18-x64.dll 其次,我们需要将jacob-1.18-x64.dll放入到jdk的bin目录下才可以使用 第三,使用jacb之前,我们需要确保office能正常使用 如果你现在使用的是maven工程,那么不好意思,现在还没有发布正式的jacb资源文件,我们需要自定的maven依赖,如下: <dependen

  • Java实现Word/Pdf/TXT转html的实例代码

    引言: 最近公司在做一个教育培训学习及在线考试的项目,本人主要从事网络课程模块,主要做课程分类,课程,课件的创建及在线学习和统计的功能,因为课件涉及到多种类型,像视频,音频,图文,外部链接及文档类型.其中就涉及到一个问题,就是文档型课件课程在网页上的展示和学习问题,因为要在线统计学习的课程,学习的人员,学习的时长,所以不能像传统做法将文档下载到本地学习,那样就不受系统控制了,所以最终的方案是,在上传文档型课件的时候,将其文件对应的转换成HTML文件,以便在网页上能够浏览学习 下边主要针对word

  • java使用jacob实现word转pdf

    背景:日常开发ERP系统,会有一些工单或者合同之类需要填写打印.我们就会将其word模板来通过系统自动化填写并转换为PDF格式(PDF文件打印可保证文件质量,是一种通用的格式.文件不易去修改,比较稳定).所以我们将通过jacob来实现这些功能. 准备工作: 1.服务器需要安装office2007,因为我们就是调用这个来实现转换. 2.需要安装插件jacob,安装jacob-1.14.3-x86.dll到jdk\jdk1.7.0\jre\bin(你自己电脑安装的jdk) 3.需要使用jacob-1

  • Java实现Word/Excel/TXT转PDF的方法

    引言: 前段时间公司做的教育系统,系统需要实时记录用户学习课程的情况和时间,所以对一些除视频课程之外,对一些文本文档型课件同样如此,初次的方案是讲office相关类型的文件进行转换Html文件,然后展示对应的html文件,PC端差不多没问题了,但是个别文件再转换html之后,样式出现了错乱,即时做了编码转换处理,但是还是有个别乱码,最后改变方案,最后统一将文件转为pdf,然后通过流的方式在前端展示,其中包括Word Excel PPT TXT PDF等文件,代码如下: 备注:本来是可以直接展示p

  • JAVA读取PDF、WORD文档实例代码

    读取PDF文件jar引用 <dependency> <groupid>org.apache.pdfbox</groupid> pdfbox</artifactid> <version>1.8.13</version> </dependency> 读取WORD文件jar引用 <dependency> <groupid>org.apache.poi</groupid> poi-scratch

  • Java 实现word模板转为pdf

    1. pom相关依赖 工具poi-tl (操作word文档模板) + jacob (将操作后的word模板转为pdf) <!-- poi-tl的pom依赖 --> <dependency> <groupId>com.deepoove</groupId> <artifactId>poi-tl</artifactId> <version>1.9.1</version> </dependency> <

  • Java将Word文件转为OFD文件

    目录 前言 1. Maven仓库下载导入. 2. 手动导入. 将Word转为OFD 结语 前言 通常在工作中比较常用到的Microsoft Word是属于国外的文档内容编辑软件,其编译技术均属国外.而OFD是一种我国的自主文档格式,在某些特定行业或企业的文档存储技术上是一种更为安全的选择.下面将以Java代码示例介绍如何将Word文档转换为OFD格式. Java代码环境 Intelli IDEA Spire.Doc for Java 4.12.1 Word文档 两种方法可在Java程序中导入ja

  • 使用Java语言将XML转为PDF的方法

    可扩展标记语言(XML)文件是一种标准的文本文件,它使用特定的标记来描述文档的结构以及其他特性.通过将XML转换为PDF,能够便于文件传输及共享.本文,将介绍通过Java代码来实现该格式转换的方法. 导入Jar 在程序中引入Free Spire.Doc for Java中的Spire.Doc.jar文件(该文件在lib文件夹下):如果需要通过Maven下载导入,可进行如下配置pom.xml: <repositories> <repository> <id>com.e-i

  • JavaScript+Java实现HTML页面转为PDF文件保存的方法

    需求是一个导出pdf的功能,多方奔走终于实现了,走了不少弯路,而且怀疑现在这个方法仍是弯的. 有个jsPDF 插件可以在前端直接生成pdf,很简便,但不支持IE. 前端: 首先引入  html2canvas.js html2canvas(document.body, { //截图对象 //此处可配置详细参数 onrendered: function(canvas) { //渲染完成回调canvas canvas.id = "mycanvas"; // 生成base64图片数据 var

  • java根据模板导出PDF的详细实现过程

    目录 题记: 一.需求 二.解决方案 三.实现功能 四.主要代码结构说明: 五.关键代码说明 1.模板配置 2.获取模板内容并填充数据 3.导出模板到PDF文件 4.测试工具类 六.生成效果图 七.遇到的坑 八.项目说明 九.整合到web项目中遇到的坑 总结 题记: 由于业务的需要,需要根据模板定制pdf文档,经测试根据模板导出word成功了:但是导出pdf相对麻烦了一点.两天的研究测试java导出PDF,终于成功了,期间走了不少弯路,今分享出来,欢迎大家有问题在此交流,与君共勉! 一.需求 根

  • Java通过Freemarker模板实现生成Word文件

    目录 1.  准备模板 2.  代码实现 3. PDF文件加水印 1.  准备模板 模板 + 数据 = 模型 1.将准备好的Word模板文件另存为.xml文件(PS:建议使用WPS来创建Word文件,不建议用Office) 2.将.xml文件重命名为.ftl文件 3.用文本编辑器打开.ftl文件,将内容复制出来,格式化一下,再覆盖原来的内容 (PS:格式化一下是为了方便查找并设置变量/占位符,当然设置好模板参数变量以后可以再压缩后再写会.ftl文件) 另外,强烈不建议在word文件中去编辑设置模

  • Java利用openoffice将doc、docx转为pdf实例代码

    本文研究的主要是Java编程利用openoffice将doc.docx转为pdf的实现代码,具体如下. 1. 需要用的软件 OpenOffice , JodConverter 2.启动OpenOffice的服务 我到网上查如何利用OpenOffice进行转码的时候,都是需要先用cmd启动一个soffice服务,启动的命令是:soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;". 但是实际上,对于我的项目,进行转

  • java通过PDF模板填写PDF表单

    本文实例为大家分享了java通过PDF模板填写PDF表单的具体代码,包括图片,供大家参考,具体内容如下 需要用到的java包: itext.jar.iTextAsian.jar的JAR包.这个包里面定义了与中文输出相关的一些文件. 编写的表单如下: import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.HashMap;

随机推荐

其他