将自定义字体添加到Word文档

时间:2017-03-09 23:35:07

标签: xml fonts ms-word ms-office docx

我需要为具有不同操作系统(Mac和Windows)的多用户办公室设置Word模板。我有Office 2016 for Mac,它不提供将字体嵌入.docx / .dotx容器的可能性。

我可以手动将某些自定义字体添加到容器中吗?我创建了一个测试文件并解压缩,因此我看到了实际的XML文件。我查看了word / fontTable.xml,但它只显示有关使用过的字体的信息:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:fonts xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" mc:Ignorable="w14 w15">
<w:font w:name="Calibri">
    <w:panose1 w:val="020F0502020204030204"/>
    <w:charset w:val="00"/>
    <w:family w:val="auto"/>
    <w:pitch w:val="variable"/>
    <w:sig w:usb0="E00002FF" w:usb1="4000ACFF" w:usb2="00000001" w:usb3="00000000" w:csb0="0000019F" w:csb1="00000000"/>
</w:font>
<w:font w:name="DengXian">
    <w:panose1 w:val="02010600030101010101"/>
    <w:charset w:val="86"/>
    <w:family w:val="auto"/>
    <w:pitch w:val="variable"/>
    <w:sig w:usb0="A00002BF" w:usb1="38CF7CFA" w:usb2="00000016" w:usb3="00000000" w:csb0="0004000F" w:csb1="00000000"/>
</w:font>
<w:font w:name="Times New Roman">
    <w:panose1 w:val="02020603050405020304"/>
    <w:charset w:val="00"/>
    <w:family w:val="auto"/>
    <w:pitch w:val="variable"/>
    <w:sig w:usb0="E0002AEF" w:usb1="C0007841" w:usb2="00000009" w:usb3="00000000" w:csb0="000001FF" w:csb1="00000000"/>
</w:font>
<w:font w:name="Arial">
    <w:panose1 w:val="020B0604020202020204"/>
    <w:charset w:val="00"/>
    <w:family w:val="auto"/>
    <w:pitch w:val="variable"/>
    <w:sig w:usb0="E0002AFF" w:usb1="C0007843" w:usb2="00000009" w:usb3="00000000" w:csb0="000001FF" w:csb1="00000000"/>
</w:font>
<w:font w:name="DengXian Light">
    <w:panose1 w:val="02010600030101010101"/>
    <w:charset w:val="86"/>
    <w:family w:val="auto"/>
    <w:pitch w:val="variable"/>
    <w:sig w:usb0="A00002BF" w:usb1="38CF7CFA" w:usb2="00000016" w:usb3="00000000" w:csb0="0004000F" w:csb1="00000000"/>
</w:font>
<w:font w:name="Calibri Light">
    <w:panose1 w:val="020F0302020204030204"/>
    <w:charset w:val="00"/>
    <w:family w:val="auto"/>
    <w:pitch w:val="variable"/>
    <w:sig w:usb0="A00002EF" w:usb1="4000207B" w:usb2="00000000" w:usb3="00000000" w:csb0="0000019F" w:csb1="00000000"/>
</w:font>
</w:fonts>

我想在容器中包含自定义字体并使用它,因此我在模板中包含的字体与模板所使用的机器无关。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我认为您可以通过以下方式执行此操作

  1. 使用您需要的字体(使用API​​的range.getOoxml()功能)获取空白文档的OOXML。手动聚合预先需要的字体。
  2. 存储此OOXML并根据需要将其插入新文档中(使用range.insertOoxml()方法)
  3. 使用字体插入OOXML后,您应该可以在range.font.name =“font name”中使用它
  4. getOOXML示例:

    Word.run(function (context) {
    //make sure you previously add the fonts you need!
                 var myOOXMLTest = context.document.body.getOoxml();
                 return context.sync()
                 .then(function () {
                    var  returnOoxmlWithFonts = myOOXMLTest.value; // this is the OOXML you need to insert when you want to sue the fonts.
    
                 })
    
    
             })

    insertOOXML示例:

      Word.run(function (ctx) {
              
                 ctx.document.getSelection().insertOoxml(OOXML, "replace"); // use the OOXML obtained before!
                 return ctx.sync();
                 
    
             });