- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 apache poi 在我的 Word 文档中并排添加图像。我尝试将其设为表方法,并为其编写了以下代码。
XWPFTable imgTable;
XWPFTableRow rows=null;
XWPFTableCell cells=null;
imgTable=document.createTable(20,2);
imgTable.getCTTbl().getTblPr().unsetTblBorders();
rows=imgTable.getRow(1);
cells=rows.getCell(0);
XWPFParagraph imgPara = document.createParagraph();
XWPFRun img = imgPara.createRun();
for(int z=0;z<imgPaths.size();z++)
{
if(imgPaths.get(z).contains("-"))
{
}
else
{
System.out.println(imgPaths.get(z));
try {
is2 = new FileInputStream(imgPaths.get(z));
is3=new FileInputStream(imgPaths.get(z+1));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
img.addPicture(is2, XWPFDocument.PICTURE_TYPE_JPEG, "", Units.toEMU(450), Units.toEMU(200));
} catch (InvalidFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
正在加载数据的 imgPaths arraylist 中的文件路径来自 access 数据库。在我的数据库中,有一些文件路径。如果没有文件路径,我会将 - 放入我的数据库单元格中。例如,我有 20 个用于图像路径的单元格,但我添加了 7 个文件路径,因此我将这个 - 放在剩余的 13 个中。因此,当我运行代码时,没有错误,但没有看到图像字文档。我究竟做错了什么?
最佳答案
您的 XWPFParagraph imgPara
和 XWPFRun img
不在表格内。相反,他们在 table 外面。
您的代码还将所有图片添加到同一个 XWPFRun
中。但它应该将图片添加到 XWPFTableCell 中的不同运行中。为此,您需要获取 XWPFTableCell
的第一段,然后获取该段中运行的第一个文本。
以下完整代码显示了如何完成此操作。它使用来自公共(public)可访问互联网资源的图片。因此本地无需存储图片文件即可使用。
import java.io.*;
import org.apache.poi.xwpf.usermodel.*;
import org.apache.poi.util.Units;
import java.util.List;
import java.util.ArrayList;
import java.net.URL;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.Dimension;
public class CreateWordPicturesInTable {
public static void main(String[] args) throws Exception {
List<String> pictureURLs = new ArrayList<String>();
pictureURLs.add("https://www.eastcottvets.co.uk/uploads/Animals/gingerkitten.jpg");
pictureURLs.add("https://www.catster.com/wp-content/uploads/2017/12/A-kitten-meowing.jpg");
pictureURLs.add("-");
pictureURLs.add("https://www.animalfriends.co.uk/app/uploads/2014/08/06110347/Kitten-small.jpg");
pictureURLs.add("https://d27ucmmhxk51xv.cloudfront.net/media/english/illustration/kitten.jpg");
pictureURLs.add("-");
pictureURLs.add("-");
int picturesCount = pictureURLs.size();
int tableRows = (int)Math.round(picturesCount/2d);
XWPFDocument document= new XWPFDocument();
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run = paragraph.createRun();
run.setText("The kitten pictures: ");
XWPFTable imgTable = document.createTable(tableRows,2);
XWPFTableCell cell;
URL url;
BufferedImage image;
Dimension dim;
ByteArrayOutputStream bout;
ByteArrayInputStream bin;
int tableRow = 0;
int tableCell = 0;
for (String pictureURL : pictureURLs) {
cell = imgTable.getRow(tableRow).getCell(tableCell++);
if (tableCell == 2) {
tableCell = 0;
tableRow++;
}
if (!"-".equals(pictureURL)) {
url = new URL(pictureURL);
image = ImageIO.read(url);
dim = new Dimension(image.getWidth(), image.getHeight());
double width = dim.getWidth();
double height = dim.getHeight();
double scaling = 1.0;
if (width > 72*3) scaling = (72*3)/width; //scale width not to be greater than 3 inches
bout = new ByteArrayOutputStream();
ImageIO.write(image, "jpeg", bout);
bout.flush();
bin = new ByteArrayInputStream(bout.toByteArray());
if (cell.getParagraphs().size() > 0) paragraph = cell.getParagraphs().get(0); else paragraph = cell.addParagraph();
if (paragraph.getRuns().size() > 0) run = paragraph.getRuns().get(0); else run = paragraph.createRun();
run.addPicture(bin, XWPFDocument.PICTURE_TYPE_JPEG, "kitten",
Units.toEMU(width*scaling), Units.toEMU(height*scaling));
//lock aspect ratio
run.getCTR().getDrawingArray(0).getInlineArray(0).addNewCNvGraphicFramePr().addNewGraphicFrameLocks().setNoChangeAspect(true);
}
}
FileOutputStream out = new FileOutputStream("CreateWordPicturesInTable.docx");
document.write(out);
out.close();
document.close();
}
}
关于java - 如何使用apache poi并排添加图像word文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58820074/
我在 Excel 中有两个图表,但我想将这些图表合并为一个图表。如您所见,我缩小了 graph1 中图表的大小。我想移动 graph2 中的图表进入graph1中的空白区域 最佳答案 我认为在基本的
我正在为我的站点构建一个 HTML 模板,并希望在左侧有一个主要内容 Pane ,在右侧有一个导航 Pane (类似于 Twitter)。 我假设 DIV 不是首选方法,因为默认情况下它们是从上到下列
我有以下 fiddle :http://jsfiddle.net/BFSH4/ 如您所见,有两个问题: h1 和 h2 没有垂直对齐。 导航和内容未水平对齐。 对于 1. 我已经尝试了 margin
在下面的示例中,我试图让“左”和“右”div 并排显示。显然我的理解是有缺陷的,但我犯了什么错误,因为(至少在 Chrome 中)它们没有并排出现。 谢谢
我在 chrome 上使用 Tampermonkey 向网页添加按钮。单击时,脚本会分析页面,然后显示警报。这是显示按钮的代码: function Main(){ GM_addStyle(
我的自定义键盘中有 UICollectionView,它有两行高度相同但宽度不同(大小来自服务器)的单元格,滚动方向是水平的。 我怎样才能并排显示集合项,而不用这种基于先前单元格宽度的奇怪居中? 最佳
任何人都可以帮助将两个位图图像组合成一个位图 在安卓中(并排)。 谢谢,尤瓦拉杰 最佳答案 您可以使用 Canvas - 查看这篇文章: http://www.jondev.net/articles/
如果有的话,设计 RPM 的“正确”方法是什么,以便可以通过 YUM/RPM 并排安装多个版本而不会相互干扰?对于库,正确的答案似乎与 sonames 有关,尽管我找不到任何关于 sonames、符号
从我的 last question 跟进:我执行了 Steve 提供的所有步骤,SxS Parse 日志为空,但我仍然收到“Class Not Registered”错误。 我知道我的 .exe 正在
我想并排显示两个图 block 层,就像并排的传单插件 ( https://github.com/digidem/leaflet-side-by-side )。 但是,我不知道如何用 react 来做
我正在制作一个将 PO 导出为 PDF 的采购订单系统,但我需要在上半部分显示来自买方和卖方的数据。我想并排放置 2 个 DetailView,每个都有 50% 的页面宽度。有可能的?到目前为止,我还
无论屏幕大小如何,我都试图并排 float 两个 div。目前在 IE 7 中,如果我调整窗口大小,一个 div 会下降到另一个下方。我认为这是因为 div2 包含一个表格,一旦窗口边缘碰到表格,它就
我想使用这个数据框的 geom_bar() 创建一个并排的条形图, > dfp1 value percent1 percent 1 (18,29] 0.20909091 0.454545
我正在尝试在 Xcode (Swift) 中创建一个单位转换器,并一直在尝试在 Storyboard 中对 UI 进行排序。我一直试图在屏幕的上半部分并排放置两个表格 View ,以保存两个测量类型的
下面的代码运行良好。 eventDrag 和 Drop 我可以放置在表格内的任何位置。 但是我只想将事件拖放到事件的左侧和右侧。 我想从其他事件的顶部和底部停止拖动事件。只有左侧和右侧的其他事件我想拖
我似乎无法让我的图层列表正常工作。 我需要
我想要类似 unix 中的 paste 命令,它需要两个文件并打印第一行,第一个文件,然后是分隔符,然后是第二个文件的第一行,然后是换行符,然后是第一个文件的第二行第二个文件的文件分隔符第二行,等等。
我想将我的内部应用程序的测试版本部署到我的测试组,我需要它与当前的 LIVE 版本一起安装。 我更改了发布选项中的所有内容,但它仍然会覆盖我的实时安装。我还需要做什么?我是否必须更改“应用程序”选项卡
我想创建一个设置,其中左侧有一个图像,右侧有一个 div。我正在使用 float left 来完成此操作,但我希望右侧的 div 与左侧的图像具有相同的高度,并且文本垂直居中。 这是一个jsfiddl
如何让两张 table 并排放置。问题可能会出现,有时一张 table 可能比另一张 table 大它旁边的表格,所以这可能会导致问题并且下面的表格可能不对齐,我想解决。在我制作的演示中,我有四个表,
我是一名优秀的程序员,十分优秀!