如何使用 Apache POI 将带边框的图像添加到 Word 中的 table 单元格中?

How to add image with border into table cell in Word with Apache POI?

我正在尝试使用 Apache POI 在 Microsoft Word 中将带边框的图片插入 table。我可以使用以下代码将图像添加到单元格中:

// table is a XWPFTable object instantiated earlier in the code
XWPFParagraph paragraph = table.getRow(0).getCell(0).addParagraph();
XWPFRun run = paragraph.createRun();
FileInputStream fis = new FileInputStream("C:\ [filepath for the image]");
run.addPicture(fis, XWPFDocument.PICTURE_TYPE_PNG, "Name", 6217920, 3474720);

我尝试寻找给图像添加边框的方法,但我无法在网上找到任何资源。我遇到了这个 link: 但在这种情况下它没有帮助。

(具体来说,我想在图像周围添加一条 2 1/4 磅粗的黑色实线)

有人知道怎么做吗?提前致谢。

一如既往如果当前高级 apache poi 类 不提供某些 Office Open XML 功能,请执行以下操作:

首先执行提供的操作,然后查看您创建的基础 XML。在这种情况下,执行:

// table is a XWPFTable object instantiated earlier in the code
XWPFParagraph paragraph = table.getRow(0).getCell(0).addParagraph();
XWPFRun run = paragraph.createRun();
FileInputStream fis = new FileInputStream("C:\ [filepath for the image]");
XWPFPicture picture = run.addPicture(fis, XWPFDocument.PICTURE_TYPE_PNG, "Name", Units.pixelToEMU(300), Units.pixelToEMU(150));
System.out.println(picture.getCTPicture());

你会得到类似的东西:

<xml-fragment xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:rel="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
  <pic:nvPicPr>
    <pic:cNvPr id="0" name="Picture 0" descr="Name"/>
    <pic:cNvPicPr>
      <a:picLocks noChangeAspect="true"/>
    </pic:cNvPicPr>
  </pic:nvPicPr>
  <pic:blipFill>
    <a:blip rel:embed="rId2"/>
    <a:stretch>
      <a:fillRect/>
    </a:stretch>
  </pic:blipFill>
  <pic:spPr>
    <a:xfrm>
      <a:off x="0" y="0"/>
      <a:ext cx="2857500" cy="1428750"/>
    </a:xfrm>
    <a:prstGeom prst="rect">
      <a:avLst/>
    </a:prstGeom>
  </pic:spPr>
</xml-fragment>

现在打开 Word 中的结果并添加您想要的内容。在这种情况下,请在图片周围添加边框。然后保存结果,解压缩 *.docx Zip 存档并查看 /word/document.xml 以了解更改内容。

你会发现类似:

<a:ln w="28575">
  <a:solidFill>
    <a:srgbClr val="000000"/>
  </a:solidFill>
</a:ln>

已添加到 <pic:spPr>

现在尝试使用 apache poi 的低级别 ooxml-schema 类 创建它:

...
XWPFPicture picture = run.addPicture(fis, XWPFDocument.PICTURE_TYPE_PNG, "Name", Units.pixelToEMU(300), Units.pixelToEMU(150));
System.out.println(picture.getCTPicture());

picture.getCTPicture().getSpPr().addNewLn().setW(Units.toEMU(2.25));
picture.getCTPicture().getSpPr().getLn().addNewSolidFill().addNewSrgbClr().setVal(new byte[]{0,0,0});
System.out.println(picture.getCTPicture());
...