DOCX4J 插入换行符

2023-12-06

我在 DOCX 中有一个变量,我想用一个值替换它。首先,该变量不是放置在行的开头,而是放置在一些选项卡之后。我的值是邮政地址,我希望街道和邮政编码(+城市)在不同的行中具有相同的缩进。街道替换了该行中的变量,邮政编码位于新行中,如下所示:

                            4 Privet Drive
                            Little Whinging

这是变量的 XML:

<w:p>
    <w:pPr>
        <w:tabs>
            <w:tab w:val="left" w:pos="6120"/>
        </w:tabs>
        <w:ind w:firstLine="6300"/>
        <w:rPr>
            <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
            <w:b/>
            <w:sz w:val="22"/>
            <w:szCs w:val="20"/>
        </w:rPr>
    </w:pPr>
    <w:r>
        <w:rPr>
            <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
            <w:b/>
            <w:sz w:val="22"/>
             <w:szCs w:val="20"/>
        </w:rPr>
         <w:t>$address$</w:t>
    </w:r>
</w:p>

我可以替换变量并将邮政编码和城市放在新行中(我使用getJAXBNodesViaXPath()检索我的变量)

r.clear(); //r contains the variable it's <w:r> </w:r> in my XML exemple, it's a list
org.docx4j.wml.Text text = factory.createText(); //For the street
r.add(k, text);
org.docx4j.wml.Br br = factory.createBr();
r.add(k, br);
org.docx4j.wml.Text text2 = factory.createText();
r.add(k, text2);
text.setValue(zip);
text2.setValue(street);

它将变量替换为街道,并使用邮政编码创建一条新线。街道位于好地方(左侧),但城市位于新线的起点。

在新的 DOCX 中,我的 XML 如下所示:

<w:p>
    <w:pPr>
        <w:tabs>
            <w:tab w:val="left" w:pos="6120"/>
        </w:tabs>
        <w:ind w:firstLine="6300"/>
        <w:rPr>
            <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
            <w:b/>
            <w:sz w:val="22"/>
            <w:szCs w:val="20"/>
        </w:rPr>
    </w:pPr>
    <w:r>
        <w:rPr>
            <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
            <w:b/>
            <w:sz w:val="22"/>
             <w:szCs w:val="20"/>
        </w:rPr>
         <w:t>4 Privet Drive</w:t>
         <:br/>
         <w:t>Little Whinging</w:t>
    </w:r>
</w:p>

所以我不知道如何将第二行设置到第一行的相同位置?


有两种方法可以做到这一点。

第一种是使用选项卡:

    <w:p>
        <w:r>
            <w:tab/>
            <w:t>4 Privet Drive</w:t>
            <w:br/>
            <w:tab/>
            <w:t>Little Whinging</w:t>
        </w:r>
    </w:p>

相应的代码,假设P p:

        // Create object for r
        R r = wmlObjectFactory.createR(); 
        p.getContent().add( r); 
            // Create object for tab (wrapped in JAXBElement) 
            R.Tab rtab = wmlObjectFactory.createRTab(); 
            JAXBElement<org.docx4j.wml.R.Tab> rtabWrapped = wmlObjectFactory.createRTab(rtab); 
            r.getContent().add( rtabWrapped); 
            // Create object for t (wrapped in JAXBElement) 
            Text text = wmlObjectFactory.createText(); 
            JAXBElement<org.docx4j.wml.Text> textWrapped = wmlObjectFactory.createRT(text); 
            r.getContent().add( textWrapped); 
                text.setValue( "4 Privet Drive"); 
            // Create object for br
            Br br = wmlObjectFactory.createBr(); 
            r.getContent().add( br); 
            // Create object for tab (wrapped in JAXBElement) 
            R.Tab rtab2 = wmlObjectFactory.createRTab(); 
            JAXBElement<org.docx4j.wml.R.Tab> rtabWrapped2 = wmlObjectFactory.createRTab(rtab2); 
            r.getContent().add( rtabWrapped2); 
            // Create object for t (wrapped in JAXBElement) 
            Text text2 = wmlObjectFactory.createText(); 
            JAXBElement<org.docx4j.wml.Text> textWrapped2 = wmlObjectFactory.createRT(text2); 
            r3.getContent().add( textWrapped2); 
                text2.setValue( "Little Whinging"); 

第二种是使用 w:ind/@w:left:

    <w:p>
        <w:pPr>
            <w:ind w:left="720"/>
        </w:pPr>
        <w:r>
            <w:t>4 Privet Drive</w:t>
            <w:br/>
            <w:t>Little Whinging</w:t>
        </w:r>
    </w:p>

为此,Java 的关键部分是:

            // Create object for ind
            PPrBase.Ind pprbaseind = wmlObjectFactory.createPPrBaseInd(); 
            ppr.setInd(pprbaseind); 
                pprbaseind.setLeft( BigInteger.valueOf( 720) ); 

一般来说,要自己回答此类问题,请创建在 Word 中看起来正确的内容,然后检查 XML。您可以使用 Docx4j Word Helper AddIn 或 Docx4j Web 应用程序来生成相应的代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DOCX4J 插入换行符 的相关文章

随机推荐

  • 在 ASP.NET MVC 应用程序中访问本地化字符串时出现问题

    我创建了一个 ASP NET MVC 应用程序 并为项目中的 about aspx 页面添加了 2 个资源文件 它看起来像这样 然后我修改了About aspx页面如下
  • 在 CKEditor 中重新加载页面后保留光标位置

    我在用CKEditor 4 1 在我的项目中 我想在用户重新加载页面后保留编辑器中的光标位置 CKEditor提供 var bookmark editor selection createBookmarks 存储光标位置 但是 如果我使用
  • Visual Studio 2019 中的 Control C++ 标准修订版

    所以我在我的C 项目中使用Visual Studio 2019 我想在编译时控制C 版本 我已将其从 项目 gt 属性 gt C C gt 语言 gt C 语言标准 gt 更改为 当时是在Default ISO C 14 Standard
  • Handsontable 保存公式值

    我想将 Handsontable 集成到我的网站 但是有一个问题 当我尝试保存由 RuleJS 公式支持 创建的数据时 脚本给我一个公式 例如 A1 B1 我试图获得简单数学乘以价格和货币的结果 如何保存表值 而不是从源中保存 workig
  • Carrierwave:filename/store_dir 中的文件哈希和模型 ID

    我在 Rails 4 项目中使用 Carrierwave 其中文件存储用于开发和测试 雾存储 用于存储在 Amazon S3 上 用于生产 我想用这样的路径保存我的文件 model class name part of hash anoth
  • 程序集:文件描述符0或2用于读取用户输入

    我正在学习汇编 并且有不同的文件描述符用于读取用户输入 为了读取键盘输入 我期待文件描述符 0 stdin 但遇到了这个article其中使用了文件描述符 2 stderr Read and store the user input mov
  • 如何在intellij idea中做netbeans的“制作控制器”

    我使用 netbeans 来制作 javafx 应用程序 在 scenebuilder 中更改一些内容并保存到 fxml 后 我切换到 netbeans 右键单击 fxml 并选择 制作控制器 在控制器类中添加或删除一些代码 现在我切换到i
  • 从先序和中序列表重建二叉树

    嗨 我正在尝试重建一棵二叉树 我几乎得到了它 但它抛出了一个错误 我不知道为什么 buildTree Ord a Eq a gt a gt a gt Tree a buildTree Empty buildTree preOrd inOrd
  • RestTemplate 与 ClientHttpRequestInterceptor 会导致 GZIP 压缩两次

    我正在使用 ClientHttpRequestInterceptor 向 Android 项目中 RestTemplate 发出的每个请求添加基本授权标头 我还通过将 Content Encoding 标头设置为 gzip 来压缩请求正文
  • iPhone 上视频之上的 OpenGL 层?

    我正在尝试在 iPhone 上显示全屏视频并用 OpenGL ES 视图覆盖它 基本上 我想要在后台播放视频 同时在其上绘制 OpenGL 图形 我如何实现这一目标 这可能吗 感谢您的帮助 Florian 要使用自定义叠加视图显示摄像头视频
  • 使用 PHP 检测图像中的主要颜色

    我正在尝试复制 Dribbble com 检测图像中主要颜色的功能 在下图中 您可以看到来自 Dribbble com 的屏幕截图 其中显示了左侧图像中的 8 种主要颜色 这是图像中的实际页面http dribbble com shots
  • 刚接触 swift,我的程序按打开就会崩溃

    我在模拟器上按 打开 程序崩溃 并显示侧面板和底部按 打开 会向右滑动并显示 3 个对象 Hello Second World 您的程序崩溃是因为您在代码中添加了断点 如下所示 您可以通过以下方式将其拖到一边来删除所有内容 对所有断点执行相
  • Android ART 运行时是否具有与 Dalvik 相同的方法限制限制?

    Android ART 运行时是否具有与 Dalvik 相同的方法限制限制 目前 主 dex 文件中的方法数量限制为 64k 问题不在于 Dalvik 运行时 也不在于 DEX 文件格式 而在于当前的一组达尔维克指令 具体来说就是各种方法调
  • Java - 自定义哈希图/表的一些要点

    在之前的一些文章中 我问了一些有关 java 中自定义哈希映射 表编码的问题 现在 由于我无法解决它 并且可能是我忘记正确提及我真正想要的东西 所以我总结了所有这些 以使其清晰而准确 我要做的事 我正在尝试为我们的服务器编写代码 在该服务器
  • 使用 Express 将多个数据库查询结果发送到单个视图

    我有一个仪表板视图 dashboard jade 它将显示两个具有不同信息的面板 所有这些信息都应该从数据库中检索 然后发送到视图 假设我有一个路由文件 document js 其中定义了两个操作 exports getAllDocumen
  • 将字符串转换为模板字符串

    是否可以创建一个模板字符串作为普通字符串 let a b b 然后将其转换为模板字符串 let b 10 console log a template b 10 without eval new Function以及其他动态代码生成方式 在
  • 从Python生成电影而不将单个帧保存到文件中

    我想根据在 matplotlib 中的 python 脚本中生成的帧创建 h264 或 divx 影片 这部电影大约有 100k 帧 在网络上的示例中 例如 1 我只见过将每一帧保存为png 然后在这些文件上运行mencoder或ffmpe
  • Numpy 协方差矩阵 numpy.cov

    我正在使用 numpy 并想要计算 ndarray 的协方差矩阵 我正在尝试使用 numpy cov 但没有得到正确的结果 更多详细信息如下 我的 ndarray 是 768x8 其中 8 是我的数据集中的数字特征 当我使用 MATLAB
  • JOBB DirectoryFullException:de.waldheinz.fs.fat.DirectoryFullException:目录已满

    我正在尝试在包含 192 个 jpg 文件 总计约 70 mb 的目录上使用 JOBB 工具 当我运行命令时jobb d C sdk tools dir data k 123456 o com nick app obb pn com nic
  • DOCX4J 插入换行符

    我在 DOCX 中有一个变量 我想用一个值替换它 首先 该变量不是放置在行的开头 而是放置在一些选项卡之后 我的值是邮政地址 我希望街道和邮政编码 城市 在不同的行中具有相同的缩进 街道替换了该行中的变量 邮政编码位于新行中 如下所示 4