当Excel文件中包含图片时转pdf
当Excel文件中包含图片时转pdf
excel文件转pdf时,有很多工具可以使用,但是我在实际运用过程中发现,如果excel文件包含图片时,并不能是吸纳很好的效果。我的解决思路是:excel中的非图片(文字)部分和图片部分分开来转。以下是我的代码,需要用到的jar包为:pdfbox-app-2.0.22.jar、Spire.Xls.jar
import java.awt.Dimension;
import java.awt.geom.Dimension2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.imageio.ImageIO;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import com.spire.xls.ExcelPicture;
import com.spire.xls.Workbook;
import com.spire.xls.Worksheet;
import com.spire.xls.collections.PicturesCollection;
public class textMain {
/*
* excelFilePath 为excel文件名称,不包含路径
* tempPath 为文件夹路径
*/
public void formatPDF(String excelFilePath, String tempPath) throws Exception {
List<String> files = new ArrayList<String>(); try {if(excelFilePath != null && !excelFilePath.equals("")) {Workbook workbook = new Workbook();workbook.loadFromFile(tempPath+excelFilePath);Worksheet sheet = workbook.getWorksheets().get(0);PicturesCollection pcs = sheet.getPictures();String pdfFileName = excelFilePath.replace("xlsx", "pdf");if(pcs == null || pcs.size()<=0) {//不包含图片的情况sheet.saveToPdf(tempPath+pdfFileName);files.add(tempPath+pdfFileName);}else {int pcsSize = pcs.size();ExcelPicture pic = null;BufferedImage loImage = null;String uuid = UUID.randomUUID().toString();for(int i=0;i<pcsSize;i++) {pic = sheet.getPictures().get(i);loImage = pic.getPicture();ImageIO.write(loImage,"png",new File(tempPath+uuid+"_"+i+".png"));//保存图片pic.remove();//excel删除图片files.add(tempPath+uuid+"_"+i+".png");}String removeImagePath = tempPath+uuid+"-removeImage.xlsx";files.add(removeImagePath);//保存到excel,去除图片workbook.saveToFile(removeImagePath);workbook.dispose();//将删除图片的excel文件转为pdfworkbook = new Workbook();workbook.loadFromFile(removeImagePath);workbook.getConverterSetting().setSheetFitToPage(true);sheet = workbook.getWorksheets().get(0);removeImagePath = removeImagePath.replace("xlsx", "pdf");sheet.saveToPdf(removeImagePath);files.add(removeImagePath);workbook.dispose();//pdf插入图片File file = new File(removeImagePath);PDDocument document = PDDocument.load(file);PDPage page = document.getPage(0);PDRectangle pdr = page.getMediaBox();float pdrH = pdr.getHeight();float pdrW = pdr.getWidth();PDRectangle pdrI = null;PDPageContentStream contents = null;for(int i=0;i<pcsSize;i++) {PDImageXObject pdImage = PDImageXObject.createFromFile(tempPath+uuid+"_"+i+".png",document);pdrI = new PDRectangle(pdImage.getWidth(),pdImage.getHeight());page = new PDPage();page.setMediaBox(pdrI);contents = new PDPageContentStream(document, page);contents.drawImage(pdImage, 0, 0);contents.close();document.addPage(page); }document.save(tempPath+pdfFileName);document.close();}}}catch(Exception e) {e.printStackTrace();}finally {//操作完成后,将图片和中间excel删除File f = null;for(int i=0;i<files.size();i++) {f = new File(files.get(i));if(f.exists()) {f.delete();}}}
}
}
当Excel文件中包含图片时转pdf相关推荐
- 压缩 Excel 文件中的图片
压缩 Excel 文件中的图片 1. 图片工具 -> 格式 打开 Excel 文件,选中任一图片.查看图片工具 -> 格式. 2. 压缩图片 不选择 仅用于所选图片,就是默认压缩所有图片. ...
- c# excel导出png_批量导出Excel文件中的图片,用VBA代码其实很简单
本次案例来自悟空问答网友提问,之前由于时间原因,回复比较简单没有给出具体实现方法,今天花时间整理写成图文,希望小伙伴们都可以学会.@沉默的生物钟 实际问题 一.数据模拟--素材准备 为了更加真实的还原 ...
- Python批量提取Excel文件中的图片
推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),董付国,清华大学出版社,2020年6月第1次印刷,2021年7月第9次印刷,山东省一流本科 ...
- 给原有的excel文件中插入图片
public static void main(String[] args) {FileOutputStream fileOut = null;BufferedImage bufferImg = nu ...
- freemarker 导出word文件中包含图片
最近做的工作中出现的问题记录 在使用freemarker导出word文件的时候,使用wps做模板,出现的情况与网上的情况不同. 在查看网上的例子和资料的时候,模板中的样子是类似于这样的 <w:p ...
- 如何在另一个JavaScript文件中包含一个JavaScript文件?
JavaScript中是否有类似于CSS中@import的内容,可让您在另一个JavaScript文件中包含一个JavaScript文件? #1楼 而不是在运行时添加,而是使用脚本在上传之前进行串联. ...
- layui数据表格中包含图片的处理方式
layui数据表格中包含图片时,图片可能显示不全. 搜索后网上的解决方法: <style>.layui-table-cell {height: 100%;max-width: 100%;} ...
- python docx 合并文档 图片_Python检查Word文件中包含特定关键字的所有页码
推荐教材:<Python程序设计基础与应用>(ISBN:9787111606178),董付国,机械工业出版社图书详情:配套资源:用书教师可以联系董老师获取教学大纲.课件.源码.教案.考试系 ...
- Excel表格怎么批量导出图片将文件中的图片导出到文件夹中
这几天一直没写博文,但是为了让大山的孩子,能够像京城的富二代一样,可以开开心心公公平平地享受学习excel的权利,因此决定今天继续写,今天主要来谈谈excel图片批量导出,关于excel表格怎么批量导 ...
最新文章
- BGA封装芯片手工焊接攻略
- log_archive_dest_1设置报错
- JavaScript 回调(callback)函数
- Leetcode03
- hdu 5179(bfs打表+二分)
- php json获取get请求,PHP简单的Curl的Get请求和Curl的Post请求和file_get_contents的Get请求获取接口JSON数据...
- 二叉链表之寻找两节点的最近公共祖先☆
- XCODE快捷键和功能汇总篇(不断更新)
- 自定义video控制栏,移动端可行
- web.xml 详解
- IDEA下载安装,以及汉化
- 查看各大网站服务器操作系统
- 【神经网络架构】Pyramid Convolution(金字塔卷积模块)论文笔记
- 原生js实现简易版消消乐
- 1.企业信息化战略与实施
- 使用john 1.9 破解centos7密码
- 浅谈模式 - 装饰者模式
- 高斯消元法列主消元法
- 商业计划书怎么写 写商业计划书流程 商业计划书要求
- 写在《Programming Windows, 6th Edition》译文之前