如何创建文档并使用基于x和y坐标或像素的文本框填充文档?

时间:2014-02-07 14:09:32

标签: ms-word openxml docx

我试图创建一个模板来打印基于坐标或像素或cm的空白文档的一些信息,wtv是可能的。

为什么呢?我有一些会计表格,不好用手册填写。我想知道是否可以使用与文档中文本框位置相关的一些参数创建一个函数。

例如。 txtName转到文档中的(3,15)位置。可能需要定义文档的大小

如果可能,您推荐哪种语言?

1 个答案:

答案 0 :(得分:1)

是的,这是可能的。

如果您使用Microsoft Word将文本框插入空白文档,然后保存并检查生成的docx,您将看到Word以2种格式插入文本框:

        <mc:AlternateContent>
      <mc:Choice Requires="wps">
        <w:drawing>
          <wp:anchor distT="0" distB="0" distL="114300" distR="114300" simplePos="0" relativeHeight="251659264" behindDoc="0" locked="0" layoutInCell="1" allowOverlap="1" wp14:anchorId="44014479" wp14:editId="7FACADD8">
            <wp:simplePos x="0" y="0"/>
            <wp:positionH relativeFrom="column">
              <wp:align>center</wp:align>
            </wp:positionH>
            <wp:positionV relativeFrom="paragraph">
              <wp:posOffset>0</wp:posOffset>
            </wp:positionV>
            <wp:extent cx="2374265" cy="1403985"/>
            <wp:effectExtent l="0" t="0" r="22860" b="23495"/>
            <wp:wrapTopAndBottom/>
            <wp:docPr id="307" name="Text Box 2"/>
            <wp:cNvGraphicFramePr>
              <a:graphicFrameLocks xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"/>
            </wp:cNvGraphicFramePr>
            <a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
              <a:graphicData uri="http://schemas.microsoft.com/office/word/2010/wordprocessingShape">
                <wps:wsp>
                  <wps:cNvSpPr txBox="1">
                    <a:spLocks noChangeArrowheads="1"/>
                  </wps:cNvSpPr>
                  <wps:spPr bwMode="auto">
                    <a:xfrm>
                      <a:off x="0" y="0"/>
                      <a:ext cx="2374265" cy="1403985"/>
                    </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="006C2E97" w:rsidRDefault="006C2E97">
                        <w:proofErr w:type="gramStart"/>
                        <w:r>
                          <w:t>YOUR CONTENT GOES HERE</w:t>
                        </w:r>
                      </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="0">
                    <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 id="_x0000_t202" coordsize="21600,21600" o:spt="202" path="m,l,21600r21600,l21600,xe">
            <v:stroke joinstyle="miter"/>
            <v:path gradientshapeok="t" o:connecttype="rect"/>
          </v:shapetype>
          <v:shape id="Text Box 2" o:spid="_x0000_s1026" type="#_x0000_t202" style="position:absolute;margin-left:0;margin-top:0;width:186.95pt;height:110.55pt;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:0;mso-wrap-distance-right:9pt;mso-wrap-distance-bottom:0;mso-position-horizontal:center;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" >
            <v:textbox style="mso-fit-shape-to-text:t">
              <w:txbxContent>
                <w:p w:rsidR="006C2E97" w:rsidRDefault="006C2E97">
                  <w:r>
                    <w:t>YOUR CONTENT GOES HERE</w:t>
                  </w:r>
                </w:p>
              </w:txbxContent>
            </v:textbox>
            <w10:wrap type="topAndBottom"/>
          </v:shape>
        </w:pict>
      </mc:Fallback>
    </mc:AlternateContent>
  </w:r>

您可以使用w:drawing或w:pict语法。我非常喜欢w:带有@style

的图片

作为第一步,您将想要在Word中播放这些框的位置 - 我猜您希望它们位于页面上,而不是段落。

然后,只需在您选择的语言中复制XML即可。

你可以:

  • 解压缩,操作,然后重新压缩
    • 使用XML感知工具进行操作
    • 或没有那个操作
  • 或使用lib,例如:
    • for .NET,Microsoft的Open XML SDK
    • for Java,POI,docx4j
    • 代表C,libopc 等...