文字文稿1.docx (12.7 KB)
@ouchli 这些线是段落底部边框。 您可以使用以下代码来获取:
Document doc = new Document("C:\\Temp\\in.docx");
Paragraph p = doc.getFirstSection().getBody().getFirstParagraph();
System.out.println(p.getParagraphFormat().getBorders().getBottom().getColor());
System.out.println(LineStyle.getName(p.getParagraphFormat().getBorders().getBottom().getLineStyle()));
System.out.println(p.getParagraphFormat().getBorders().getBottom().getLineWidth());
你好,设置段落的边框属性时,调用该方法setBorderAttr,提示已经过时,请问有替代的方法吗
@ouchli 您需要从 "ParagraphFormat"中获取边框:
例如
para.getParagraphFormat().getBorders().getTop().setLineStyle(LineStyle.DOT_DASH);
para.getParagraphFormat().getBorders().getTop().setColor(Color.BLUE);
你好,请问如何获取文档章节标签的字体呢
image.png (649 字节)
在上图章节标题中,标签"1"的字体是Arial,标题文本"范围"的字体是宋体,
我理解使用paragraph.getRuns().get(0).getFont().getName()方法获取到的字体是标题文本的字体"宋体";
而使用paragraph.getListLabel().getFont().getName()方法应该获取到标签的字体,但实际上该方法获取到的字体仍是宋体,
请问该如何获取标签的字体
@ouchli paragraph.getListLabel().getFont().getName()
通常适用于列表标签。您可以尝试使用
para.getListFormat().getListLevel().getFont()
如果仍有问题,请在此处附上输入文件。
好的,明白了,谢谢~,,,,,
你好,如果我想获取全文中<>括起来的内容,可以使用正则匹配,通过document.getRange().replace()方法来获取,但是该方法只能在一个node中匹配正则
举个例子:
假设我要获取<>括起来的内容,我设置正则为<.*?>
此时调用document.getRange().replace()方法去匹配,当存在段落时,可以匹配到结果
但是当<>括起来的是多个段落时,就匹配不到了, 如:
<xxx,
xxx
xxxx>
请问我要如何才能获取到多个段落匹配的正则结果呢
@ouchli 您可以尝试在 <> 内的文本中添加书签来实现这一效果。
Document doc = new Document("input.docx");
FindReplaceOptions options = new FindReplaceOptions();
options.setReplacingCallback(new FindAndInsertBookmark("bookmark", true));
doc.getRange().replace("<", "", options);
options.setReplacingCallback(new FindAndInsertBookmark("bookmark", false));
doc.getRange().replace(">", "", options);
Bookmark bookmark = doc.getRange().getBookmarks().get("bookmark");
bookmark.setText("");
DocumentBuilder builder = new DocumentBuilder(doc);
builder.moveToBookmark("bookmark");
builder.writeln("New text");
doc.getRange().getBookmarks().remove("bookmark");
doc.save("output.docx");
private static class FindAndInsertBookmark implements IReplacingCallback {
private String bmName;
private boolean isStart;
public FindAndInsertBookmark(String bmName, Boolean isStart) {
this.bmName = bmName;
this.isStart = isStart;
}
@Override
public int replacing(ReplacingArgs e) {
Node currentNode = e.getMatchNode();
if (e.getMatchOffset() > 0)
currentNode = splitRun((Run) currentNode, e.getMatchOffset());
ArrayList<Run> runs = new ArrayList<>();
int remainingLength = e.getMatch().group().length();
while (remainingLength > 0 && currentNode != null && currentNode.getText().length() <= remainingLength) {
runs.add((Run) currentNode);
remainingLength -= currentNode.getText().length();
do {
currentNode = currentNode.getNextSibling();
} while (currentNode != null && currentNode.getNodeType() != NodeType.RUN);
}
if (currentNode != null && remainingLength > 0) {
splitRun((Run) currentNode, remainingLength);
runs.add((Run) currentNode);
}
Run run = runs.get(0);
if (isStart) {
run.getParentNode().insertBefore(new BookmarkStart(run.getDocument(), bmName), run);
} else {
run.getParentNode().insertAfter(new BookmarkEnd(run.getDocument(), bmName), run);
}
return ReplaceAction.SKIP;
}
}
private static Run splitRun(Run run, int position) {
Run afterRun = (Run)run.deepClone(true);
run.getParentNode().insertAfter(afterRun, run);
afterRun.setText(run.getText().substring(position));
run.setText(run.getText().substring(0, position));
return afterRun;
}
谢谢你的回答,还是有点看不太懂,如你所说加入书签后如何进行正则的搜索呢,烦请给一个例子,谢谢~
我还有一个问题,得到书签中内容后,如何获取书签所属的段落信息呢,以及如何获取书签中内容的字体信息呢
@ouchli 您可以使用以下代码获取段落:
Paragraph para = (Paragraph) bookmark.getBookmarkStart().getAncestor(NodeType.PARAGRAPH);
and if there is several paragraph you can use getNextSibling.
谢谢回答
再问一个问题,有这样一个场景,我想设置文档某段文字的字体颜色,代码运行后通过代码查看字体颜色是设置成功了,但是看实际修订后的文档字体颜色却没变,请问这是什么原因:
代码如下:
Node node = nodes.get(0);
FindReplaceOptions opt = new FindReplaceOptions();
Font applyFont = opt.getApplyFont();
Color blue = new Color(0, 0, 255);
applyFont.setColor(blue);
try {
node.getRange().replace(examStr, examStr, opt);
} catch (Exception e) {
throw new Exception(e.getMessage());
}
请问如何移除文档第一页中存在的分页符呢