当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相关推荐

  1. 压缩 Excel 文件中的图片

    压缩 Excel 文件中的图片 1. 图片工具 -> 格式 打开 Excel 文件,选中任一图片.查看图片工具 -> 格式. 2. 压缩图片 不选择 仅用于所选图片,就是默认压缩所有图片. ...

  2. c# excel导出png_批量导出Excel文件中的图片,用VBA代码其实很简单

    本次案例来自悟空问答网友提问,之前由于时间原因,回复比较简单没有给出具体实现方法,今天花时间整理写成图文,希望小伙伴们都可以学会.@沉默的生物钟 实际问题 一.数据模拟--素材准备 为了更加真实的还原 ...

  3. Python批量提取Excel文件中的图片

    推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),董付国,清华大学出版社,2020年6月第1次印刷,2021年7月第9次印刷,山东省一流本科 ...

  4. 给原有的excel文件中插入图片

    public static void main(String[] args) {FileOutputStream fileOut = null;BufferedImage bufferImg = nu ...

  5. freemarker 导出word文件中包含图片

    最近做的工作中出现的问题记录 在使用freemarker导出word文件的时候,使用wps做模板,出现的情况与网上的情况不同. 在查看网上的例子和资料的时候,模板中的样子是类似于这样的 <w:p ...

  6. 如何在另一个JavaScript文件中包含一个JavaScript文件?

    JavaScript中是否有类似于CSS中@import的内容,可让您在另一个JavaScript文件中包含一个JavaScript文件? #1楼 而不是在运行时添加,而是使用脚本在上传之前进行串联. ...

  7. layui数据表格中包含图片的处理方式

    layui数据表格中包含图片时,图片可能显示不全. 搜索后网上的解决方法: <style>.layui-table-cell {height: 100%;max-width: 100%;} ...

  8. python docx 合并文档 图片_Python检查Word文件中包含特定关键字的所有页码

    推荐教材:<Python程序设计基础与应用>(ISBN:9787111606178),董付国,机械工业出版社图书详情:配套资源:用书教师可以联系董老师获取教学大纲.课件.源码.教案.考试系 ...

  9. Excel表格怎么批量导出图片将文件中的图片导出到文件夹中

    这几天一直没写博文,但是为了让大山的孩子,能够像京城的富二代一样,可以开开心心公公平平地享受学习excel的权利,因此决定今天继续写,今天主要来谈谈excel图片批量导出,关于excel表格怎么批量导 ...

最新文章

  1. BGA封装芯片手工焊接攻略
  2. log_archive_dest_1设置报错
  3. JavaScript 回调(callback)函数
  4. Leetcode03
  5. hdu 5179(bfs打表+二分)
  6. php json获取get请求,PHP简单的Curl的Get请求和Curl的Post请求和file_get_contents的Get请求获取接口JSON数据...
  7. 二叉链表之寻找两节点的最近公共祖先☆
  8. XCODE快捷键和功能汇总篇(不断更新)
  9. 自定义video控制栏,移动端可行
  10. web.xml 详解
  11. IDEA下载安装,以及汉化
  12. 查看各大网站服务器操作系统
  13. 【神经网络架构】Pyramid Convolution(金字塔卷积模块)论文笔记
  14. 原生js实现简易版消消乐
  15. 1.企业信息化战略与实施
  16. 使用john 1.9 破解centos7密码
  17. 浅谈模式 - 装饰者模式
  18. 高斯消元法列主消元法
  19. 商业计划书怎么写 写商业计划书流程 商业计划书要求
  20. 写在《Programming Windows, 6th Edition》译文之前

热门文章

  1. PHP与FLASH之间的交互
  2. HTML屏蔽F12、右键、开发者工具、审查元素
  3. Soundiron Bontastic Vintage Italian Chord Organ 复古意大利和弦风琴
  4. 知识图谱预训练数据转化(附源码)
  5. 谈iphone电话短信增强工具kuaidail软件的实现
  6. Two Arrays
  7. 谁是第一个计算机系?
  8. pandas学习之pandas基础
  9. 五德凤雏-集成微模块史上最强大的逐浪CMS v8.5.0正式发布
  10. mac os 安装CMake