我试图将内容从.docx中的特定段落复制到另一个空的.docx.我遇到的问题是来自source.docx的样式,项目符号,编号等未保留在目标.docx中.这是我的代码
任何人都可以告诉我上面的代码中添加了哪些更改?提前致谢!!
public class WordFinal {
public static void main(String[] args) throws IOException, XmlException {
XWPFDocument doc = new XWPFDocument(new FileInputStream("source.docx"));
XWPFDocument destDoc =new XWPFDocument();
OutputStream out = new FileOutputStream("Destination.docx");
XWPFParagraph pr =doc.getParagraphs()[1];
String copy=pr.getText();
XWPFParagraph paragraphOne = destDoc.createParagraph();
XWPFRun paragraphOneRunOne = paragraphOne.createRun();
paragraphOneRunOne.setText(copy);
destDoc.write(out);
}
}
Run Code Online (Sandbox Code Playgroud) 如何将org.docx4j.openpackaging.packages.WordprocessingMLPackage实例保存到ByteArrayInputStream中,然后可以从服务器下载.
谢谢.
我能够使用 docx4j ( http://www.docx4java.org )成功创建一个简单的项目。这个简单的项目成功地创建并写入了 .docx 文档。现在我试图在一个更大的项目中完成同样的事情。这个更大的项目是一个在 JBoss AS 7.1 中运行的 web 应用程序。但是,在我的第一个与 docx4j 相关的代码行中:
WordprocessingMLPackage wmlp = WordprocessingMLPackage.createPackage();
Run Code Online (Sandbox Code Playgroud)
它遇到了一个错误:
java.lang.NoClassDefFoundError: Could not initialize class org.docx4j.jaxb.Context
at org.docx4j.openpackaging.parts.JaxbXmlPart.<init>(JaxbXmlPart.java:79) [docx4j-2.8.1.jar:]
at org.docx4j.openpackaging.parts.JaxbXmlPartXPathAware.<init>(JaxbXmlPartXPathAware.java:64) [docx4j-2.8.1.jar:]
at org.docx4j.openpackaging.parts.WordprocessingML.DocumentPart.<init>(DocumentPart.java:157) [docx4j-2.8.1.jar:]
at org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart.<init>(MainDocumentPart.java:76) [docx4j-2.8.1.jar:]
at org.docx4j.openpackaging.packages.WordprocessingMLPackage.createPackage(WordprocessingMLPackage.java:432) [docx4j-2.8.1.jar:]
at org.docx4j.openpackaging.packages.WordprocessingMLPackage.createPackage(WordprocessingMLPackage.java:421) [docx4j-2.8.1.jar:]
at foo.servlets.bar.DocxServlet.doGet(DocxServlet.java:101) [classes:]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:734) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
at foo.includes.other.ServletNameSetFilter.doFilter(ServletNameSetFilter.java:83) [fooClasses.jar:]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
at foo.includes.other.HtmlEscapeFilter.doFilter(HtmlEscapeFilter.java:67) [fooClasses.jar:]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
at foo.includes.other.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:64) [fooClasses.jar:] …Run Code Online (Sandbox Code Playgroud) 我想在我的 Word 文档中使用 docx4j 创建一个带有项目符号的未编号列表。我发现下面的代码应该可以完成这项工作。但无论我尝试什么,生成的列表都是一个编号列表!我使用Word 2010,德语版和docx4j-2.8.1。
wordMLPackage = WordprocessingMLPackage.createPackage();
ObjectFactory factory = new org.docx4j.wml.ObjectFactory();
P p = factory.createP();
org.docx4j.wml.Text t = factory.createText();
t.setValue(text);
org.docx4j.wml.R run = factory.createR();
run.getContent().add(t);
p.getContent().add(run);
org.docx4j.wml.PPr ppr = factory.createPPr();
p.setPPr(ppr);
// Create and add <w:numPr>
NumPr numPr = factory.createPPrBaseNumPr();
ppr.setNumPr(numPr);
// The <w:ilvl> element
Ilvl ilvlElement = factory.createPPrBaseNumPrIlvl();
numPr.setIlvl(ilvlElement);
ilvlElement.setVal(BigInteger.valueOf(0));
// The <w:numId> element
NumId numIdElement = factory.createPPrBaseNumPrNumId();
numPr.setNumId(numIdElement);
numIdElement.setVal(BigInteger.valueOf(1));
wordMLPackage.getMainDocumentPart().addObject(p);
Run Code Online (Sandbox Code Playgroud)
有人可以帮我生成一个真正的无序、项目符号列表吗?!
我能够将文本和段落添加到单词中,并用文本替换任何合并字段,但我需要使用docx4j添加新的合并字段来创建单词模板.我怎样才能做到这一点?
我是否wordMLPackage.getMainDocumentPart().addTargetPart(targetpart);用于添加合并字段.如果是这样的话?
编辑:
将示例单词上传到http://webapp.docx4java.org/OnlineDemo/PartsList.html和对象表示部分后,我可能需要添加org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart对象?
但我仍然不明白如何添加Mergefield.我还生成了以下xml来找到我能得到的任何线索:
<w:document xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:ns21="urn:schemas-microsoft-com:office:powerpoint" xmlns:ns23="http://schemas.microsoft.com/office/2006/coverPageProps" xmlns:dsp="http://schemas.microsoft.com/office/drawing/2008/diagram" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:odx="http://opendope.org/xpaths" xmlns:odgm="http://opendope.org/SmartArt/DataHierarchy" xmlns:dgm="http://schemas.openxmlformats.org/drawingml/2006/diagram" xmlns:ns17="urn:schemas-microsoft-com:office:excel" xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart" xmlns:odi="http://opendope.org/components" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:ns32="http://schemas.openxmlformats.org/drawingml/2006/lockedCanvas" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture" xmlns:ns30="http://schemas.openxmlformats.org/officeDocument/2006/bibliography" xmlns:ns12="http://schemas.openxmlformats.org/drawingml/2006/chartDrawing" xmlns:ns31="http://schemas.openxmlformats.org/drawingml/2006/compatibility" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:odq="http://opendope.org/questions" xmlns:ns8="http://schemas.openxmlformats.org/schemaLibrary/2006/main" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:xdr="http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing" xmlns:odc="http://opendope.org/conditions" xmlns:oda="http://opendope.org/answers">
<w:body>
<w:p w:rsidR="00F66879" w:rsidP="00E80FA3" w:rsidRDefault="003B0B3A">
<w:r>
<w:t>Dear</w:t>
</w:r>
<w:r w:rsidR="00E80FA3">
<w:t xml:space="preserve"> </w:t>
</w:r>
<w:fldSimple w:instr=" MERGEFIELD lastName \* MERGEFORMAT ">
<w:r w:rsidR="005C0283">
<w:rPr>
<w:noProof/>
</w:rPr>
<w:t>«lastName»</w:t>
</w:r>
</w:fldSimple>
<w:r w:rsidR="00E80FA3">
<w:t>,</w:t>
</w:r>
</w:p>
<w:p w:rsidR="00532EBF" w:rsidP="00E80FA3" w:rsidRDefault="00532EBF">
<w:r> …Run Code Online (Sandbox Code Playgroud) 我正在通过FOP运行FO文件,并在下面收到错误消息:
WARNING: The following feature isn't implemented by Apache FOP, yet: table-layou
t="auto" (on fo:table) (See position 2:753)
May 22, 2014 11:50:00 AM org.apache.fop.cli.Main startFOP
SEVERE: Exception
org.apache.fop.apps.FOPException: org.apache.fop.fo.ValidationException: The col
umn-number or number of cells in the row overflows the number of fo:table-column
s specified for the table. (See position 2:914)
javax.xml.transform.TransformerException: org.apache.fop.fo.ValidationException:
The column-number or number of cells in the row overflows the number of fo:tabl
e-columns specified for the table. (See position 2:914)
at org.apache.fop.cli.InputHandler.transformTo(InputHandler.java:303)
at org.apache.fop.cli.InputHandler.renderTo(InputHandler.java:130) …Run Code Online (Sandbox Code Playgroud) 所以我们又来了。我的头在我的电脑上敲打了大约几个小时,我不知道该怎么做。在我的本地 PC 上,我运行来自Intellij Idea的 java 代码。有用。现在我必须创建jar文件以使其能够在某些远程服务器上使用。我在项目设置中添加了我的程序需要的所有库和 jar(在工件部分添加了库)。但它在远程服务器上运行不起作用。我的程序需要什么导入:
import org.docx4j.dml.CTBlip;
import org.docx4j.jaxb.XPathBinderAssociationIsPartialException;
import org.docx4j.openpackaging.exceptions.Docx4JException;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.PartName;
import org.docx4j.openpackaging.parts.relationships.RelationshipsPart;
import org.docx4j.relationships.Relationship;
import javax.xml.bind.JAXBException;
import java.io.File;
import java.util.List;
Run Code Online (Sandbox Code Playgroud)
错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/docx4j/openpackaging/exceptions/Docx4JException
Caused by: java.lang.ClassNotFoundException: org.docx4j.openpackaging.exceptions.Docx4JException
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
Could not find the main class: Main. Program will exit.
Run Code Online (Sandbox Code Playgroud)
那么是创建jar的问题吗?我错过了什么?
从docx4j所述XHTMLImporter未进行转换NBSP&到MS Word非中断空格.
使用以下代码:
public void convert() throws Exception {
String stringFromFile = FileUtils.readFileToString(new File("tmp.xhtml"), "UTF-8");
String unescaped = stringFromFile;
System.out.println("Unescaped: " + unescaped);
// Setup font mapping
RFonts rfonts = Context.getWmlObjectFactory().createRFonts();
rfonts.setAscii("Century Gothic");
XHTMLImporterImpl.addFontMapping("Century Gothic", rfonts);
// Create an empty docx package
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
NumberingDefinitionsPart ndp = new NumberingDefinitionsPart();
wordMLPackage.getMainDocumentPart().addTargetPart(ndp);
ndp.unmarshalDefaultNumbering();
// Convert the XHTML, and add it into the empty docx we made
XHTMLImporter XHTMLImporter = new XHTMLImporterImpl(wordMLPackage);
XHTMLImporter.setHyperlinkStyle("Hyperlink");
wordMLPackage.getMainDocumentPart().getContent().addAll(
XHTMLImporter.convert(unescaped, null) );
System.out.println(
XmlUtils.marshaltoString(wordMLPackage.getMainDocumentPart().getJaxbElement(), …Run Code Online (Sandbox Code Playgroud) 这是我的情况。我有一个HTML / CSS(CSS装有打印介质的性能如@page,@bottom-center等)的资源,其通过转换为PDFflying-saucer就好了。
现在,我还需要将相同的资源转换为 msword(doc 或 docx)格式。
我曾尝试使用docx4j-ImportXHTML和documents4j库,但不幸的是我无法获得所需的结果,尤其是使用样式表的打印媒体属性时。是否有任何需要进行的特殊设置或库不支持它?理想情况下,我希望 pdf 和 docx 输出看起来几乎相同。
非常感谢
示例资源:
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.pleft</groupId>
<artifactId>html2word</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.docx4j</groupId>
<artifactId>docx4j-ImportXHTML</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.xhtmlrenderer</groupId>
<artifactId>flying-saucer-pdf</artifactId>
<version>9.0.6</version>
</dependency>
</dependencies>
</project>
Run Code Online (Sandbox Code Playgroud)
html2word.java
import com.lowagie.text.DocumentException;
import org.docx4j.convert.in.xhtml.XHTMLImporterImpl;
import org.docx4j.openpackaging.exceptions.Docx4JException;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.xhtmlrenderer.pdf.ITextRenderer;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class Html2Word …Run Code Online (Sandbox Code Playgroud) 我正在寻找一些"稳定"方法将DOCX文件从MS WORD转换为PDF.从现在开始,我已经将OpenOffice作为监听器使用,但它经常挂起.问题是我们遇到许多用户想要同时将SXW,DOCX文件转换为PDF的情况.还有其他可能吗?我尝试了这个网站的例子:https://angelozerr.wordpress.com/2012/12/06/how-to-convert-docxodt-to-pdfhtml-with-java/但输出结果不好(转换后的文件)有错误和布局相当修改).
这里是用docx4j转换的文档,文档中有一些异常文本.此外,右上角的文字也丢失了.
这个是使用OpenOffice创建的PDF,从docx转换为pdf.有些文字缺少"右上角"
是否有其他选项将docx转换为PDF格式的pdf?
docx4j ×10
java ×6
docx ×2
ms-word ×2
pdf ×2
apache ×1
apache-fop ×1
apache-poi ×1
documents4j ×1
jboss7.x ×1
list ×1
openxml ×1
xhtml ×1
xsl-fo ×1