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

如何正确复制文本字段?

东郭臻
2023-03-14

我的问题是无法使用文档获取文本字段。getContent()文档。getContents()。所以我尝试使用XPath来选择对象,它可以工作,但我无法复制对象并再次添加它。

例如:

我还尝试创建一个自己的对象,但这对我来说也不起作用,因为它没有被接受为JAXB对象。

这是我的代码

public static void main(final String[] args) throws Docx4JException, JAXBException
{
    final String filePath = "./files/GetTextfield.docx";
    
    final WordprocessingMLPackage word = Docx4J.load(new File(filePath));
    final MainDocumentPart document = word.getMainDocumentPart();
    
    final String xpathExpr = "//wps:txbx/w:txbxContent/w:p/w:r"; 
    final List<Object> nodes = document.getJAXBNodesViaXPath(xpathExpr, false);
    
    addPageBreak(document);
    
    final XmlUtils xmlUtils = new XmlUtils();
    final Object field = nodes.get(0);
    final Object copy = xmlUtils.deepCopy(field);
    
    document.addObject(copy);
    
    System.out.println(document.getXML());
    
    // TODO Before MailMerge need to copy template content to all pages
}

我重新创建了这个问题,因为我想旧的问题有点让人困惑。

我的XML文档(Document.getXML())

<w:document mc:Ignorable="w14 w15 wp14" xmlns:cppr="http://schemas.microsoft.com/office/2006/coverPageProps" xmlns:dgm1611="http://schemas.microsoft.com/office/drawing/2016/11/diagram" xmlns:xdr="http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" xmlns:wp15="http://schemas.microsoft.com/office/word/2012/wordprocessingDrawing" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture" xmlns:a1611="http://schemas.microsoft.com/office/drawing/2016/11/main" xmlns:a16svg="http://schemas.microsoft.com/office/drawing/2016/SVG/main" xmlns:am3d="http://schemas.microsoft.com/office/drawing/2017/model3d" xmlns:pvml="urn:schemas-microsoft-com:office:powerpoint" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:dgm1612="http://schemas.microsoft.com/office/drawing/2016/12/diagram" xmlns:comp="http://schemas.openxmlformats.org/drawingml/2006/compatibility" xmlns:xvml="urn:schemas-microsoft-com:office:excel" xmlns:c173="http://schemas.microsoft.com/office/drawing/2017/03/chart" xmlns:anam3d="http://schemas.microsoft.com/office/drawing/2018/animation/model3d" xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:adec="http://schemas.microsoft.com/office/drawing/2017/decorative" xmlns:oda="http://opendope.org/answers" xmlns:a18hc="http://schemas.microsoft.com/office/drawing/2018/hyperlinkcolor" xmlns:odc="http://opendope.org/conditions" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:cdr="http://schemas.openxmlformats.org/drawingml/2006/chartDrawing" xmlns:odi="http://opendope.org/components" xmlns:msink="http://schemas.microsoft.com/ink/2010/main" xmlns:cdr14="http://schemas.microsoft.com/office/drawing/2010/chartDrawing" xmlns:iact="http://schemas.microsoft.com/office/powerpoint/2014/inkAction" xmlns:an18="http://schemas.microsoft.com/office/drawing/2018/animation" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" xmlns:odq="http://opendope.org/questions" xmlns:w16cid="http://schemas.microsoft.com/office/word/2016/wordml/cid" xmlns:dsp="http://schemas.microsoft.com/office/drawing/2008/diagram" xmlns:odx="http://opendope.org/xpaths" xmlns:a15="http://schemas.microsoft.com/office/drawing/2012/main" xmlns:a14="http://schemas.microsoft.com/office/drawing/2010/main" xmlns:c15="http://schemas.microsoft.com/office/drawing/2012/chart" xmlns:a13cmd="http://schemas.microsoft.com/office/drawing/2013/main/command" xmlns:c14="http://schemas.microsoft.com/office/drawing/2007/8/2/chart" xmlns:a16="http://schemas.microsoft.com/office/drawing/2014/main" xmlns:odgm="http://opendope.org/SmartArt/DataHierarchy" xmlns:c16="http://schemas.microsoft.com/office/drawing/2014/chart" xmlns:dgm="http://schemas.openxmlformats.org/drawingml/2006/diagram" xmlns:thm15="http://schemas.microsoft.com/office/thememl/2012/main" xmlns:we="http://schemas.microsoft.com/office/webextensions/webextension/2010/11" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:ns39="http://www.w3.org/2003/InkML" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:sl="http://schemas.openxmlformats.org/schemaLibrary/2006/main" xmlns:ns38="http://www.w3.org/1998/Math/MathML" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:dgm14="http://schemas.microsoft.com/office/drawing/2010/diagram" xmlns:c16ac="http://schemas.microsoft.com/office/drawing/2014/chart/ac" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:b="http://schemas.openxmlformats.org/officeDocument/2006/bibliography" xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:cs="http://schemas.microsoft.com/office/drawing/2012/chartStyle" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:cx="http://schemas.microsoft.com/office/drawing/2014/chartex" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:pic14="http://schemas.microsoft.com/office/drawing/2010/picture" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:lc="http://schemas.openxmlformats.org/drawingml/2006/lockedCanvas" xmlns:wetp="http://schemas.microsoft.com/office/webextensions/taskpanes/2010/11">
    <w:body>
        <w:p w:rsidRPr="009670CB" w:rsidR="00CF457B" w:rsidP="009670CB" w:rsidRDefault="00BD5B37">
            <w:bookmarkStart w:name="_GoBack" w:id="0"/>
            <w:bookmarkEnd w:id="0"/>
            <w:r>
                <w:rPr>
                    <w:noProof/>
                </w:rPr>
                <mc:AlternateContent>
                    <mc:Choice Requires="wps">
                        <w:drawing>
                            <wp:anchor distT="45720" distB="45720" distL="114300" distR="114300" simplePos="false" relativeHeight="251659264" behindDoc="false" locked="false" layoutInCell="true" allowOverlap="true">
                                <wp:simplePos x="0" y="0"/>
                                <wp:positionH relativeFrom="column">
                                    <wp:posOffset>-256540</wp:posOffset>
                                </wp:positionH>
                                <wp:positionV relativeFrom="paragraph">
                                    <wp:posOffset>0</wp:posOffset>
                                </wp:positionV>
                                <wp:extent cx="2360930" cy="1404620"/>
                                <wp:effectExtent l="0" t="0" r="22860" b="11430"/>
                                <wp:wrapSquare wrapText="bothSides"/>
                                <wp:docPr id="217" name="Textfeld 2"/>
                                <wp:cNvGraphicFramePr>
                                    <a:graphicFrameLocks/>
                                </wp:cNvGraphicFramePr>
                                <a:graphic>
                                    <a:graphicData uri="http://schemas.microsoft.com/office/word/2010/wordprocessingShape">
                                        <wps:wsp>
                                            <wps:cNvSpPr txBox="true">
                                                <a:spLocks noChangeArrowheads="true"/>
                                            </wps:cNvSpPr>
                                            <wps:spPr bwMode="auto">
                                                <a:xfrm>
                                                    <a:off x="0" y="0"/>
                                                    <a:ext cx="2360930" cy="1404620"/>
                                                </a:xfrm>
                                                <a:prstGeom prst="rect">
                                                    <a:avLst/>
                                                </a:prstGeom>
                                                <a:solidFill>
                                                    <a:srgbClr val="FFFFFF"/>
                                                </a:solidFill>
                                                <a:ln w="9525">
                                                    <a:solidFill>
                                                        <a:srgbClr val="000000"/>
                                                    </a:solidFill>
                                                    <a:miter lim="800000"/>
                                                    <a:headEnd/>
                                                    <a:tailEnd/>
                                                </a:ln>
                                            </wps:spPr>
                                            <wps:txbx>
                                                <w:txbxContent>
                                                    <w:p w:rsidR="00BD5B37" w:rsidRDefault="00BD5B37">
                                                        <w:proofErr w:type="spellStart"/>
                                                        <w:r>
                                                            <w:t>GetThisContent</w:t>
                                                        </w:r>
                                                        <w:proofErr w:type="spellEnd"/>
                                                    </w:p>
                                                </w:txbxContent>
                                            </wps:txbx>
                                            <wps:bodyPr rot="0" vert="horz" wrap="square" lIns="91440" tIns="45720" rIns="91440" bIns="45720" anchor="t" anchorCtr="false">
                                                <a:spAutoFit/>
                                            </wps:bodyPr>
                                        </wps:wsp>
                                    </a:graphicData>
                                </a:graphic>
                                <wp14:sizeRelH relativeFrom="margin">
                                    <wp14:pctWidth>40000</wp14:pctWidth>
                                </wp14:sizeRelH>
                                <wp14:sizeRelV relativeFrom="margin">
                                    <wp14:pctHeight>20000</wp14:pctHeight>
                                </wp14:sizeRelV>
                            </wp:anchor>
                        </w:drawing>
                    </mc:Choice>
                    <mc:Fallback>
                        <w:pict>
                            <v:shapetype o:spt="202.0" path="m,l,21600r21600,l21600,xe" coordsize="21600,21600" id="_x0000_t202">
                                <v:stroke joinstyle="miter"/>
                                <v:path gradientshapeok="t" o:connecttype="rect"/>
                            </v:shapetype>
                            <v:shape o:gfxdata="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" type="#_x0000_t202" style="position:absolute;margin-left:-20.2pt;margin-top:0;width:185.9pt;height:110.6pt;z-index:251659264;visibility:visible;mso-wrap-style:square;mso-width-percent:400;mso-height-percent:200;mso-wrap-distance-left:9pt;mso-wrap-distance-top:3.6pt;mso-wrap-distance-right:9pt;mso-wrap-distance-bottom:3.6pt;mso-position-horizontal:absolute;mso-position-horizontal-relative:text;mso-position-vertical:absolute;mso-position-vertical-relative:text;mso-width-percent:400;mso-height-percent:200;mso-width-relative:margin;mso-height-relative:margin;v-text-anchor:top" id="Textfeld 2" o:spid="_x0000_s1026">
                                <v:textbox style="mso-fit-shape-to-text:t">
                                    <w:txbxContent>
                                        <w:p w:rsidR="00BD5B37" w:rsidRDefault="00BD5B37">
                                            <w:proofErr w:type="spellStart"/>
                                            <w:r>
                                                <w:t>GetThisContent</w:t>
                                            </w:r>
                                            <w:proofErr w:type="spellEnd"/>
                                        </w:p>
                                    </w:txbxContent>
                                </v:textbox>
                                <w10:wrap type="square"/>
                            </v:shape>
                        </w:pict>
                    </mc:Fallback>
                </mc:AlternateContent>
            </w:r>
        </w:p>
        <w:sectPr w:rsidRPr="009670CB" w:rsidR="00CF457B" w:rsidSect="00BD5B37">
            <w:type w:val="continuous"/>
            <w:pgSz w:w="11907" w:h="8391" w:orient="landscape" w:code="11"/>
            <w:pgMar w:top="1418" w:right="1418" w:bottom="1418" w:left="1134" w:header="709" w:footer="709" w:gutter="0"/>
            <w:cols w:space="708"/>
            <w:docGrid w:linePitch="360"/>
        </w:sectPr>
    </w:body>
</w:document>

我需要选择文本字段,进行邮件合并,我的计划是复制和移动字段。如果有更好的方法,我愿意尝试:)

我目前正在尝试做一个完整的页面复制,它可以用于合并字段,但问题是,当我尝试使用textfields时,我在第369行第0列遇到一个错误,我决定在这里上传XML。我尝试了不同的东西,改变了一些东西,我总是在选择元素的行中得到错误。

我可以以某种方式调试它吗?还是我实现错了?

private static void generatePagesFromTemplate(final MainDocumentPart document)
  {
    //      final String xpath = "//mc:AlternateContent";
    //      final List<Object> pageContent = document.getJAXBNodesViaXPath(xpath, false);
    final List<Object> pageContent = document.getContent();

    /** This is needed if you don't want a endless loop, 
      otherwise it will increase with adding new objects **/
    final int nrOfElements = pageContent.size();
    final int nrOfSheets = 2;

    // Make a copy of the first sheet, to the nr of pages that exist
    for (int sheetNr = 1; sheetNr < nrOfSheets; sheetNr++)
    {
      addPageBreak(document);

      for (int i = 0; i < nrOfElements; i++)
      {
        final Object tmp = pageContent.get(i);
        document.addObject(tmp);
        System.out.println("Added object: " + tmp.toString());
      }
    }
  }

共有2个答案

扈沛
2023-03-14

您将看到一个文本框在上面的XML中被表示两次(在Choice元素和Fallback元素中)。

复制文本框时,应复制祖先mc:AlternateContent元素或Choice元素或Fallback元素的内容。你应该把它复制到w:p/w:r。

如果只在文本框内取w:r,则会丢失文本框的位置等。

您不能只使用w: txbxContent元素,因为它必须位于上面找到的结构中。

米迪
2023-03-14

可能是命名空间问题...txbx元素位于xmlns: v="urn: schemas-microsoft-com: vml"中,所以也许只需将其更改为:(我不知道如何在docx4j中声明名称空间)

//v:txbx/w:txbxContent/w:p/w:r

这将选择所有w: r的螺母实际的文本节点。

 类似资料:
  • 我试图创建一个Java的应用程序,它可以将文件从Unix Samba共享复制到Windows文件夹。为了实现这一点,我使用JCIFS库。 我有以下代码: 我把它修改为: 但它给了我以下错误: 如果我尝试在Samba共享上创建一个新文件,它将按预期工作: 请帮助解决此问题。

  • 问题内容: 我从笔记中发现了两个有关复制数组的示例。 下面给出的第一个示例指出,这不是复制数组的方法。但是,当我尝试运行代码时,它设法将所有值从array1复制到array2。 给出的第二个示例是说复制数组的正确方法。 我的问题是,这两个示例是否适合在编码中应用,还是首选示例2?如果您是我的讲师,那么我将应用示例1。与示例2的方法相比,我将获得更少的评分或完全相同? 问题答案: 第一个示例不复制任

  • 我不能正确使用“float:right”在它上有没有一个解决方案,将它定位在div的右侧部分,而不使用(左右边距-左边距-右)? null null

  • 我在使用org.apache.commons.io.FileUtils从img目录删除文件时遇到问题。我正在使用以下代码: 实际上,该代码是用来替换img目录中已有的图像文件。我需要删除所有以前存在的文件,名称是n.*,与新文件,例如n.png。如果我试图删除图像文件,我会得到变量成功的false值,并且文件不会被删除。但不包括图像文件,例如*.abc;*.ACD;*.ACDC等被成功删除。这个问

  • 我有一个网络服务调用,响应是纯文本,没有json。在下面的回调中,失败()总是被调用,即使响应成功,因为改装试图将响应解析为json。 出现以下错误: 改造。错误:com。谷歌。格森。JsonSyntaxException:com。谷歌。格森。流动格式错误的JSONException:使用JsonReader。setLenient(true)在第1行第16列路径接受格式错误的JSON$ 我怎样才能

  • 我想以UTF-8快速地逐行读取大的csv文件(大约~1GB)。我已经为它创建了一个类,但它不能正常工作。UTF-8从2字节解码西里尔符号。我使用字节缓冲区来读取它,例如,它有10个字节的长度。因此,如果文件中的符号由10和11字节组成,它将无法正常解码:(