- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将一些形状和 Logo 文件添加到我的 word docx 文档的标题中。添加图片对我有用,但我没有找到任何如何添加形状的解决方案。谁能帮助我吗?
String imgFile="logo.png";
XWPFDocument document = new XWPFDocument(new FileInputStream("myfile.docx"));
CTSectPr sectPr = document.getDocument().getBody().addNewSectPr();
XWPFHeaderFooterPolicy headerFooterPolicy = new XWPFHeaderFooterPolicy(document, sectPr);
XWPFHeader header = headerFooterPolicy.createHeader(XWPFHeaderFooterPolicy.DEFAULT);
XWPFParagraph paragraph = header.getParagraphArray(0);
paragraph.setAlignment(ParagraphAlignment.CENTER);
XWPFRun run = paragraph.createRun();
XWPFPicture picture = run.addPicture(new FileInputStream(imgFile), XWPFDocument.PICTURE_TYPE_PNG, imgFile, Units.toEMU(195), Units.toEMU(22));
String blipID = "";
for(XWPFPictureData picturedata : header.getAllPackagePictures()) {
blipID = header.getRelationId(picturedata);
}
picture.getCTPicture().getBlipFill().getBlip().setEmbed(blipID); //now they have a blipID too
最后, header 应类似于 this
谢谢
最佳答案
由于 apache poi
XWPF
到目前为止确实处于测试状态,因此只有确切知道 Word
将如何存储这些事情才有可能它的内容到 XML
中。然后就可以解决 apache poi
XWPF
的不足之处。您已经使用过这样的解决方法,可以在将图片添加到页眉或页脚中时纠正丢失的 blipID
。
了解 Word
如何将其内容存储到 XML
中并不是什么复杂的事情。 *.docx
文件只是一个 ZIP
文件。如果使用 Zip 软件解压缩该文件,则可以简单地查看 XML 文件。
据我所知,apache poi
不直接支持在 Word 文档中添加形状(在本例中为文本框)。为此,需要使用低级底层对象(在本例中为 CTGroup
和 CTShape
)。
示例:(代码应该是不言自明的)
import java.io.*;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.*;
import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPicture;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTxbxContent;
import com.microsoft.schemas.vml.CTGroup;
import com.microsoft.schemas.vml.CTShape;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTabStop;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTabJc;
import org.w3c.dom.Node;
import java.math.BigInteger;
public class CreateWordHeaderFooterTextBoxPicture {
public static void main(String[] args) throws Exception {
XWPFDocument doc= new XWPFDocument();
// the body content
XWPFParagraph paragraph = doc.createParagraph();
XWPFRun run=paragraph.createRun();
run.setText("The Body:");
paragraph = doc.createParagraph();
run=paragraph.createRun();
run.setText("Lorem ipsum....");
// create header start
XWPFHeaderFooterPolicy headerFooterPolicy = doc.createHeaderFooterPolicy();
XWPFHeader header = headerFooterPolicy.createHeader(XWPFHeaderFooterPolicy.DEFAULT);
// header's first paragraph
paragraph = header.getParagraphArray(0);
if (paragraph == null) paragraph = header.createParagraph();
paragraph.setAlignment(ParagraphAlignment.LEFT);
// create tab stops
CTTabStop tabStop = paragraph.getCTP().getPPr().addNewTabs().addNewTab();
tabStop.setVal(STTabJc.CENTER);
int twipsPerInch = 1440;
tabStop.setPos(BigInteger.valueOf(3 * twipsPerInch));
tabStop = paragraph.getCTP().getPPr().getTabs().addNewTab();
tabStop.setVal(STTabJc.RIGHT);
twipsPerInch = 1440;
tabStop.setPos(BigInteger.valueOf(6 * twipsPerInch));
// first run in header's first paragraph, to be for first text box
run = paragraph.createRun();
// create inline text box in run
CTGroup ctGroup = CTGroup.Factory.newInstance();
CTShape ctShape = ctGroup.addNewShape();
ctShape.setStyle("width:80pt;height:24pt");
CTTxbxContent ctTxbxContent = ctShape.addNewTextbox().addNewTxbxContent();
XWPFParagraph textboxparagraph = new XWPFParagraph(ctTxbxContent.addNewP(), (IBody)header);
XWPFRun textboxrun = textboxparagraph.createRun();
textboxrun.setText("The TextBox 1...");
textboxrun.setFontSize(10);
Node ctGroupNode = ctGroup.getDomNode();
CTPicture ctPicture = CTPicture.Factory.parse(ctGroupNode);
CTR cTR = run.getCTR();
cTR.addNewPict();
cTR.setPictArray(0, ctPicture);
// add tab to run
run.addTab();
// second run in header's first paragraph, to be for logo picture
run = paragraph.createRun();
// add the picture in the headers run
String imgFile="Logo.png";
XWPFPicture picture = run.addPicture(new FileInputStream(imgFile), XWPFDocument.PICTURE_TYPE_PNG, imgFile, Units.toEMU(195), Units.toEMU(22));
String blipID = "";
for(XWPFPictureData picturedata : header.getAllPackagePictures()) {
blipID = header.getRelationId(picturedata);
}
picture.getCTPicture().getBlipFill().getBlip().setEmbed(blipID);
// add tab to run
run.addTab();
// third run in header's first paragraph, to be for second text box
run = paragraph.createRun();
// create inline text box in run
ctGroup = CTGroup.Factory.newInstance();
ctShape = ctGroup.addNewShape();
ctShape.setStyle("width:80pt;height:24pt");
ctTxbxContent = ctShape.addNewTextbox().addNewTxbxContent();
textboxparagraph = new XWPFParagraph(ctTxbxContent.addNewP(), (IBody)header);
textboxrun = textboxparagraph.createRun();
textboxrun.setText("The TextBox 2...");
textboxrun.setFontSize(10);
ctGroupNode = ctGroup.getDomNode();
ctPicture = CTPicture.Factory.parse(ctGroupNode);
cTR = run.getCTR();
cTR.addNewPict();
cTR.setPictArray(0, ctPicture);
// create header end
// create footer start
XWPFFooter footer = headerFooterPolicy.createFooter(XWPFHeaderFooterPolicy.DEFAULT);
paragraph = footer.getParagraphArray(0);
if (paragraph == null) paragraph = footer.createParagraph();
paragraph.setAlignment(ParagraphAlignment.CENTER);
run = paragraph.createRun();
run.setText("The Footer:");
doc.write(new FileOutputStream("test.docx"));
}
}
关于java - Apache POI XWPF 添加形状到标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40302326/
我有一个包含单个表的 .docx 文件。我想删除从第 2 行到末尾的所有文本。但是,方法 myTable.getRow(somecounter).getCell(somecounter2).setTe
我正在尝试创建一个包含一列的简单表格。 我创建一个新行,并在每行中创建一个新段落。问题是每一行都以一个空行开头 - 我猜是新段落创建了它。 我之前尝试设置间距、缩进等,但没有成功。 fo
我正在 JavaFX 中编写一个程序,用于转换没有缩进的文章,例如 MLA 样式的文档。我现在的问题是,如何为特定的 xwpfParagraph 启用悬挂缩进?我正在使用 Apache poi 3.1
我正在尝试使用 POI 将 word 文件转换为 txt 文件,但是当我使用 org.apache.poi.xwpf.usermodel.XWPFDocument 时它告诉我说“无法解析 xwpf”
XWPF 段落 POI -我想创建段落,但在本段落的最后一个文本或最后一行中没有自动换行。如何设置......谢谢.... String kalimat="Aaaa bbb ccc ddd eee f
我的目标是使用 Apache POI 在 Java 中处理 .docx 文档。我想从文档中提取所有内容来创建一个新文档,但仅限于我可以从处理后的文档中选择的特定内容。到目前为止,这适用于表格和文本,但
XWPF Word 文档中存在许多读取和编辑/替换书签的示例。但我想创建一个文档并创建新书签。创建文档 - 没问题: private void createWordDoc() throws IOExc
如何更改所选单词的字体颜色?我想为此创建一个函数,但我的水平对于这个 api 来说太基础了... 这是我的伪鳕鱼: public String setTextColor(String word){
对此进行了一些研究,过去似乎存在与此相关的错误,我不确定它们是否在最新版本中得到解决。 我正在阅读一个 docx 模板,进行一些修改并输出它。我正在复制文档的所有元素,除了位图之外,位图应包含文本的位
我正在尝试将一些形状和 Logo 文件添加到我的 word docx 文档的标题中。添加图片对我有用,但我没有找到任何如何添加形状的解决方案。谁能帮助我吗? String imgFile="logo.
我正在尝试将一些形状和 Logo 文件添加到我的 word docx 文档的标题中。添加图片对我有用,但我没有找到任何如何添加形状的解决方案。谁能帮助我吗? String imgFile="logo.
我正在尝试使用 Java/Coldfusion 中的 Apache Poi 构建一个 word 文档。到目前为止,它让我可以做很多我想要的格式,除了段落的行间距。有谁知道我如何将段落设置为单行间距?它
本文整理了Java中org.apache.poi.xwpf.usermodel.XWPFHeaderFooter类的一些代码示例,展示了XWPFHeaderFooter类的具体用法。这些代码示例主要来
本文整理了Java中org.apache.poi.xwpf.usermodel.XWPFStyle类的一些代码示例,展示了XWPFStyle类的具体用法。这些代码示例主要来源于Github/Stack
本文整理了Java中org.apache.poi.xwpf.usermodel.XWPFRelation类的一些代码示例,展示了XWPFRelation类的具体用法。这些代码示例主要来源于Github
本文整理了Java中org.apache.poi.xwpf.usermodel.XWPFPicture类的一些代码示例,展示了XWPFPicture类的具体用法。这些代码示例主要来源于Github/S
我尝试使用 tblPr 元素及其属性 tblpX 和 tblpY 来定位表格。我的问题是,当我打开 .docx 文件时,表格位于页面的左上角,忽略 tblpX 和 tblPY 值。您可以找到有关 .d
我想创建一个普通表格,并将其方向设置为“从右到左”“可以使用此选项设置Table Direction”,并使其对齐为“从左到右”,可以使用此选项设置Table Alignment 我已经尝试过这个:
我知道,HWPF 有这个功能,但我在 XWPF 中找不到任何类似的功能。 也许有解决此问题的方法。如果您知道一些,请与我分享。 提前致谢! 最佳答案 在 Word Office OpenXML 中,自
我正在尝试从使用 Apache poi XWPF 生成的 .docx 文档中删除一段。我可以使用 HWPF 轻松地使用 .doc word 文档来完成此操作,如下所示: for (String
我是一名优秀的程序员,十分优秀!