我想使用Apache POI创建一个带有文本和图片的文档。文本的某些部分必须与图片交叉引用。我尝试按照这个问题的答案将AddExternalRelationship
方法更改为AddRelationship
,但没有成功:
如何在Apache POI Word中创建超链接?
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigInteger;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.BreakType;
import org.apache.poi.xwpf.usermodel.UnderlinePatterns;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFHyperlinkRun;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBookmark;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHyperlink;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STFldCharType;
public class CrossReference {
public static void main(String[] args) throws InvalidFormatException, FileNotFoundException, IOException {
XWPFDocument document = new XWPFDocument();
XWPFParagraph paragraph = document.createParagraph();
document.createParagraph();
document.createParagraph().createRun().addBreak(BreakType.PAGE);
XWPFParagraph pictureParagraph = document.createParagraph();
pictureParagraph.setSpacingAfter(0);
XWPFRun pictureRun = pictureParagraph.createRun();
String imgPath = "img.png";
pictureRun.addPicture(new FileInputStream(imgPath),
XWPFDocument.PICTURE_TYPE_PNG,
imgPath,
Units.toEMU(288),
Units.toEMU(288));
String anchor = "anchor";
XWPFParagraph captionParagraph = document.createParagraph();
XWPFRun captionRun = captionParagraph.createRun();
captionRun.setText("Figure ");
CTBookmark bookmark = captionParagraph.getCTP().addNewBookmarkStart();
bookmark.setName(anchor);
bookmark.setId(BigInteger.valueOf(0));
captionParagraph.createRun().getCTR().addNewFldChar().setFldCharType(STFldCharType.BEGIN);
captionParagraph.getCTP().addNewFldSimple().setInstr("SEQ Figure \\* ARABIC");
captionParagraph.createRun().getCTR().addNewFldChar().setFldCharType(STFldCharType.END);
captionParagraph.getCTP().addNewBookmarkEnd().setId(BigInteger.valueOf(0));
CTHyperlink ctHyperlink = paragraph.getCTP().addNewHyperlink();
ctHyperlink.setAnchor(anchor);
XWPFHyperlinkRun hyperlinkRun = new XWPFHyperlinkRun(ctHyperlink,
ctHyperlink.addNewR(), paragraph);
hyperlinkRun.setText("Figure 1");
hyperlinkRun.setUnderline(UnderlinePatterns.SINGLE);
FileOutputStream out = new FileOutputStream(new File("test.docx"));
document.write(out);
out.close();
document.close();
}
}
<w:p>
<w:hyperlink w:anchor="anchor">
<w:r>
<w:rPr>
<w:u w:val="single" />
</w:rPr>
<w:t>Figure 1</w:t>
</w:r>
</w:hyperlink>
</w:p>
<w:p />
<w:p>
<w:pPr>
<w:pStyle w:val="Normal" />
<w:rPr />
</w:pPr>
<w:r>
<w:rPr />
<w:t xml:space="preserve">Figure </w:t>
</w:r>
<w:r>
<w:rPr />
<w:fldChar w:fldCharType="begin" />
</w:r>
<w:r>
<w:rPr />
<w:instrText>REF Ref_Figure0_number_only \h</w:instrText>
</w:r>
<w:r>
<w:rPr />
<w:fldChar w:fldCharType="separate" />
</w:r>
<w:r>
<w:rPr />
<w:t>1</w:t>
</w:r>
<w:r>
<w:rPr />
<w:fldChar w:fldCharType="end" />
</w:r>
</w:p>
我发现问题的解决方案是通过书签而不是超链接获得的:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigInteger;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.BreakType;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.xmlbeans.impl.xb.xmlschema.SpaceAttribute.Space;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBookmark;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTOnOff;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSimpleField;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STFldCharType;
public class CrossReference {
public static void main(String[] args) throws InvalidFormatException, IOException {
XWPFDocument document = new XWPFDocument();
XWPFParagraph paragraph = document.createParagraph();
document.createParagraph().createRun().addBreak(BreakType.PAGE);
XWPFParagraph pictureParagraph = document.createParagraph();
pictureParagraph.setSpacingAfter(0);
XWPFRun pictureRun = pictureParagraph.createRun();
String imgPath = "img.png";
pictureRun.addPicture(new FileInputStream(imgPath),
XWPFDocument.PICTURE_TYPE_PNG,
imgPath,
Units.toEMU(288),
Units.toEMU(288));
XWPFParagraph captionParagraph = document.createParagraph();
XWPFRun captionRun = captionParagraph.createRun();
CTText ctText = captionRun.getCTR().addNewInstrText();
ctText.setSpace(Space.PRESERVE);
ctText.setStringValue("Figure ");
CTBookmark bookmark = captionParagraph.getCTP().addNewBookmarkStart();
bookmark.setName("Figure-1");
bookmark.setId(BigInteger.valueOf(0));
CTSimpleField ctSimpleField = captionParagraph.getCTP().addNewFldSimple();
ctSimpleField.setInstr("SEQ Figure \\* ARABIC");
CTR ctR = ctSimpleField.addNewR();
ctR.addNewRPr().setNoProof(CTOnOff.Factory.newInstance());
ctR.addNewT().setStringValue(Integer.toString(1));
captionParagraph.getCTP().addNewBookmarkEnd().setId(BigInteger.valueOf(0));
captionParagraph.setSpacingAfter(0);
paragraph.createRun().getCTR().addNewFldChar().setFldCharType(STFldCharType.BEGIN);
ctText = paragraph.createRun().getCTR().addNewInstrText();
ctText.setSpace(Space.PRESERVE);
ctText.setStringValue("REF Figure-1 \\h");
paragraph.createRun().getCTR().addNewFldChar().setFldCharType(STFldCharType.SEPARATE);
ctText = paragraph.createRun().getCTR().addNewT();
ctText.setSpace(Space.PRESERVE);
ctText.setStringValue("Figure ");
ctR = paragraph.createRun().getCTR();
ctR.addNewRPr().setNoProof(CTOnOff.Factory.newInstance());
ctR.addNewT().setStringValue(Integer.toString(1));
paragraph.createRun().getCTR().addNewFldChar().setFldCharType(STFldCharType.END);
FileOutputStream out = new FileOutputStream(new File("test.docx"));
document.write(out);
out.close();
document.close();
}
}
我刚刚开始用libGDX做原型,以了解它是如何工作的。我想实现一个网格(像象棋游戏),当我点击/触摸网格的一个盒子,这改变了它的形象。 我找到了一个很好的教程,但它只使用键盘监听器,在网络上,我找不到一个很好的例子来阐明这些机制。 我不明白的是:用什么来渲染框(目前我只使用了SpriteBatch和ShapeRenderer)以及如何检测何时哪个框被点击(我认为计算坐标不是一个好方法。我认为最好的
我正在创建一个Word VBA宏来插入一个包含图像及其标题的文本框,然后在主文档文本中创建对它的交叉引用。 但是Word在文本框中找不到标题。 下面是说明性代码: 如果标题是一个在主文档文本中内联的东西(比如,图片、表格或只是一个段落),它会找到它。但是如果标题在文本框或文本框中,无论是我在文本框中创建的标题段落,还是我简单地单击文本框并执行插入标题(实际上在框架下方创建了一个文本框),我得到零。
我正在读这本书:Flask Web developmen。下面是这本书在地址栏中添加图标的代码: 我的问题是:为什么它需要两个链接来添加一个图标。在HTML中,这个oneline就足以完成这个任务了。不是吗?
我正在当前视图底部的UIViewController中添加一个视图作为子视图。我可以使用alpha制作淡入淡出动画,但我想将其显示为类似键盘弹出窗口的幻灯片。 如何设置动画?
在图片和图片模式被激活后,我试图从任务中杀死活动,到目前为止,我尝试,,,以编程方式设置,但活动仍然在后台存在。 当我们单击该十字图标时,我们可以在中看到相同的行为。应用程序仍然存在于后台,但我需要残忍地杀死它:) 这就是我如何发射意图: 重要提示:当此活动不进入时,一切都按预期工作,并且在我需要时活动会正常杀死自己! 当我点击这个十字图标时: pipActivity中的onStop被调用: 此时
我有一个关于在LinkedList中添加“像素”的问题。 完成方法: > public Pixel pixelAt(int zeile,int spalte)这个方法在“图片”的行/列中返回一个后面的“Pixel”。如果没有黑色“像素”,则返回NULL。 public void printBild()为黑色像素打印一个“*”,为白色像素打印一个“-”。 公共空像素(int zeile,int sp