poi直接将excel出力为pdf或者text
基本有两种方法
1,利用VBS之类的脚本语言对装有OFFICE环境的Excel直接另存为PDF。
2,使用poi和itextpdf进行转换
下面是转载于https://github.com/nakazawaken1/Excel-To-PDF-with-POI-and-PDFBox/blob/master/src/main/java/jp/qpg/ExcelTo.java
作为附件我上传到了一份java文件,地址https://download.csdn.net/download/sayu3368/12555090
/*
Copyright 2016 nakazawaken1
Licensed under the Apache License, Version 2.0 (the “License”);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an “AS IS” BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package jp.qpg;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.UncheckedIOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Objects;
import java.util.Optional;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.logging.Logger;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFSimpleShape;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.CellReference;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFSimpleShape;
/**
Convert Excel to pdf or text
@author nakazawaken1
*/
public class ExcelTo {/**
- logger
*/
private static final Logger logger = Logger.getLogger(ExcelTo.class.getCanonicalName());
/**
- excel to pdf
- @param book excel workbook
- @param out output to pdf
- @param documentSetup document setup
- @throws IOException I/O exception
/
public static void pdf(Workbook book, OutputStream out, Consumer documentSetup) throws IOException {
Objects.requireNonNull(book);
Objects.requireNonNull(out);
try (PDFPrinter printer = new PDFPrinter()) {
printer.documentSetup = Optional.ofNullable(documentSetup);
for (int i = 0, end = book.getNumberOfSheets(); i < end; i++) {
Sheet sheet = book.getSheetAt(i);
int rowCount = sheet.getPhysicalNumberOfRows();
if (rowCount <= 0) {
logger.info(sheet.getSheetName() + “: empty”);
continue; / skip blank sheet */
}
logger.info(sheet.getSheetName() + “: " + rowCount + " rows”);
printer.println("sheet name: " + sheet.getSheetName());
printer.println("max row index: " + sheet.getLastRowNum());
printer.println("max column index: " + Tool.stream(sheet.rowIterator(), rowCount).mapToInt(Row::getLastCellNum).max().orElse(0));
eachCell(sheet, (cell, range) -> Tool.cellValue(cell).ifPresent(
value -> printer.println(’[’ + (range == null ? new CellReference(cell).formatAsString() : range.formatAsString()) + “] " + value)));
eachShape(sheet, shapeText(text -> printer.println(”[shape text] " + text)));
printer.newPage();
}
printer.getDocument().save(out);
}
}
/**
- get shape text
- @param consumer text consumer
- @return binary consumer
/
public static BiConsumer<XSSFSimpleShape, HSSFSimpleShape> shapeText(Consumer consumer) {
return (shapeX, shapeH) -> {
try {
consumer.accept(shapeX != null ? shapeX.getText() : shapeH.getString().getString());
} catch (NullPointerException e) {
/ NullPointerException occurs depending on shape type */
}
};
}
/**
- excel to text
- @param book excel workbook
- @param out output to text
/
public static void text(Workbook book, OutputStream out) {
Objects.requireNonNull(book);
Objects.requireNonNull(out);
try (PrintStream printer = Try.to(() -> new PrintStream(out, true, System.getProperty(“file.encoding”))).get()) {
for (int i = 0, end = book.getNumberOfSheets(); i < end; i++) {
Sheet sheet = book.getSheetAt(i);
int rowCount = sheet.getPhysicalNumberOfRows();
if (rowCount <= 0) {
logger.info(sheet.getSheetName() + “: empty”);
continue; / skip blank sheet */
}
logger.info(sheet.getSheetName() + “: " + rowCount + " rows”);
printer.println("sheet name: " + sheet.getSheetName());
printer.println(“max row index: " + sheet.getLastRowNum());
printer.println(“max column index: " + Tool.stream(sheet.rowIterator(), rowCount).mapToInt(Row::getLastCellNum).max().orElse(0));
eachCell(sheet, (cell, range) -> Tool.cellValue(cell).ifPresent(
value -> printer.println(’[’ + (range == null ? new CellReference(cell).formatAsString() : range.formatAsString()) + “] " + value)));
sheet.getCellComments().entrySet().forEach(entry -> {
printer.println(”[comment " + entry.getKey() + “] " + entry.getValue().getString());
});
eachShape(sheet, shapeText(text -> printer.println(”[shape text] " + text)));
printer.println(”--------”);
}
}
}
/**
- traverse all cells
- @param sheet sheet
- @param consumer cell consumer
*/
public static void eachCell(Sheet sheet, BiConsumer<Cell, CellRangeAddress> consumer) {
sheet.rowIterator().forEachRemaining(row -> {
row.cellIterator().forEachRemaining(cell -> {
int rowIndex = cell.getRowIndex();
int columnIndex = cell.getColumnIndex();
boolean until = true;
for (CellRangeAddress mergedRegion : sheet.getMergedRegions()) {
if (mergedRegion.isInRange(rowIndex, columnIndex)) {
if (rowIndex == mergedRegion.getFirstRow() && columnIndex == mergedRegion.getFirstColumn()) {
consumer.accept(cell, mergedRegion);
}
until = false;
break;
}
}
if (until) {
consumer.accept(cell, null);
}
});
});
}
/**
- traverse all shape
- @param sheet sheet
- @param consumer shape consumer
*/
public static void eachShape(Sheet sheet, BiConsumer<XSSFSimpleShape, HSSFSimpleShape> consumer) {
if (sheet instanceof XSSFSheet) {
Optional.ofNullable(((XSSFSheet) sheet).getDrawingPatriarch()).ifPresent(drawing -> drawing.getShapes().forEach(shape -> {
if (shape instanceof XSSFSimpleShape) {
consumer.accept((XSSFSimpleShape) shape, null);
}
}));
} else if (sheet instanceof HSSFSheet) {
Optional.ofNullable(((HSSFSheet) sheet).getDrawingPatriarch()).ifPresent(drawing -> drawing.getChildren().forEach(shape -> {
if (shape instanceof HSSFSimpleShape) {
consumer.accept(null, (HSSFSimpleShape) shape);
}
}));
}
}
/**
- command
- @param args [-p password] [-m true|false(draw margin line if true)] Excel files(.xls, .xlsx, .xlsm)
/
public static void main(String[] args) {
Objects.requireNonNull(args);
int count = 0;
boolean[] drawMarginLine = { false };
for (int i = 0; i < args.length; i++) {
switch (args[i]) {
case “-m”poi直接将excel出力为pdf或者text相关推荐
- 通过jxl和itext 将excel转化成pdf
最近做一个东西需要将excel转化成pdf,在网上也看了不少博客和文章,发现好多是用poi+itext将excel转化成pdf,但是poi对excel操作我并没有看过,之前倒是用jxl对excel进行 ...
- 利用若依@Excel注解导出PDF工具类
利用若依@Excel注解导出PDF工具类 1.pom依赖 <!--PDF导出--><dependency><groupId>com.itextpdf</gro ...
- java根据excel模板导出pdf
可以使用 Apache POI 库读取 excel 文件,然后使用 iText 或者 Apache PDFBox 库生成 PDF 文件.这两个库都提供了从已有文件或数据生成 PDF 的功能. 例如,使 ...
- 使用POI技术往Excel中写入图片并以附件的形式发送给对方
使用POI技术往Excel中写入图片 Service层代码 fastDFS工具类 ExcelUtil工具类 Service层代码 @Service public class UserChangeSer ...
- excel转实现pdf、图片、base64互转
一:jar包 aspose-cells依赖 excel转成pdf以及去除水印所需依赖包 链接:https://pan.baidu.com/s/1rWeG1wgnIP03YmqpD1Vp5g 提取码:4 ...
- 利用Java反射机制和poi插件操作excel
最近在公司写一个利用poi插件读取excel的东西,,不想每一个都写一遍解析代码.就想利用Java的反射机制,写对应的实体类,获取对应excel中的值,下面是解析的代码,仅供参考.不足之处,望指出/* ...
- Apache POI和EasyExcel 第二集:Apache POI的基本Excel写入(分为03版的xls和07版的xlsx)
Apache POI和EasyExcel 第二集:Apache POI的基本Excel写入(分为03版的xls和07版的xlsx) 一.导入依赖 老样子使用Maven,比较方便,一个dependenc ...
- php word excel转pdf文件怎么打开,php office文件(word/excel/ppt)转pdf文件,pptpdf
php office文件(word/excel/ppt)转pdf文件,pptpdf 把代码放到了github上,点击进入 前阶段有个项目用到了线上预览功能, 关于预览office文件实现核心就是,把o ...
- poi excel mysql_java的poi技术读取Excel数据到MySQL
这篇blog是介绍java中的poi技术读取Excel数据,然后保存到MySQL数据中. 你也可以在 :java的poi技术读取和导入Excel了解到写入Excel的方法信息 使用JXL技术可以在 : ...
最新文章
- OpenNI框架介绍
- 机器学习100天:专栏目录
- [ImportNew]Java中的Timer类和TimerTask类
- Spring 已经实现的线程池
- rsync安装与配置使用 数据同步方案(centos6.5)
- c#中程序以管理员身份运行的三种办法
- 第三讲系统的基本操作
- 消息称iPhone 14、14 Max仍采用A15处理器
- 花呗可延后还啦!支付宝“移动花卡”开启预约
- Golang的socket一般使用方式
- NGINX下的红黑树源码详解(附 流程图和GIF)
- 蓝桥杯 ALGO-20 算法训练 求先序排列
- 旅游管理系统项目java设计_基于JSP的旅游管理系统设计与实现(MyEclipse,SQL)
- 进程的创建——fork函数
- 基于ADS仿真的465khz检波电路
- coreldraw16开三折页_cdr印刷设计排版教程,教你三折页设计制作方法
- 【网络流量识别技术之初级入门篇】
- 安卓手机短信误删能恢复吗?
- 从国产浏览器更换到谷歌浏览器的心路历程
- Windows找不到文件无法卸载怎么解决?
热门文章
- 通过jxl和itext 将excel转化成pdf
- logger