Word转pdf,再转图片插入PDF
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的更多相关文章
- 把文档转化为PDF再用PS处理PDF
最近工作中遇到类似下面这样的一个文档. 文档当前设置的是A4 横版打印,可以明显的看到打印的分界线,这样直接打印出来,是没有下面那行“bbbbbbbbbbbbbbbbbb”的,怎么办?可以通过 页面布 ...
- word 转pdf 再转图片--用在轻社群发文章
#! /usr/bin/env python # -*- coding: utf-8 -*- import fitz import glob import os from win32com.clien ...
- 压缩图片或pdf
压缩图片或pdf { /// <summary> /// 压缩图片或pdf大小的Level /// </summary> public enum ReduceSizeLevel ...
- Aspose.Pdf合并图片到PDF文件
将图片和PDF文件合成为新的PDF文件,可以先将图片转换为PDF文件, 然后合成PDF即可, 将图片转换成PDF文件有如下方法: Aspose.Pdf.Document Aspose.Pdf.Gene ...
- Java 添加、提取PDF中的图片
Spire.Cloud.SDK for Java提供了PdfImagesApi接口可用于添加图片到PDF文档addImage().提取PDF中的图片extractImages(),具体操作步骤和Jav ...
- 【使用Itext处理PDF文档(新建PDF文件、修改PDF文件、PDF中插入图片、将PDF文件转换为图片)】
iText简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转 ...
- CAD转PDF再由pdf转jpg图片
免费的PDF转JPG图片 https://www.gaitubao.com/pdf-to-jpg/
- word和.txt文件转html 及pdf文件, 使用poi jsoup itext心得
word和.txt文件转html 及pdf文件, 使用poi jsoup itext心得本人第一次写博客,有上面不足的或者需要改正的希望大家指出来,一起学习交流讨论.由于在项目中遇到了这一个问题,在 ...
- 批量将网页转换成图片或PDF文档技巧分享
工作中我们有时要将一些批量的网页转换成图片或者PDF文档格式,尽管多数浏览器具有滚动截屏或者打印输出PDF文档功能.可是假设有几十上百张网页须要处理,那也是要人命的.所以我一直想找一款可以批量处理该工 ...
随机推荐
- Java正则表达式基础知识及实例说明
众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学习及使用正则表达式,便成了解决这一矛 ...
- AJ学IOS 之CoreLocation指南针小应用
AJ分享,必须精品 一:效果图示 简单的用到CoreLocation获取方位做的指南针小应用 二:制作思路 具体用到了CoreLocation相关的知识,请看上一篇博客有写 然后获取方向不需要进行授权 ...
- CSS躬行记(6)——滤镜
滤镜(filter)可改造元素的视觉呈现,CSS内置的滤镜有10种,通过SVG文件还能自定义滤镜. 一.调色滤镜 调色滤镜可控制元素的模糊.颜色.亮度等变化,并且多个滤镜可组合在一起使用.这些滤镜大部 ...
- 疲劳驾驶打瞌睡?python保障您的驾驶安全
道路千万条,安全第一条!疲劳驾驶可谓交通事故几大罪魁祸首之一,根据美国一项研究显示,司机睡眠不足4小时,交通事故肇事几率等同于醉驾. 为了减少疲劳驾驶现象,驾驶员疲劳检测应运而生.这是一项安全技术,可 ...
- stand up meeting 12/23/2015
part 组员 工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云 基本完成单词本显示页面的设计和实现 4 完善页面切换 ...
- 计算机系统基础学习笔记(1)-基本GCC,objdump,GBD命令的使用
基本GCC命令的使用 GCC是一套由GNU项目开发的编程语言编译器,可处理C语言. C++.Fortran.Pascal.Objective-C.Java等等.GCC通常是 跨平台软件的编译器首选.g ...
- jmeter并发时生成唯一变量
vars.put("partnerOrderId","ZS"+Thread.currentThread().getId()+System.currentTime ...
- SpringCloud(二)笔记之Eureka
Eureka包含两个组件:Eureka Server和Eureka Client Eureka Server:提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册 Eureka ...
- Asp.Net Core 3.1 学习3、Web Api 中基于JWT的token验证及Swagger使用
1.初始JWT 1.1.JWT原理 JWT(JSON Web Token)是目前最流行的跨域身份验证解决方案,他的优势就在于服务器不用存token便于分布式开发,给APP提供数据用于前后端分离的项目. ...
- 2019-2020-1 20199303《Linux内核原理与分析》第九周作业
进程的切换和一般执行过程 知识总结 操作系统原理中介绍了大量进程调度算法,这些算法从实现的角度看仅仅是从运行队列中选择一个新进程,选择的过程中运用了不同的策略而已. 对于理解操作系统的工作机制,反而是 ...