WORD转PDF所需jar包:

https://yangtaotao.lanzous.com/ice1jlc

PDF转图片所需jar包:

https://yangtaotao.lanzous.com/ice169c

由于项目中之前就有,所以直接照搬。word转pdf,使用的是ASPOSE.word ,ASPOSE.word的licence需要收费

package com.biolims.report.service;

import java.io.FileOutputStream;
import java.io.InputStream; import com.aspose.words.Document;
import com.aspose.words.License;
import com.aspose.words.SaveFormat; /**
*
* 由于ASPOSE比较吃内存,操作大一点的文件就会堆溢出,所以请先设置好java虚拟机参数:-Xms512m -Xmx512m(参考值)<br>
* 如有疑问,请在CSDN下载界面留言,或者联系QQ569925980<br>
*
* @author Spark
*
*/
public class Test { /**
* 获取license
*
* @return
*/
public static boolean getLicense() {
boolean result = false;
try {
InputStream is = Test.class.getClassLoader().getResourceAsStream("\\license.xml");
License aposeLic = new License();
aposeLic.setLicense(is);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public static void savedocx(String inPath, String outPath) {
if (!getLicense()) {
return;
} try {
long old = System.currentTimeMillis();
Document doc = new Document(inPath);// 原始word路径 String pdfFile = outPath;
FileOutputStream fileOS = new FileOutputStream(pdfFile); doc.save(fileOS, SaveFormat.PDF); long now = System.currentTimeMillis();
System.out.println("共耗时:" + ((now - old) / 1000.0) + "秒");
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 支持DOC, DOCX, OOXML, RTF, HTML, OpenDocument, PDF, EPUB, XPS, SWF等相互转换<br>
*
* @param args
*/
public static void main(String[] args) {
// 验证License
if (!getLicense()) {
return;
} try {
long old = System.currentTimeMillis();
Document doc = new Document("D:\\home\\lims\\报告管理需求 - 20190905.docx");// 原始word路径 String pdfFile = "D:\\home\\ff.pdf";
FileOutputStream fileOS = new FileOutputStream(pdfFile); doc.save(fileOS, SaveFormat.PDF); long now = System.currentTimeMillis();
System.out.println("共耗时:" + ((now - old) / 1000.0) + "秒");
} catch (Exception e) {
e.printStackTrace();
}
}
}

调用结合我之前发的导出word的文章

/**
* 根据模板生成word
*
* @param path2
* 模板的路径
* @param params
* 需要替换的参数
* @param tableList
* 需要插入的参数,里面的list为每个表的数据
* @param fileName
* 生成word文件的文件名
* @param response
*/
public FileInfo getWord(String path2, Map<String, Object> params, List<List<String[]>> tableList, String fileName,
HttpServletResponse response) throws Exception {
File file = new File(path2);
InputStream is = new FileInputStream(file);
CustomXWPFDocument doc = new CustomXWPFDocument(is);
this.replaceInPara(doc, params); // 替换文本里面的变量
this.replaceInTable(doc, params, tableList); // 替换表格里面的变量 // OutputStream os = response.getOutputStream();
// response.setContentType("application/x-download");
// response.setHeader("Content-disposition", "attachment; filename=" + fileName);
// doc.write(os); SimpleDateFormat sdf = new SimpleDateFormat("yyMMddHHmmss");
String formFile = ConfigFileUtil.getValueByKey("file.report.form.path");
File deskFile = new File(formFile, "report" + sdf.format(new Date()) + ".docx");
String path = deskFile.getPath();
// 写到目标文件
OutputStream output = new FileOutputStream(deskFile);
// document.write(output);
doc.write(output);
output.close();
String name = sdf.format(new Date());
String newPdfPath=formFile+"report" + name + ".pdf"; //新生成的pdf文件路径
Test.savedocx(path, newPdfPath); String newImgPdfPath = pdf2Image(newPdfPath); File p = new File(deskFile.getPath());
FileInfo fi = new FileInfo(); fi.setFileName("report" + "" + name + ".pdf");
fi.setUploadTime(new Date());
fi.setOwnerModel("ReportItem");
fi.setUseType("0");
fi.setModelContentId("");
fi.setFileType("pdf");
fi.setFilePath(newImgPdfPath); this.close(is); return fi; }

pdf转图片,再插入pdf,使PDF就算用专业软件也不能打开,但是我们领导觉得可能多页会出现问题,但是还没有好的解决办法,如果有了请评论告知,不胜感激

public static String pdf2Image(String PdfFilePath) throws Exception {
File file = new File(PdfFilePath);
PdfDocument template_writer_pdfdoc = new PdfDocument(new PdfReader(PdfFilePath));
Rectangle size=template_writer_pdfdoc.getFirstPage().getPageSize();
int pages = template_writer_pdfdoc.getNumberOfPages();
PDDocument pdDocument;
String pdfPath="";
try {
String imgPDFPath = file.getParent();
int dot = file.getName().lastIndexOf('.');
String imagePDFName = file.getName().substring(0, dot); // 获取图片文件名
pdDocument = PDDocument.load(file);
PDFRenderer renderer = new PDFRenderer(pdDocument);
/* dpi越大转换后越清晰,相对转换速度越慢 */
StringBuffer imgFilePath = null;
List<String> pathList=new ArrayList<String>();
for (int i = 0; i < pages; i++) {
String imgFilePathPrefix = imgPDFPath + File.separator + imagePDFName;
imgFilePath = new StringBuffer();
imgFilePath.append(imgFilePathPrefix);
imgFilePath.append("_");
imgFilePath.append(String.valueOf(i + 1));
imgFilePath.append(".jpg");
File dstFile = new File(imgFilePath.toString());
BufferedImage image = renderer.renderImageWithDPI(i, 300);
ImageIO.write(image, "jpg", dstFile);
pathList.add(imgFilePath.toString());
} template_writer_pdfdoc.close();
File file2 = new File(imgPDFPath + File.separator + file.getName());
// 第一步:创建一个document对象。
com.itextpdf.text.Document document = new com.itextpdf.text.Document();
document.setMargins(0, 0, 0, 0);
// 第二步:
// 创建一个PdfWriter实例,
com.itextpdf.text.pdf.PdfWriter.getInstance(document, new FileOutputStream(file2));
// 第三步:打开文档。 document.open();
for(String s:pathList) {
com.itextpdf.text.Image img = com.itextpdf.text.Image.getInstance(s);
img.setAlignment(com.itextpdf.text.Image.ALIGN_CENTER);
img.scaleAbsoluteHeight(size.getHeight());
img.scaleAbsoluteWidth(size.getWidth());
// 根据图片大小设置页面,一定要先设置页面,再newPage(),否则无效
document.setPageSize(new com.itextpdf.text.Rectangle(size.getWidth(), size.getHeight()));
document.newPage();
document.add(img);
}
document.close();
pdfPath=imgPDFPath + File.separator + file.getName();
} catch (IOException e) {
e.printStackTrace();
}finally { }
return pdfPath;
}

Word转pdf,再转图片插入PDF的更多相关文章

  1. 把文档转化为PDF再用PS处理PDF

    最近工作中遇到类似下面这样的一个文档. 文档当前设置的是A4 横版打印,可以明显的看到打印的分界线,这样直接打印出来,是没有下面那行“bbbbbbbbbbbbbbbbbb”的,怎么办?可以通过 页面布 ...

  2. word 转pdf 再转图片--用在轻社群发文章

    #! /usr/bin/env python # -*- coding: utf-8 -*- import fitz import glob import os from win32com.clien ...

  3. 压缩图片或pdf

    压缩图片或pdf { /// <summary> /// 压缩图片或pdf大小的Level /// </summary> public enum ReduceSizeLevel ...

  4. Aspose.Pdf合并图片到PDF文件

    将图片和PDF文件合成为新的PDF文件,可以先将图片转换为PDF文件, 然后合成PDF即可, 将图片转换成PDF文件有如下方法: Aspose.Pdf.Document Aspose.Pdf.Gene ...

  5. Java 添加、提取PDF中的图片

    Spire.Cloud.SDK for Java提供了PdfImagesApi接口可用于添加图片到PDF文档addImage().提取PDF中的图片extractImages(),具体操作步骤和Jav ...

  6. 【使用Itext处理PDF文档(新建PDF文件、修改PDF文件、PDF中插入图片、将PDF文件转换为图片)】

    iText简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转 ...

  7. CAD转PDF再由pdf转jpg图片

    免费的PDF转JPG图片 https://www.gaitubao.com/pdf-to-jpg/

  8. word和.txt文件转html 及pdf文件, 使用poi jsoup itext心得

    word和.txt文件转html 及pdf文件, 使用poi jsoup  itext心得本人第一次写博客,有上面不足的或者需要改正的希望大家指出来,一起学习交流讨论.由于在项目中遇到了这一个问题,在 ...

  9. 批量将网页转换成图片或PDF文档技巧分享

    工作中我们有时要将一些批量的网页转换成图片或者PDF文档格式,尽管多数浏览器具有滚动截屏或者打印输出PDF文档功能.可是假设有几十上百张网页须要处理,那也是要人命的.所以我一直想找一款可以批量处理该工 ...

随机推荐

  1. JMock2入门

    说明:学习JMock官网的Getting Started的笔记 例子:为测试publish/subscribe发布/订阅信息系统的publisher(发布者),mock subscriber(订阅者) ...

  2. Go语言讲解深拷贝与浅拷贝

    我们在开发中会经常的把一个变量复制给另一个变量,那么这个过程,可能是深浅拷贝,那么今天帮大家区分一下这两个拷贝的区别和具体的区别. 一.概念 1.深拷贝(Deep Copy): 拷贝的是数据本身,创造 ...

  3. python成功安装torch模块

    最近项目要使用到torch模块,但是在安装的过程中发现torch直接使用pip install安装是安装不成功的.然后就百度,发现并没有什么卵用,所以就google一番,不禁感叹,这种新的东西,还是外 ...

  4. Extjs入门——环境配置

    Extjs框架作为一个07年就上线的框架,虽然与现在的框架对比,显得十分臃肿.但是在针对企业内部引用系统上,它依旧能发挥出不错的效果.现在我接触到了Extjs,所以我准备写一个入门框架,简单的介绍Ex ...

  5. 068.Python框架Django之DRF视图集使用

    一 视图集与路由的使用 使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中: list() 提供一组数据 retrieve() 提供单个数据 create() 创建数据 update() ...

  6. vue2.x学习笔记(十)

    接着前面的内容:https://www.cnblogs.com/yanggb/p/12584237.html. 事件处理 使用javascript当然少不了事件处理,即使是vue也不会例外. 监听事件 ...

  7. MyBatis model、xml、mapper 自动生成,附源码

    Mybatis 代码自动生成 model.xml.mapper 代码结构图 代码地址 https://github.com/shootercheng/codegen 需要修改的地方见 readme

  8. C# LINQ查询之对象

    LINQ是一组查询技术的统称,其主要思想是将各种查询功能直接集成到C#语言中,可以对 对象.XML文档.SQL数据库.外部应用程序等进行操作. 这里面讲的简单的几个子句, 必须以from子句开头,以s ...

  9. golang依赖管理

    目录 使用GOPATH管理依赖 临时GOPATH 依赖查找路径 使用GOVENDER管理依赖 使用GO111MODULE管理依赖 Usage 常用命令列表 不常用命令 使用示例 开启GO111MODU ...

  10. 深入分析Redis的主从复制机制

    一.前言   最近由于疫情影响,时间比较多,所以开始学习之前一直想学,但是却没时间学的Redis.这两天研究了一下Redis的持久化以及主从复制机制,现在已经很晚了,就不多废话了.这篇博客就来谈一谈R ...