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

冷聚变

壤驷睿
2023-03-14

我需要进行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操作,没有太多的选择。

共有3个答案

艾子石
2023-03-14

(不是一个真正的新答案,但它的评论代码太多了...)

以下是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>
夏骏
2023-03-14

您是否尝试过将loadColdFusionClassPath设置为false而不是true?可能与装运的某些罐子有冲突。

太叔灿
2023-03-14

好吧好像我什么都做了。我只是想弄清楚如何在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:将文本格式化