精华内容
下载资源
问答
  • poi word
    2021-03-24 09:45:05

    a98e0428c56d8f953c941251ec7b2325.png

    java用poi导出word文档,我要导出一个表格,表格的单元格中还要有...

    有个最简单,不用使用任何 poi 或其他第三方类库的方法生成 excel ,或 word ,你把一个生成好的 word 例子用文件另存为 xml , docx 之类,然后你再直接用记事本去打开这个 docx ,你就会发现是 xml 格式,这个时候,你在程序里面就直接用普通代码生成这个 xml 就可以了。

    poi 如何实现中单元格的垂直居中对齐且水平居中对齐

    excel表格中合并的单元格内的字居中到两行之间的位置:1、选中合并后的单元格2、在工具菜单栏选择 格式 在下拉菜单选择单元格3、在单元格格式选项卡下面选择对齐4、在文本对齐方式中水平对齐 选择居中,在垂直对齐下面选择居中。

    确定。

    后单元格内的字就会居中到两行之间的位置了。

    ...

    每页word表格 第一行上下居中、左对齐,其余单元格居中

    table里的内容居中的话直接 用align=center valign=middle就可以了,但是要把整个table也居中,就必须再建一个页面大小的table,把目标table当成其中的内容来对待才行,代码如下: ...

    java poi 操作word的表格 怎么设置表格里面的字体加粗 现在只会把背景...

    如果文字比较少,可以明显看出来有左右居中和上下居中两种。

    1.左右居中可以直接点击ctrl+E。

    2.如果是上下居中,(我用的是wps)选中合并后的单元框,右键后有一个选项:单元格对齐方式,将鼠标移到此选项上,可以看到有9个选项,选最中间的那个就可以了。

    注:我的wps是10.1版本。

    请教一个NPOI生成word中table的问题

    w;w;w。

    可以将word的后缀名改为zip然后打开找到word/document;>dxa" />- eastAsia&quot:r>02w,这样可以更加方便的了解他的底层构造,获得到cell里的值,即cell.getText();在这里注意cell中value的长度:p>- w;w:tcPr>w; /首先就是要明白解决的方案是:先删后添。

    就是利用Paragraph创建run,在创建完毕后循环遍历tableàrowàcell.xml文件...

    更多相关内容
  • POI动态生成word和freemark各有优劣,POI兼容性差点 ,freemark模板改起来较为繁琐,但是代码简单,这里的是POI针对word2007(docx)的动态数据填充
  • POI word目录处理备忘

    2019-05-28 01:22:37
    NULL 博文链接:https://shappy1978.iteye.com/blog/635748
  • java 对word关键字替换,可替换word表格中的关键字,word转PDF
  • java Apache poi word模板 word表格模板 word报表.zip
  • poi word 打印

    2019-01-22 17:00:34
    poi word 打印
  • POI中中关于word的各种操作都在这里,将数据导入方便转换!
  • poi word excel转html

    2017-07-07 15:05:15
    poi word excel转html,支持03 07版word excel,支持直接保存为html文件或者返回html字符串。maven工程,但lib中包含有所需要的jar,方便非maven工程直接copy使用。
  • 使用poi替换word中的图片,无需加书签,doc/docx均可,亲测。
  • 使用POI 对 图片插入 目录插入 不用模板文件。 绝对好使的。分简单模式和复杂模式。以前上传过一份,以为上传提交后可以修改上传文件。对不住那位哥,此次是完整项目,在生产环境中有使用的。有注释,有Sample。不懂...
  • 绝对好用的word操作 poi word2010替换文字 图片 表格
  • 通过POI将图片插入word文档中,写文字就简单了自己摸索
  • poi word2003转html

    2017-07-24 20:21:04
    spring poiword2003转换成html,包含格式、包含图片
  • Apache poi 根据word模板生成word报表 替换 循环列表 图片,代码调试过了,修改相应的图片位置,word模板路径即可运行
  • Java使用POI导出Word文档的操作教程,poiword一、主要pom依赖org.apache.poipoi-ooxml3.16二、需要导出word模板三、相关导出代码package com.iflytek.chy;import java.io.FileInputStream;import java.io....

    Java使用POI导出Word文档的操作教程,poiword

    一、主要pom依赖

    org.apache.poi

    poi-ooxml

    3.16

    二、需要导出word模板

    20180712123117623.png

    三、相关导出代码

    package com.iflytek.chy;

    import java.io.FileInputStream;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.io.InputStream;

    import java.io.OutputStream;

    import java.util.HashMap;

    import java.util.List;

    import java.util.Map;

    import java.util.regex.Matcher;

    import java.util.regex.Pattern;

    import org.apache.commons.lang3.StringUtils;

    import org.apache.poi.xwpf.usermodel.XWPFDocument;

    import org.apache.poi.xwpf.usermodel.XWPFParagraph;

    import org.apache.poi.xwpf.usermodel.XWPFRun;

    import org.apache.poi.xwpf.usermodel.XWPFTable;

    import org.apache.poi.xwpf.usermodel.XWPFTableCell;

    import org.apache.poi.xwpf.usermodel.XWPFTableRow;

    public class App {

    private static String regex = "[a-zA-Z]+";

    private static Pattern pattern = Pattern.compile(regex);

    public static void main(String[] args) throws IOException {

    Map map = new HashMap();

    map.put("qbdj", "你好");

    map.put("zlhtbt", "姓名");

    map.put("fwqh", "性别");

    map.put("qbly", "年龄");

    map.put("lrsj", "生日");

    map.put("bt", "职业");

    map.put("xxzw", "工作城市");

    map.put("bb", "武汉光谷");

    map.put("ss", "武汉光谷");

    map.put("ff", "武汉光谷");

    map.put("gg", "武汉光谷");

    map.put("hh", "武汉光谷");

    map.put("dd", "武汉光谷");

    String filePath = "D:\\java_workspace_qbNew\\qb-yp\\qb-xsfx\\target\\classes\\config\\template\\SWSJ-test.docx";

    InputStream is = new FileInputStream(filePath);

    @SuppressWarnings("resource")

    XWPFDocument doc = new XWPFDocument(is);

    List list = doc.getParagraphs();

    // 替换占位符

    for (int i = 0; i < list.size(); i++) {

    XWPFParagraph xwpfParagraph = list.get(i);

    List runs = xwpfParagraph.getRuns();

    if (runs != null && runs.size() > 0) {

    for (int j = runs.size() - 1; j >= 0; j--) {

    if (map.containsKey(runs.get(j).text())) {

    System.out.println("run:" + runs.get(j).text());

    runs.get(j).setText(map.get(runs.get(j).text()), 0);

    }

    }

    }

    }

    // 替换表格中的占位符

    List tables = doc.getTables();

    for (XWPFTable xwpfTable : tables) {

    for (int i = 0; i < xwpfTable.getNumberOfRows(); i++) {

    XWPFTableRow row = xwpfTable.getRow(i);

    List tableCells = row.getTableCells();

    for (XWPFTableCell xwpfTableCell : tableCells) {

    List paragraphs = xwpfTableCell.getParagraphs();

    for (XWPFParagraph xwpfParagraph : paragraphs) {

    List runs = xwpfParagraph.getRuns();

    for (XWPFRun xwpfRun : runs) {

    String trim = xwpfRun.text();

    Matcher matcher = pattern.matcher(trim);

    String temp = "";

    while (matcher.find()) {

    temp = matcher.group();

    }

    if (StringUtils.isNotBlank(temp)) {

    trim = trim.replace(temp, map.get(temp));

    }

    xwpfRun.setText(trim, 0);

    }

    }

    }

    }

    }

    OutputStream os = new FileOutputStream(

    "D:\\\\java_workspace_qbNew\\\\qb-yp\\\\qb-xsfx\\\\target\\\\classes\\\\config\\\\template\\\\MY-SWSJ-test.docx");

    doc.write(os);

    os.close();

    is.close();

    }

    }

    展开全文
  • POI Word 图表、柱状图、条形图、折线图、饼图

    千次阅读 热门讨论 2020-04-22 23:03:25
    1、pom.xml <dependency> <...org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> <dep...

    poi Excel 图表:https://blog.csdn.net/u014644574/article/details/105695787

    1、pom.xml

    		<dependency>
    			<groupId>org.apache.poi</groupId>
    			<artifactId>poi-ooxml</artifactId>
    			<version>4.1.2</version>
    		</dependency>
    		<dependency>
    			<groupId>org.apache.poi</groupId>
    			<artifactId>poi-ooxml-schemas</artifactId>
    			<version>4.1.2</version>
    		</dependency>
    		<dependency>
    			<groupId>org.apache.poi</groupId>
    			<artifactId>poi</artifactId>
    			<version>4.1.2</version>
    		</dependency>
    		<dependency>
    			<groupId>org.apache.poi</groupId>
    			<artifactId>poi-scratchpad</artifactId>
    			<version>4.1.2</version>
    		</dependency>
    		<dependency>
    			<groupId>org.apache.commons</groupId>
    			<artifactId>commons-collections4</artifactId>
    			<version>4.4</version>
    		</dependency>
    		<dependency>
    			<groupId>commons-codec</groupId>
    			<artifactId>commons-codec</artifactId>
    			<version>1.13</version>
    		</dependency>
    		<dependency>
    			<groupId>org.apache.commons</groupId>
    			<artifactId>commons-compress</artifactId>
    			<version>1.19</version>
    		</dependency>
    		<dependency>
    			<groupId>org.apache.xmlbeans</groupId>
    			<artifactId>xmlbeans</artifactId>
    			<version>3.1.0</version>
    		</dependency>
    		<dependency>
    			<groupId>org.apache.poi</groupId>
    			<artifactId>ooxml-schemas</artifactId>
    			<version>1.4</version>
    		</dependency>

    2、poi Word生成图表-柱状图

    package test;
    
    import java.io.FileOutputStream;
    
    import org.apache.poi.ss.util.CellRangeAddress;
    import org.apache.poi.ss.util.CellReference;
    import org.apache.poi.util.Units;
    import org.apache.poi.xddf.usermodel.chart.AxisCrossBetween;
    import org.apache.poi.xddf.usermodel.chart.AxisCrosses;
    import org.apache.poi.xddf.usermodel.chart.AxisPosition;
    import org.apache.poi.xddf.usermodel.chart.BarDirection;
    import org.apache.poi.xddf.usermodel.chart.ChartTypes;
    import org.apache.poi.xddf.usermodel.chart.LegendPosition;
    import org.apache.poi.xddf.usermodel.chart.XDDFBarChartData;
    import org.apache.poi.xddf.usermodel.chart.XDDFCategoryAxis;
    import org.apache.poi.xddf.usermodel.chart.XDDFChartData;
    import org.apache.poi.xddf.usermodel.chart.XDDFChartLegend;
    import org.apache.poi.xddf.usermodel.chart.XDDFDataSource;
    import org.apache.poi.xddf.usermodel.chart.XDDFDataSourcesFactory;
    import org.apache.poi.xddf.usermodel.chart.XDDFNumericalDataSource;
    import org.apache.poi.xddf.usermodel.chart.XDDFValueAxis;
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import org.apache.poi.xwpf.usermodel.XWPFChart;
    import org.apache.poi.xwpf.usermodel.XWPFDocument;
    
    /**
     * poi Word生成图表-柱状图
     */
    public class CreateWordXDDFChart {
    
    	// Methode to set title in the data sheet without creating a Table but using the sheet data only.
    	// Creating a Table is not really necessary.
    	static CellReference setTitleInDataSheet(XWPFChart chart, String title, int column) throws Exception {
    		XSSFWorkbook workbook = chart.getWorkbook();
    		XSSFSheet sheet = workbook.getSheetAt(0);
    		XSSFRow row = sheet.getRow(0);
    		if (row == null)
    			row = sheet.createRow(0);
    		XSSFCell cell = row.getCell(column);
    		if (cell == null)
    			cell = row.createCell(column);
    		cell.setCellValue(title);
    		return new CellReference(sheet.getSheetName(), 0, column, true, true);
    	}
    
    	public static void main(String[] args) throws Exception {
    		try (XWPFDocument document = new XWPFDocument()) {
    
    			// create the data
    			String[] categories = new String[] { "Lang 1", "Lang 2", "Lang 3" };
    			Double[] valuesA = new Double[] { 10d, 20d, 30d };
    			Double[] valuesB = new Double[] { 15d, 25d, 35d };
    
    			// create the chart
    			XWPFChart chart = document.createChart(15 * Units.EMU_PER_CENTIMETER, 10 * Units.EMU_PER_CENTIMETER);
    
    			// create data sources
    			int numOfPoints = categories.length;
    			String categoryDataRange = chart.formatRange(new CellRangeAddress(1, numOfPoints, 0, 0));
    			String valuesDataRangeA = chart.formatRange(new CellRangeAddress(1, numOfPoints, 1, 1));
    			String valuesDataRangeB = chart.formatRange(new CellRangeAddress(1, numOfPoints, 2, 2));
    			XDDFDataSource<String> categoriesData = XDDFDataSourcesFactory.fromArray(categories, categoryDataRange, 0);
    			XDDFNumericalDataSource<Double> valuesDataA = XDDFDataSourcesFactory.fromArray(valuesA, valuesDataRangeA, 1);
    			XDDFNumericalDataSource<Double> valuesDataB = XDDFDataSourcesFactory.fromArray(valuesB, valuesDataRangeB, 2);
    
    			// create axis
    			XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
    			XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);
    			leftAxis.setCrosses(AxisCrosses.AUTO_ZERO);
    			// Set AxisCrossBetween, so the left axis crosses the category axis between the categories.
    			// Else first and last category is exactly on cross points and the bars are only half visible.
    			leftAxis.setCrossBetween(AxisCrossBetween.BETWEEN);
    
    			// create chart data
    			XDDFChartData data = chart.createData(ChartTypes.BAR, bottomAxis, leftAxis);
    			((XDDFBarChartData) data).setBarDirection(BarDirection.COL);
    
    			// create series
    			// if only one series do not vary colors for each bar
    			((XDDFBarChartData) data).setVaryColors(false);
    			XDDFChartData.Series series = data.addSeries(categoriesData, valuesDataA);
    			// XDDFChart.setSheetTitle is buggy. It creates a Table but only half way and incomplete.
    			// Excel cannot opening the workbook after creatingg that incomplete Table.
    			// So updating the chart data in Word is not possible.
    			// series.setTitle("a", chart.setSheetTitle("a", 1));
    			series.setTitle("a", setTitleInDataSheet(chart, "a", 1));
    
    			/*
    			   // if more than one series do vary colors of the series
    			   ((XDDFBarChartData)data).setVaryColors(true);
    			   series = data.addSeries(categoriesData, valuesDataB);
    			   //series.setTitle("b", chart.setSheetTitle("b", 2));
    			   series.setTitle("b", setTitleInDataSheet(chart, "b", 2));
    			*/
    
    			// plot chart data
    			chart.plot(data);
    
    			// create legend
    			XDDFChartLegend legend = chart.getOrAddLegend();
    			legend.setPosition(LegendPosition.LEFT);
    			legend.setOverlay(false);
    
    			// 打印图表的xml
    			// System.out.println(chart.getCTChart());
    
    			// Write the output to a file
    			try (FileOutputStream fileOut = new FileOutputStream("CreateWordXDDFChart.docx")) {
    				document.write(fileOut);
    			}
    		}
    	}
    }

     

    3、poi Word生成图表-折线图

    package test;
    
    import java.io.FileOutputStream;
    
    import org.apache.poi.util.Units;
    import org.apache.poi.xddf.usermodel.chart.AxisPosition;
    import org.apache.poi.xddf.usermodel.chart.ChartTypes;
    import org.apache.poi.xddf.usermodel.chart.LegendPosition;
    import org.apache.poi.xddf.usermodel.chart.MarkerStyle;
    import org.apache.poi.xddf.usermodel.chart.XDDFCategoryAxis;
    import org.apache.poi.xddf.usermodel.chart.XDDFCategoryDataSource;
    import org.apache.poi.xddf.usermodel.chart.XDDFChartLegend;
    import org.apache.poi.xddf.usermodel.chart.XDDFDataSourcesFactory;
    import org.apache.poi.xddf.usermodel.chart.XDDFLineChartData;
    import org.apache.poi.xddf.usermodel.chart.XDDFNumericalDataSource;
    import org.apache.poi.xddf.usermodel.chart.XDDFValueAxis;
    import org.apache.poi.xwpf.usermodel.XWPFChart;
    import org.apache.poi.xwpf.usermodel.XWPFDocument;
    
    /**
     * poi Word生成图表-折线图
     */
    public class CreateWordXDDFChart2 {
    
    	public static void main(String[] args) throws Exception {
    		try (XWPFDocument document = new XWPFDocument()) {
    
    			// create the chart
    			XWPFChart chart = document.createChart(15 * Units.EMU_PER_CENTIMETER, 10 * Units.EMU_PER_CENTIMETER);
    
    			// 标题
    			chart.setTitleText("地区排名前七的国家");
    			// 标题覆盖
    			chart.setTitleOverlay(false);
    
    			// 图例位置
    			XDDFChartLegend legend = chart.getOrAddLegend();
    			legend.setPosition(LegendPosition.TOP);
    
    			// 分类轴标(X轴),标题位置
    			XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
    			bottomAxis.setTitle("国家");
    			// 值(Y轴)轴,标题位置
    			XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);
    			leftAxis.setTitle("面积和人口");
    
    			// CellRangeAddress(起始行号,终止行号, 起始列号,终止列号)
    			// 分类轴标(X轴)数据,单元格范围位置[0, 0]到[0, 6]
    			// XDDFDataSource<String> countries = XDDFDataSourcesFactory.fromStringCellRange(sheet, new CellRangeAddress(0, 0, 0, 6));
    			XDDFCategoryDataSource countries = XDDFDataSourcesFactory.fromArray(new String[] { "俄罗斯", "加拿大", "美国", "中国", "巴西", "澳大利亚", "印度" });
    			// 数据1,单元格范围位置[1, 0]到[1, 6]
    			// XDDFNumericalDataSource<Double> area = XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(1, 1, 0, 6));
    			XDDFNumericalDataSource<Integer> area = XDDFDataSourcesFactory.fromArray(new Integer[] { 17098242, 9984670, 9826675, 9596961, 8514877, 7741220, 3287263 });
    
    			// 数据1,单元格范围位置[2, 0]到[2, 6]
    			// XDDFNumericalDataSource<Double> population = XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(2, 2, 0, 6));
    
    			// LINE:折线图,
    			XDDFLineChartData data = (XDDFLineChartData) chart.createData(ChartTypes.LINE, bottomAxis, leftAxis);
    
    			// 图表加载数据,折线1
    			XDDFLineChartData.Series series1 = (XDDFLineChartData.Series) data.addSeries(countries, area);
    			// 折线图例标题
    			series1.setTitle("面积", null);
    			// 直线
    			series1.setSmooth(false);
    			// 设置标记大小
    			series1.setMarkerSize((short) 6);
    			// 设置标记样式,星星
    			series1.setMarkerStyle(MarkerStyle.STAR);
    
    			// 绘制
    			chart.plot(data);
    
    			// 打印图表的xml
    			// System.out.println(chart.getCTChart());
    
    			// Write the output to a file
    			try (FileOutputStream fileOut = new FileOutputStream("CreateWordXDDFChart.docx")) {
    				document.write(fileOut);
    			}
    		}
    	}
    }

     

    4、poi Word生成图表-饼图

    package test;
    
    import java.io.FileOutputStream;
    
    import org.apache.poi.util.Units;
    import org.apache.poi.xddf.usermodel.chart.ChartTypes;
    import org.apache.poi.xddf.usermodel.chart.LegendPosition;
    import org.apache.poi.xddf.usermodel.chart.XDDFCategoryDataSource;
    import org.apache.poi.xddf.usermodel.chart.XDDFChartData;
    import org.apache.poi.xddf.usermodel.chart.XDDFChartLegend;
    import org.apache.poi.xddf.usermodel.chart.XDDFDataSourcesFactory;
    import org.apache.poi.xddf.usermodel.chart.XDDFNumericalDataSource;
    import org.apache.poi.xwpf.usermodel.XWPFChart;
    import org.apache.poi.xwpf.usermodel.XWPFDocument;
    
    /**
     * poi Word生成图表-饼图
     */
    public class CreateWordXDDFChart2 {
    
    	public static void main(String[] args) throws Exception {
    		try (XWPFDocument document = new XWPFDocument()) {
    
    			// create the chart
    			XWPFChart chart = document.createChart(15 * Units.EMU_PER_CENTIMETER, 10 * Units.EMU_PER_CENTIMETER);
    
    			// 标题
    			chart.setTitleText("地区排名前七的国家");
    			// 标题是否覆盖图表
    			chart.setTitleOverlay(false);
    
    			// 图例位置
    			XDDFChartLegend legend = chart.getOrAddLegend();
    			legend.setPosition(LegendPosition.TOP_RIGHT);
    
    			// CellRangeAddress(起始行号,终止行号, 起始列号,终止列号)
    			// 分类轴标数据,
    			// XDDFDataSource<String> countries = XDDFDataSourcesFactory.fromStringCellRange(sheet, new CellRangeAddress(0, 0, 0, 6));
    			XDDFCategoryDataSource countries = XDDFDataSourcesFactory.fromArray(new String[] { "俄罗斯", "加拿大", "美国", "中国", "巴西", "澳大利亚", "印度" });
    			// 数据1,
    			// XDDFNumericalDataSource<Double> values = XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(1, 1, 0, 6));
    			XDDFNumericalDataSource<Integer> values = XDDFDataSourcesFactory.fromArray(new Integer[] { 17098242, 9984670, 9826675, 9596961, 8514877, 7741220, 3287263 });
    			// XDDFChartData data = chart.createData(ChartTypes.PIE3D, null, null);
    			XDDFChartData data = chart.createData(ChartTypes.PIE, null, null);
    			// 设置为可变颜色
    			data.setVaryColors(true);
    			// 图表加载数据
    			data.addSeries(countries, values);
    
    			// 绘制
    			chart.plot(data);
    
    			// 打印图表的xml
    			// System.out.println(chart.getCTChart());
    
    			// Write the output to a file
    			try (FileOutputStream fileOut = new FileOutputStream("CreateWordXDDFChart.docx")) {
    				document.write(fileOut);
    			}
    		}
    	}
    }

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • poi word操作之向单元格内添加图片 1,主要难点: poi word操作之向单元格内添加图片考虑的点: 1)考虑图片在单元格内的占比(动态的调整图片在文档中的宽高) 2,解决步骤 1)首先需要获取图片文件的宽高转化为EMU...

    poi word操作之向单元格内添加图片

    1,主要难点:
    poi word操作之向单元格内添加图片考虑的点:
    1)考虑图片在单元格内的占比(动态的调整图片在文档中的宽高)

    2,解决步骤
    1)首先需要获取图片文件的宽高转化为EMU单位数值的宽高,因为通过poi设置图片时的宽高单位是EMU单位:

    File image = new File(path);
    BufferedImage read = ImageIO.read(image);
    int width = Units.toEMU(read.getWidth());
    int height = Units.toEMU(read.getHeight());
    

    2)动态的调整适合文档宽度的EMU数值:
    首先需要看你的图片在文档中最大宽度,根据个人需求调整,我的如下:
    在这里插入图片描述
    我的图片最大宽度占比为16cm,因此可以根据公式计算得出适合我的文档宽度的EMU数值。注意,EMU数值只能是整数:
    公式:1 EMU = 1/914400英寸= 1/360000 cm
    如果图片最大EMU值超出的我的文档的最大值就等比缩放图片的EMU数值:

    File image = new File(path);
    BufferedImage read = ImageIO.read(image);
    int width = Units.toEMU(read.getWidth());
    int height = Units.toEMU(read.getHeight());
    //1 EMU = 1/914400英寸= 1/36000 mm,16是word文档中图片能设置的最大宽度cm
    if(width/360000>16){
    	//向上取整,不要小数
    	NumberFormat f = NumberFormat.getNumberInstance();
    	f.setMaximumFractionDigits(0);
    	f.setRoundingMode(RoundingMode.UP);
    	//获取图片的EMU和图片在文档中最大EMU的比例值
    	Double d=width/360000/16d;
    	//根据比例值计算得出适合文档的最大EMU数值
    	width = Integer.valueOf(f.format(width/d).replace(",",""));
    	height = Integer.valueOf(f.format(height/d).replace(",",""));
    }
    

    3,完整代码方法示例:

    /**
     *批量插入多张图片,一张一行
     *urls是以“,”为分隔的多张图片拼接的字符串
     */
    public void setCellImg(XWPFTableCell cell, String urls) throws Exception {
    	try{
    		String[] url = urls.split(",");
    		//获取单元格的段落
    		XWPFParagraph paragraphs = cell.getParagraphs().get(0);
    		XWPFRun run = paragraphs.getRuns().isEmpty() ? paragraphs.createRun() : paragraphs.getRuns().get(0);
    		int index=0;
    		for(String path:url){
    			File image = new File(path);
    			//判断图片是否存在
    			if(!image.exists()){
    				continue;
    			}
    			//判断图片的格式
    			int format=0;
    			if (path.endsWith(".emf")) {
    				format = XWPFDocument.PICTURE_TYPE_EMF;
    			} else if (path.endsWith(".wmf")) {
    				format = XWPFDocument.PICTURE_TYPE_WMF;
    			} else if (path.endsWith(".pict")) {
    				format = XWPFDocument.PICTURE_TYPE_PICT;
    			} else if (path.endsWith(".jpeg") || path.endsWith(".jpg")) {
    				format = XWPFDocument.PICTURE_TYPE_JPEG;
    			} else if (path.endsWith(".png")) {
    				format = XWPFDocument.PICTURE_TYPE_PNG;
    			} else if (path.endsWith(".dib")) {
    				format = XWPFDocument.PICTURE_TYPE_DIB;
    			} else if (path.endsWith(".gif")) {
    				format = XWPFDocument.PICTURE_TYPE_GIF;
    			} else if (path.endsWith(".tiff")) {
    				format = XWPFDocument.PICTURE_TYPE_TIFF;
    			} else if (path.endsWith(".eps")) {
    				format = XWPFDocument.PICTURE_TYPE_EPS;
    			} else if (path.endsWith(".bmp")) {
    				format = XWPFDocument.PICTURE_TYPE_BMP;
    			} else if (path.endsWith(".wpg")) {
    				format = XWPFDocument.PICTURE_TYPE_WPG;
    			} else {
    				log.error("Unsupported picture: " + url +
    						". Expected emf|wmf|pict|jpeg|png|dib|gif|tiff|eps|bmp|wpg");
    				continue;
    			}
    
    			//获取图片文件流
    			FileInputStream is = new FileInputStream(path);
    			//计算适合文档宽高的图片EMU数值
    			BufferedImage read = ImageIO.read(image);
    			int width = Units.toEMU(read.getWidth());
    			int height = Units.toEMU(read.getHeight());
    			//1 EMU = 1/914400英寸= 1/36000 mm,15是word文档中图片能设置的最大宽度cm
    			if(width/360000>15){
    				NumberFormat f = NumberFormat.getNumberInstance();
    				f.setMaximumFractionDigits(0);
    				f.setRoundingMode(RoundingMode.UP);
    				Double d=width/360000/15d;
    				width = Integer.valueOf(f.format(width/d).replace(",",""));
    				height = Integer.valueOf(f.format(height/d).replace(",",""));
    			}
    			run.addPicture(is, format, image.getName(), width, height);
    			is.close();
    			if(index!=url.length-1){
    				run.addBreak();//换行
    			}
    			index++;
    		}
    	}catch (Exception e){
    		throw e;
    	}
    }
    
    展开全文
  • POI无法读取到word每一段所在的页码。我给出了代码和所有的解释,用POI读取word中的页码。也算是小方法了,基本很准确,为什么要加一个基本呢?因为,分页标志符号在第一行为空白行的时候没有分页符!!所以你的文档...
  • Java 解析WORD PIO 解析word文件,解析WRD文件中的页脚、页眉等
  • POI生成word文档

    2019-01-18 15:46:16
    最近在做一个出卷系统,需要通过试卷模板从数据库中抽取题目,然后按照模板的样式生成完整的试卷,包括试卷格式的排版和图片的写入。这是用POI模板生成word文档。里面包括完整代码和所需jar包。
  • 使用poiWord2003和Word2007内容(包括图片)完整转换成html。内附核心代码,成功事例,及完整Jar包。不用再东查西找拼凑Jar包了!
  • 主要为大家详细介绍了Java使用poiword转换为html的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • POI word 设置页脚 页码 字体字号

    千次阅读 2021-07-29 18:48:32
    public static void createDefaultFooter(final XWPFDocument document,String fontName,int fontSize) throws IOException, XmlException { CTP pageNo = CTP.Factory.newInstance(); XWPFParagraph footer = new...
  • JAVA使用POI读写word 乱码写 public static void main(String args[]) throws Exception { XWPFDocument doc = new XWPFDocument(); XWPFParagraph p1 = doc.createParagraph(); p1.setAlignment(ParagraphAlignment...
  • 使用java poi动态编辑生成word文件,生成报表信息。支持插入循环list数据和单个数据得工具类,和测试模板,直接导入就能使用
  • POIWord的操作,特别是针对生成报告模板时,向word中写入文本和图片。
  • 自动格式化Word文档格式程序使用Java为基础语言,使用开源组件poi对Office Word文档结构进行解析,对格式不正确的内容予以纠正,实现效果如下: 一、目前提供了三种方式方便大家使用 (一)客户端程序(需安装Java)...
  • POI Word单元格合并

    千次阅读 2020-04-08 16:58:56
    1、pom.xml <dependency> <...org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> <dep...
  • 1、poi版本3.13 2、可进行表格替换。复制、图片导出 3、可直接运行
  • poi_word_utils 使用poi绘制word图表以及表格的工具类项目 这里包含了投影普通柱状图堆叠柱状图簇状柱状图折线图饼状图散点图 其中柱状图和散点图加入了自定义颜色的功能在WordUtil类中main方法里面,基本上包含了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,509
精华内容 7,803
关键字:

poi word