我在创建表时遇到了问题.继承我的代码:
Tbl projectTable = TblFactory.createTable(rows, cols, cellWidthTwips);
Tr tr = (Tr) projectTable.getContent().get(0);
Tc tc = (Tc) tr.getContent().get(0);
tc.getContent().add( this.mainDocument.createParagraphOfText("Cell 1"));
List<Object> lines = mainDocument.getContent();
lines.add(5, projectTable);
Run Code Online (Sandbox Code Playgroud)
该表添加到所需位置,但没有任何边框.
当我使用该
wordMLPackage.getMainDocumentPart().addObject(projectTable);
方法时,一切正常.带边框的通缉表.
我的错误在哪里:(?
编辑:这里有两个链接到我的XML代码的图像(无法上传,因为我没有足够的声誉)
这是复制粘贴的XML代码:
-<w:p w:rsidP="00CD4679" w:rsidRDefault="00F63A9F" w:rsidR="00CD4679" w:rsidRPr="00CD4679">-<w:pPr>-<w:rPr><w:b/></w:rPr></w:pPr>-<w:r>-<w:rPr><w:b/></w:rPr><w:t>test</w:t></w:r></w:p>-<w:tbl>-<w:tblPr><w:tblW w:w="0" w:type="auto"/><w:tblLook w:val="04A0"/></w:tblPr>-<w:tblGrid><w:gridCol w:w="2017"/><w:gridCol w:w="1473"/><w:gridCol w:w="1451"/><w:gridCol w:w="1492"/><w:gridCol w:w="1423"/><w:gridCol w:w="1432"/></w:tblGrid>-<w:tr w:rsidR="00B94E3A" w:rsidTr="00F63A9F">-<w:tc>-<w:tcPr><w:tcW w:w="2017" w:type="dxa"/></w:tcPr><w:p w:rsidRDefault="00B94E3A" w:rsidR="00B94E3A"/>-<w:p w:rsidRDefault="00F63A9F" w:rsidR="00B94E3A">-<w:r><w:t>test</w:t></w:r></w:p></w:tc>-<w:tc>-<w:tcPr><w:tcW w:w="1473" w:type="dxa"/></w:tcPr>-<w:p w:rsidRDefault="00F63A9F" w:rsidR="00B94E3A">-<w:r><w:t>test</w:t></w:r></w:p></w:tc>-<w:tc>-<w:tcPr><w:tcW w:w="1451" w:type="dxa"/></w:tcPr>-<w:p w:rsidRDefault="00F63A9F" w:rsidR="00B94E3A">-<w:r><w:t>test</w:t></w:r></w:p></w:tc>-<w:tc>-<w:tcPr><w:tcW w:w="1492" w:type="dxa"/></w:tcPr>-<w:p w:rsidRDefault="00F63A9F" w:rsidR="00B94E3A">-<w:r><w:t>test</w:t></w:r></w:p></w:tc>-<w:tc>-<w:tcPr><w:tcW w:w="1423" w:type="dxa"/></w:tcPr><w:p w:rsidRDefault="00B94E3A" w:rsidR="00B94E3A"/>-<w:p w:rsidRDefault="00F63A9F" w:rsidR="00B94E3A">-<w:r><w:t>test</w:t></w:r></w:p></w:tc>-<w:tc>-<w:tcPr><w:tcW w:w="1432" w:type="dxa"/></w:tcPr><w:p w:rsidRDefault="00B94E3A" w:rsidR="00B94E3A"/>-<w:p w:rsidRDefault="00F63A9F" …Run Code Online (Sandbox Code Playgroud) 我使用docx4j来读取和解析.docx文件,但是当我遍历段落时,它会在一次传递中读取而不是所有段落.下面是我正在使用的代码示例.
private void replaceAcrAndDef(String acrName, String acrParensName, String oldDef, String newDef){
String XPATH_TO_SELECT_TEXT_NODES = "//w:t";
List<Object> paragraphs = template.getMainDocumentPart().getJAXBNodesViaXPath(XPATH_TO_SELECT_TEXT_NODES, true);
for (Object obj : paragraphs){
Text text = (Text) ((JAXBElement)obj).getValue();
String textValue = text.getValue();
System.out.println(textValue);
}
Run Code Online (Sandbox Code Playgroud)
在上面的for循环的一次传递期间,这将作为第一段读取 -
"团队通过为任务,测试和管理以及一般服务网络和系统提供直接的MDA经验,对这些要求有深刻的理解.通过对任务,流程和优先级的既定理解,培养低风险,反应灵敏的团队的好处.使用基于综合的"
但它缺少该段的最后部分.这将在连续的传球中出现.我在这做错了什么.
该段的全部内容如下:
团队通过为任务,测试和管理以及一般服务网络和系统提供直接的MDA经验,对需求有深刻的理解.低风险,反应迅速的团队的好处是对任务,流程和优先事项有着深刻的理解.我们使用基于角色的综合信息技术(RBA)方法与合作承包商,现有流程和补充流程的增加协同工作.
我不知道是否有办法获得整个段落,但是如果有的话会很好,因为我需要逐段更换字符串.
我有一些占位符的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 …Run Code Online (Sandbox Code Playgroud) 在打印一些段落后,我需要插入一个分页符。我发现了一个用于插入分页符的函数,但它仅插入一个空段而不插入分页符。
这是功能:
private static void addPageBreak() {
MainDocumentPart documentPart = wp.getMainDocumentPart();
Br breakObj = new Br();
breakObj.setType(STBrType.PAGE);
P paragraph = factory.createP();
paragraph.getContent().add(breakObj);
documentPart.getJaxbElement().getBody().getContent().add(paragraph);
}
Run Code Online (Sandbox Code Playgroud)
如何修复此功能以插入整个分页符?
我一直在尝试将doc/docx文件转换为html,我发现最好的选择是docx4j.任何人都可以帮我直接命令行来完成这项工作.
我试过了:
java -cp docx4j.jar:log4j-1.2.15.jar org.docx4j.samples.CreateHtml [input.docx]
Run Code Online (Sandbox Code Playgroud)
作为回应,我希望HTML输出(无论是控制台还是文件).
我正在使用 DOCX4J 将 DOCX 转换为 HTML。我已成功完成转换并获得了 html 格式。我将使用 html 格式将其嵌入为 EMAIL 正文以发送电子邮件。但我有一些问题,如下所示....
请找到我写的代码,
WordprocessingMLPackage wordMLPackage;
wordMLPackage = Docx4J.load(new java.io.File(resourcePath2));
HTMLSettings htmlSettings = Docx4J.createHTMLSettings();
htmlSettings.setImageDirPath(imageFolder + resourcePath2 + "_files");
htmlSettings.setImageTargetUri(imageFolder +resourcePath2.substring(resourcePath2.lastIndexOf("/")+1) + "_files");
htmlSettings.setWmlPackage(wordMLPackage);
OutputStream os;
os = new ByteArrayOutputStream();
Docx4jProperties.setProperty("docx4j.Convert.Out.HTML.OutputMethodXML", true);
Docx4J.toHTML(htmlSettings, os, Docx4J.FLAG_SAVE_FLAT_XML);
DOCX = ((ByteArrayOutputStream)os).toString();
Run Code Online (Sandbox Code Playgroud) 我尝试使用pptx4j库生成pptx.我可以成功生成一个pptx.然后我将代码应用于在jboss 7服务器上运行的巨大项目.项目已成功部署在服务器上.但是当我试图运行应用程序时,它会给出以下异常.
java.lang.NoClassDefFoundError:com/sun/xml/internal/bind/marshaller/NamespacePrefixMapper
代码中的后续行发生了该异常.
PresentationMLPackage presentationMLPackage = PresentationMLPackage
.createPackage();
Run Code Online (Sandbox Code Playgroud)
是否有一种特殊的方式在jboss 7服务器上运行docx4j库.我在互联网上搜索更多,但我找不到解决方案.
我正在使用 Docx4j 从模板创建文档。
我找不到如何创建斜体段落(HTML 中的 <em> )的方法。
这是一个创建 Paragraph 的方法示例,其中有一个选项可以在Bold 中进行。
private static org.docx4j.wml.P createParagraph(String paragraphContent, boolean addNewLine, boolean bold) {
org.docx4j.wml.ObjectFactory factory = Context.getWmlObjectFactory();
org.docx4j.wml.P p = factory.createP();
org.docx4j.wml.R run = factory.createR();
p.getContent().add(run);
org.docx4j.wml.Text text = factory.createText();
text.setValue(paragraphContent);
run.getContent().add(text);
if(bold){
org.docx4j.wml.RPr rpr = factory.createRPr();
org.docx4j.wml.BooleanDefaultTrue b = new org.docx4j.wml.BooleanDefaultTrue();
b.setVal(true);
rpr.setB(b);
run.setRPr(rpr);
}
if (addNewLine) {
run.getContent().add(factory.createBr());
}
return p;
}
Run Code Online (Sandbox Code Playgroud)
有人知道如何制作斜体段落吗?
我正在使用Docx4j在swing应用程序中生成一个word文档.我想在标题中添加一个图片.文档已成功创建,但图片未显示.以下是应用程序的代码片段.我使用的是docx4j-nightly-20141016.jar文件.
import org.docx4j.wml.ObjectFactory;
public class WordDoc {
private WordprocessingMLPackage wordMLPackage;
private ObjectFactory factory;
private Hdr header;
public WordDoc() {
}
public void createWordDoc() throws Docx4JException, IOException, Exception {
wordMLPackage = WordprocessingMLPackage.createPackage();
factory = Context.getWmlObjectFactory();
Relationship relationship = createHeaderPart();
createHeaderReference(relationship);
wordMLPackage.getMainDocumentPart().addParagraphOfText("Hello Word!");
File file = new File("src/resources/images/logo.jpg");
byte[] bytes = convertImageToByteArray(file);
addImageInline(bytes);
wordMLPackage.save(new java.io.File("src/files/HelloWord14.docx"));
}
private Relationship createHeaderPart() throws InvalidFormatException {
HeaderPart headerPart = new HeaderPart();
headerPart.setPackage(wordMLPackage);
headerPart.setJaxbElement(createHeader("Text"));
return wordMLPackage.getMainDocumentPart().addTargetPart(headerPart);
}
private Hdr createHeader(String content) {
header = factory.createHdr(); …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Docx4J ( https://github.com/plutext/Docx4j4Android4 ) 来读取 Word 文件的内容。但是,使用以下代码,我的程序仅读取 Word 文件(存储在documentLines)的正文内容(不读取页眉或页脚)。如何让我的程序读取文件页眉和页脚的内容?
下面是我的代码:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == READ_IN_FILE) { // When a result has been received, check if it is the result for READ_IN_FILE
if (resultCode == Activity.RESULT_OK) { // heck if the operation to retrieve the Activity's result is successful
// Attempt to retrieve the file
try {
var uri = data?.data // Retrieve the file's resource locator …Run Code Online (Sandbox Code Playgroud) 我试图在java中读取一个文件,以下是代码:
public void readFile(String fileName){
try {
BufferedReader reader= new BufferedReader(new FileReader(fileName));
String line=null;
while((line=reader.readLine()) != null ){
System.out.println(line);
}
}catch (Exception ex){}
}
Run Code Online (Sandbox Code Playgroud)
它在txt文件的情况下工作正常.但是在docx文件的情况下,它是打印奇怪的字符.我怎样才能在Java中读取.docx文件.
我正在尝试在 XPage 应用程序中安装 docx4j 开源 java 库,但到目前为止尚未成功。我已经下载了 docx4j-3.1.0.jar 并将其添加到 domino 服务器和本地计算机上的 \jvm\lib\ext 文件夹中。我还使用 Package Explorer 视图将 docx4j-3.1.0.jar 添加到 WebContent\WEB-INF\lib 文件夹中,然后右键单击 .jar 并选择“构建路径”->“添加到构建路径”这样 .jar 现在就出现在“引用的库”下。
在我用来测试的 Java 类中,我看到消息“此元素没有附加源,并且在附加 Javadoc 中找不到 Javadoc”。我的代码如下:
package TESTPackage;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
public class JavaDoc {
public void createJavaDoc() {
try {
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
wordMLPackage.getMainDocumentPart().addParagraphOfText("Hello Word!");
wordMLPackage.save(new java.io.File("C:\\Temp\\HelloWord1.docx"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
关于我还必须做什么有什么建议吗?
如何使用 POI API 或 Docx4j 将“.dotx”Word 模板转换为纯“.docx”?