DDoc.js icon indicating copy to clipboard operation
DDoc.js copied to clipboard

如何修改下载文件的名称

Open zhengchalei opened this issue 5 years ago • 5 comments

zhengchalei avatar Aug 20 '20 14:08 zhengchalei

你解决了吗?

hitime888 avatar Jan 27 '21 01:01 hitime888

@zhengchalei @hitime888 支持生成文档的时候指定文件名了,刚提交的。

这个东西只是个人兴趣所致而研究的东西,放上来就没动过了,没想到你俩都有这要求,所以顺便改了。

DistChen avatar Jan 27 '21 04:01 DistChen

@zhengchalei @hitime888 支持生成文档的时候指定文件名了,刚提交的。

这个东西只是个人兴趣所致而研究的东西,放上来就没动过了,没想到你俩都有这要求,所以顺便改了。

十分感谢, 这个东西还是挺好用的.(顺便问下去哪里能看自己想要的效果,要用Office Open XML怎么实现)

hitime888 avatar Jan 27 '21 06:01 hitime888

@zhengchalei @hitime888 支持生成文档的时候指定文件名了,刚提交的。

这个东西只是个人兴趣所致而研究的东西,放上来就没动过了,没想到你俩都有这要求,所以顺便改了。

十分感谢, 这个东西还是挺好用的.(顺便问下去哪里能看自己想要的效果,要用Office Open XML怎么实现)

代码的示例页面就可以看效果,或者查看在线demo生成文档就可以了。

通过查看Office Open XML规范,你可以知道每一个元素的定义,其子元素、属性等有哪些。通过这些子元素和属性,你就可以控制并生成你需要的段落、表格等元素,而且可以控制样式和位置。也就是说,通过组装符合规范的 xml 节点,你就能生成完整的word文档。

比如,生成一个简单的段落时,本质上是新增了如下一个节点:

 <w:p w:rsidR="009B079F" w:rsidRPr="001A6604" w:rsidRDefault="00382A2D" w:rsidP="002A76FD">
    <w:pPr>
        <w:jc w:val="center"/>
        <w:rPr>
            <w:rFonts w:hint="eastAsia"/>
            <w:b/>
            <w:bCs/>
            <w:color w:val="FF0000"/>
        </w:rPr>
    </w:pPr>
    <w:r>
        <w:t>Hello</w:t>
    </w:r>
  </w:p>

上述示例中:

  • w:p 代表一个段落节点;
  • w:pPr 代表段落的属性节点;
  • <w:jc w:val="center"/> 代表居中对齐
  • <w:b/> 代表加粗
  • <w:color w:val="FF0000"/>代表字体颜色
  • ...

还有很多其它元素和属性可以控制,只要是能通过操作office软件生成的文档,你都能找到对应的xml节点和属性。

另外再补充下,符合 Office Open XML 规范的文档,其本质都是一个有规律的压缩文件,在这个压缩文件里面,每一个文件都有其作用和意义,你可以把后缀名docx改成zip,然后用压缩软件打开,或者直接通过unzip命令解压一个docx文件,你将发现一个新世界:

/Users/cyp/Desktop ➜ unzip demo.docx
Archive:  demo.docx
  inflating: [Content_Types].xml
  inflating: _rels/.rels
  inflating: word/_rels/document.xml.rels
  inflating: word/document.xml
  inflating: word/theme/theme1.xml
  inflating: word/settings.xml
  inflating: docProps/core.xml
  inflating: word/fontTable.xml
  inflating: word/webSettings.xml
  inflating: word/styles.xml
  inflating: docProps/app.xml

在这些文件中,你编写的内容、设置的样式等基本都在word/document.xml文件里面,所以你可以直接修改word/document.xml文件,然后再打包成一个zip文件并改后缀为docx,你就达到了通过修改xml内容而生成新文档的目的。

因此生成word文档这件事就变成了生成xml节点生成压缩包这两件事,而这两件事很简单,任何语言都能做到,这就是这个库探索并实现的技术路线。

DistChen avatar Jan 27 '21 07:01 DistChen

学到了,十分感谢

hitime888 avatar Jan 27 '21 09:01 hitime888