我需要进行docx操作(在占位符上查找/替换,并选中/取消选中复选框)。由于ColdFusion 10与Java集成良好,我决定尝试使用Java库docx4j,它基本上模仿了OpenXML SDK(.net平台)。
我有一个自定义文件夹内的docx4j JAR,我已经通过JavaSetting在我的Application.cfc中设置了它(CF10中的新功能,我用其他JARS尝试过,它可以工作):
<cfcomponent output="false">
<cfset this.javaSettings =
{LoadPaths = ["/myJava/lib"], loadColdFusionClassPath = true, reloadOnChange= true,
watchInterval = 100, watchExtensions = "jar,class,xml"} />
</cfcomponent>
现在,我试着用这个例子:https://github.com/plutext/docx4j/blob/master/src/main/java/org/docx4j/samples/VariableReplace.java
但是尝试调用WordProcess ingMLPackage失败,函数CreateObject()表示特定类不存在:
<cfset docObj = createObject("java","org.docx4j.openpackaging.packages.WordprocessingMLPackage") />
有什么想法吗?我不是一个真正的Java爱好者,但是对于docx操作,没有太多的选择。
(不是一个真正的新答案,但它的评论代码太多了...)
以下是docx4j VariableReplace.java示例的完整代码
<cfscript>
saveToDisk = true;
inputFilePath = ExpandPath("./docx4j/sample-docs/word/unmarshallFromTemplateExample.docx");
outputFilePath = ExpandPath("./OUT_VariableReplace.docx");
inputFile = createObject("java", "java.io.File").init(inputFilePath);
wordMLPackage = createObject("java","org.docx4j.openpackaging.packages.WordprocessingMLPackage").load(inputFile);
documentPart = wordMLPackage.getMainDocumentPart();
XmlUtils = createObject("java","org.docx4j.XmlUtils");
xmlString = XmlUtils.marshaltoString(documentPart.getJaxbElement(),true);
mappings = createObject("java", "java.util.HashMap").init();
mappings["colour"] = "green";
mappings["icecream"] = "chocolate";
obj = XmlUtils.unmarshallFromTemplate(xmlString , mappings);
documentPart.setJaxbElement(obj);
if (saveToDisk) {
saveToZipFile = createObject("java","org.docx4j.openpackaging.io.SaveToZipFile").init(wordMLPackage);
SaveToZipFile.save( outputFilePath );
}
else {
WriteDump(XmlUtils.marshaltoString(documentPart.getJaxbElement(), true, true));
}
</cfscript>
您是否尝试过将loadColdFusionClassPath设置为false而不是true?可能与装运的某些罐子有冲突。
好吧好像我什么都做了。我只是想弄清楚如何在docx文档中查找/替换,以及我想做的所有其他事情。以下是我迄今为止的代码,向大家展示了它似乎正在工作(如果您使用的是CF10,请确保您的Application.cfc看起来像原始帖子):
<cfscript>
docPackageObj = createObject("java","org.docx4j.openpackaging.packages.WordprocessingMLPackage").init();
docObj = createObject("java","org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart").init();
xmlUtilObj = createObject("java","org.docx4j.XmlUtils").init();
wmlDocObj = createObject("java","org.docx4j.wml.Document").init();
saveToZipFile = createObject("java","org.docx4j.openpackaging.io.SaveToZipFile").init(docPackageObj);
strFilePath = getDirectoryFromPath(getCurrentTemplatePath()) & "testDoc.docx";
wordMLPackage =
docPackageObj.load(createObject("java","java.io.File").init(javaCast("string",strFilePath)));
documentPart = wordMLPackage.getMainDocumentPart();
// unmarshallFromTemplate requires string input
strXml = xmlUtilObj.marshaltoString(documentPart.getJaxbElement(),true);
writeDump(var="#strXml#");
</cfscript>
现在,有人知道如何将ColdFusion中的结构转换为hashmap(或一般的集合)吗?我认为CF中的结构实际上是util。矢量,而hashmap是util。HashMap。我在Docx4j中看到的所有演示在占位符中查找/替换的示例都使用这个:
HashMap<String, String> mappings = new HashMap<String, String>();
mappings.put("colour", "green");
mappings.put("icecream", "chocolate");
我试图找出什么是最好的过程来实现构建 我对常规java堆栈更为熟悉:一些后端框架(Spring、Struts等),一堆JSP文件,然后使用maven编译并将所有内容绑定到一个java应用程序中。war文件,我只需将其部署(复制)到tomcat webapp目录 cfm文件实际上与jsp相同吗?有什么相似之处 到目前为止,我找到的资源让我听起来像是在抄袭 这里的线程是代码/Web应用程序部署的最佳实
目标 为以下几种场景提供用户级别的数据容灾 在主集群发生某种严重故障导致数据不可恢复,并且备集群(热备)同时不可用时,将主备集群恢复到事故发生的时间点或事故前的某一时间点 用户因某种原因(如误操作或软件bug)导致误删或误写数据时,将用户表数据恢复到错误前的某一时间点 表现形式 用户创建表/更新表时可配置,配置项包括: 是否开启开关(默认关闭) 冷备周期: WEEK/MONTH/QUARTER/H
让冷光线在黑暗中发出微光。 用法 Your browser does not support the video tag. 案例:节能灯。 说明:当夜幕降临的时候,房子屋檐的灯就会亮起,为回家的人照明家的方向。当天色变亮的时候,灯就会自动关闭,节能省电。 所需模块:电源、蓝牙模块、光线传感器、冷光管驱动、冷光管、连接线10cm。
另一方面,还有一个热,这更像是一个现场表演。 你从一开始就参加一个现场乐队表演,但有些人可能迟到25分钟的节目。 乐队不会从头开始播放,后来者必须从那里开始观看表演。 在RxJS API中的方法是publish方法。 此方法接受一个冷Observable作为其来源,并返回一个ConnectableObservable的实例。 在这种情况下,我们必须显式调用connect在我们的热Observabl
Observable 有冷热两种类型。我们先来看看什么是冷的 observable 。如果是冷的 observable 的话,那么两个订阅者得到值是两份完全相同的副本,示例如下: // 冷的 observable 示例 let stream$ = Rx.Observable.of(1,2,3); //订阅者 1: 1,2,3 stream.subscribe( data => console
expr:计算表达式或正则匹配 m4:简单的宏处理器 yes:多次打印字符串 cal:漂亮的日历 env:执行一个命令(脚本文件中很有用) printenv:打印环境变量(调试时或在写脚本文件时很有用) look:查找以特定字符串开头的单词或行 cut,paste 和 join:数据修改 fmt:格式化文本段落 pr:将文本格式化成页/列形式 fold:包裹文本中的几行 column:将文本格式化