我有一些占位符的docx文档。现在我应该用其他内容替换它们,并保存新的docx文档。我从docx4j开始,发现了这个方法:
public static List<Object> getAllElementFromObject(Object obj, Class<?> toSearch) {
List<Object> result = new ArrayList<Object>();
if (obj instanceof JAXBElement) obj = ((JAXBElement<?>) obj).getValue();
if (obj.getClass().equals(toSearch))
result.add(obj);
else if (obj instanceof ContentAccessor) {
List<?> children = ((ContentAccessor) obj).getContent();
for (Object child : children) {
result.addAll(getAllElementFromObject(child, toSearch));
}
}
return result;
}
public static void findAndReplace(WordprocessingMLPackage doc, String toFind, String replacer){
List<Object> paragraphs = getAllElementFromObject(doc.getMainDocumentPart(), P.class);
for(Object par : paragraphs){
P p = (P) par;
List<Object> texts = getAllElementFromObject(p, Text.class);
for(Object text : texts){
Text t = (Text)text;
if(t.getValue().contains(toFind)){
t.setValue(t.getValue().replace(toFind, replacer));
}
}
}
}
但这很少起作用,因为通常占位符会在多个文本运行中拆分。
如何解决这个问题?
您可以使用variableReplace
来实现这一点,这在其他答案出现时可能还不存在。这并不执行查找/替换本身,而是在占位符上工作,例如${myField}
java.util.HashMap mappings = new java.util.HashMap();
VariablePrepare.prepare(wordMLPackage);//see notes
mappings.put("myField", "foo");
wordMLPackage.getMainDocumentPart().variableReplace(mappings);
请注意,您没有将${myField}
作为字段名传递;相反,传递未转义的字段名myfield
-这相当不灵活,因为当前的占位符必须是${xyz}
格式,而如果可以传递任何内容,则可以将其用于任何查找/替换。Docx4j.net中的C#人员也可以使用此功能
有关VariableReplace
的更多信息,请参见此处;VariablePrepare
请参见此处
在Atom中,对你文件或者项目中的文本进行查找或者替换,非常快速而且容易。 cmd-F 在缓冲区中查找 cmd-shift-f 在整个项目中查找 如果你执行了这些命令,你屏幕的底部会出现一个“Find and Replace”面板。 你可以按下cmd-F,输入需要搜索的字符串,并且多次按下回车(或者cmd-G,或者“Find Next”按钮)来在当前文件中搜索,循环查找当前文件中的匹配内容。“Fi
我试图在表格的第2列中找到所有文本为“0.118”的单元格,并为该行列出命令列表。我还试图从该行中找到的选定文本的第5列中获取值,然后减去我在该行的输入框中输入的值。 我遇到的问题是,它只改变了我找到的“0.118”之一,而不是每行中的所有内容。 我不知道如何搜索选定行的列(5)。 任何帮助都将不胜感激。 非常感谢。
从word文件中,我想替换字符的交替出现。通过使用查找
查找工具栏 快捷键 Mac: Command + F Windows\/Linux: Ctrl + F 先选中复制,然后调出查找工具栏,选中部分就被自动填入搜索框,按回车键快速搜索。 操作步骤(快捷键): Command + C (复制单词) Command + F (调出查找工具栏) Enter (回车开始查找) 在查找结果中跳转 下一个匹配到的结果 快捷键: Mac: Command + G
我有一个与XPages-docx4j类似的问题,用文本替换书签,但我想保留样式。我的书签不在文本上(因为它是由Google Docs创建的docx),我想保留书签后面的文本,以便将其包含在书签中并保持其样式。例如: 我找到了删除书签后文本的解决方案,我找到了在书签内添加文本的解决方法,但我无法保留样式。 我不是以英语为母语的人,所以如果我不清楚,请毫不犹豫地问我。
如何使用PDFBox2.0找到和替换PDF文档中的文本,他们拉出了旧的示例,它的语法不再有效,所以我想知道这是否仍然可能,如果是,最好的方法是什么。谢了!