当前位置: 首页 > 知识库问答 >
问题:

docx4j如何在将docx转换为pdf的同时将嵌入式文档属性转换为简单文本

骆文华
2023-03-14

我想知道如何通过docx4j将显示的doc属性转换为“简单文本”。我的文档架构如下:

Full Name: [DOCPROPERTY] [DOCPROPERTY]
Date and Place of Birth: [DOCPROPERTY] [DOCPROPERTY]

主要问题是,当我将文档转换为PDF时,我丢失了上述信息。代码如下:

String inputfilepath = "...somePath"    
String outputfilepathWord = "...anotherPath"

WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new java.io.File(inputfilepath));
wordMLPackage.save(new File(outputfilepathWord));

FOSettings foSettings = Docx4J.createFOSettings();
foSettings.setWmlPackage(wordMLPackage);
OutputStream os = new java.io.FileOutputStream(outputfilepath);
Docx4J.toFO(foSettings, os, Docx4J.FLAG_EXPORT_PREFER_XSL);

在转换的pdf中,我有以下结构:

Full Name: 
Date and Place of Birth: 

提前感谢!

编辑:

FieldUpdater的使用

FieldUpdater updater = new FieldUpdater(wordMLPackage);
updater.update(true);

捕获以下异常:

java.util.NoSuchElementException
at java.util.LinkedList.removeFirst(LinkedList.java:268)
at java.util.LinkedList.pop(LinkedList.java:799)
at org.docx4j.model.fields.FieldsPreprocessor.inParentResult(FieldsPreprocessor.java:214)
at org.docx4j.model.fields.FieldsPreprocessor.handleRun(FieldsPreprocessor.java:346)
at org.docx4j.model.fields.FieldsPreprocessor.handleContent(FieldsPreprocessor.java:180)
at org.docx4j.model.fields.FieldsPreprocessor.canonicaliseInstance(FieldsPreprocessor.java:142)
at org.docx4j.model.fields.FieldsPreprocessor.canonicalise(FieldsPreprocessor.java:128)

这里:

else if (p.getParent() instanceof java.util.List) {
            // This does happen!
            index = ((java.util.List)p.getParent()).indexOf(p);
            P newP = FieldsPreprocessor.canonicalise(p, fieldRefs); //<<--EXCEPTION
            //log.debug("NewP length: " + newP.getContent().size() );
            ((java.util.List)p.getParent()).set(index, newP);       

共有1个答案

刘曾琪
2023-03-14

根据ConvertOutPDF示例,您需要:

    // Refresh the values of DOCPROPERTY fields 
    FieldUpdater updater = new FieldUpdater(wordMLPackage);
    updater.update(true);
 类似资料:
  • 我的目标是采取现有的措施。docx文件,并使用docx4j将其从Linux命令行转换为PDF(http://www.docx4java.orghttp://www.docx4java.org).入门指南(http://www.docx4java.org/svn/docx4j/trunk/docx4j/docs/Docx4j_GettingStarted.html)指的是最新(2.8.1)软件包中实

  • 我在将HTML转换为docx时遇到了新问题,它引发了异常: 组织。xml。萨克斯。SAXS异常;行号:4;栏目号:73;实体“nbsp”已被引用,但未被声明 正如我所理解的,这是因为docx4j认为我的文件是XML,并希望将其转换为docx但XML中只有5个预定义的实体,而nbsp等实体没有在XML中定义。如何让docx4j将超文本标记语言转换为doc,而无需在doctype中声明实体nbsp?

  • 我正试图用Docx4J将一个DOCX文件转换为PDF,并收到两个不同文档的两个不同的异常。 1)对于文档1,第一个文档的org.docx4j.utils.singletRaversAlutilVisitorCallback.apply(SingletRaversAlutilVisitorCallback.java:27)中出现一个NullPointerException。 下面包含的代码是否是在P

  • http://www.janolaw.de/export/livingwillgeneratedbyme.pdf http://www.janolaw.de/export/livingwillorg.docx

  • 问题内容: 如何将Word文档转换为PDF,其中文档包含各种内容,例如表格。尝试使用iText时,原始文档看起来与转换后的PDF不同。有没有我可以使用的开源API /库,而不是调用可执行文件? 问题答案: 这是一项艰巨的任务,如果您想要完美的结果(如果不使用Word则不可能),则难度就更大了,因为仅使用纯Java即可为您完成所有操作且都是开源的API数量为零,我相信( 更新:我错了,请参见下文 )