【问题标题】:Creating RTF , DOC , or DOCX in iOS在 iOS 中创建 RTF、DOC 或 DOCX
【发布时间】:2013-06-04 09:48:51
【问题描述】:

我想使用 iOS 应用程序创建以下文件类型之一:RTF、DOC 或 DOCX。 用户应该能够编写文本添加图像。 UI 的构建不是问题,只有文件的创建。

有什么最佳做法可以做到这一点吗?!

第三方框架是一个选项,但我想自己做。

谢谢

【问题讨论】:

    标签: ios rtf docx doc


    【解决方案1】:

    我可以帮助你处理 docx 文件(RTF 文件更容易,doc 文件与 docx 非常相似,但组织得不太好)

    我认为你能做的最好的事情就是首先在文本编辑器中打开一个 docx 文件。您必须先解压缩文件。

    您将拥有以下文件夹

    >_rels
    >customXML
    >docProps
    >word:
        >_rels:
             document.xml.rels //this document tells word where the images are situated
        >media  //Here are the images
        >theme
        >document.xml //Here is the actual content of the file
        >header1.xml //Here is the content of your header
    >[Content_Types].xml
    

    要插入一些文本,请查看 document.xml 文件。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <w:document mc:Ignorable="w14 wp14" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape">
    <w:body>
    ....
    </w:body>
    </w:document>
    

    Docx 使用&lt;w:p&gt; 标记段落。 它使用&lt;w:r&gt; 表示具有一种格式的文本块。 它使用&lt;w:t&gt; 作为实际文本

    这将产生一个简单的 Hello 世界

    <w:p w:rsidP="00CA7135" w:rsidR="00137C91" w:rsidRDefault="00137C91">
        <w:r>
            <w:t>Hello world</w:t>
        </w:r>
    </w:p>
    

    对于图片,您必须提供更多信息:

                <w:p w:rsidP="00CA7135" w:rsidR="00B12C70" w:rsidRDefault="00B12C70">
                    <w:r>
                        <w:rPr>
                            <w:noProof/>
                            <w:lang w:eastAsia="fr-FR"/>
                        </w:rPr>
                        <w:drawing>
                            <wp:inline distB="0" distL="0" distR="0" distT="0" wp14:anchorId="7CC0BC42" wp14:editId="09031C8D">
                                <wp:extent cx="866775" cy="1323975"/>
                                <wp:effectExtent b="9525" l="0" r="9525" t="0"/>
                                <wp:docPr id="13" name="Image 13"/>
                                <wp:cNvGraphicFramePr>
                                    <a:graphicFrameLocks noChangeAspect="1" 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.openxmlformats.org/drawingml/2006/picture">
                                        <pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture">
                                            <pic:nvPicPr>
                                                <pic:cNvPr id="0" name=""/>
                                                <pic:cNvPicPr/>
                                            </pic:nvPicPr>
                                            <pic:blipFill>
                                                <a:blip r:embed="rId15"/>
                                                <a:stretch>
                                                    <a:fillRect/>
                                                </a:stretch>
                                            </pic:blipFill>
                                            <pic:spPr>
                                                <a:xfrm>
                                                    <a:off x="0" y="0"/>
                                                    <a:ext cx="866775" cy="1323975"/>
                                                </a:xfrm>
                                                <a:prstGeom prst="rect">
                                                    <a:avLst/>
                                                </a:prstGeom>
                                            </pic:spPr>
                                        </pic:pic>
                                    </a:graphicData>
                                </a:graphic>
                            </wp:inline>
                        </w:drawing>
                    </w:r>
                </w:p>
    

    此标签内的 id (13):&lt;wp:docPr id="13" name="Image 13"/&gt; 必须是唯一的。然后 Word 将查看 document.xml.rels 以查看图像的存储位置。

    文档.xml.rels:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
        <Relationship Id="rId8" Target="endnotes.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes"/>
        <Relationship Id="rId13" Target="media/image5.png" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"/>
        <Relationship Id="rId18" Target="media/image10.png" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"/>
        <Relationship Id="rId26" Target="header3.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/header"/>
        <Relationship Id="rId3" Target="styles.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"/>
        <Relationship Id="rId21" Target="media/image13.png" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"/>
        <Relationship Id="rId7" Target="footnotes.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes"/>
        <Relationship Id="rId12" Target="media/image4.png" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"/>
        <Relationship Id="rId17" Target="media/image9.png" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"/>
        <Relationship Id="rId25" Target="footer1.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer"/>
        <Relationship Id="rId2" Target="numbering.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering"/>
        <Relationship Id="rId16" Target="media/image8.png" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"/>
        <Relationship Id="rId20" Target="media/image12.png" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"/>
        <Relationship Id="rId1" Target="../customXml/item1.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml"/>
        <Relationship Id="rId6" Target="webSettings.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings"/>
        <Relationship Id="rId11" Target="media/image3.png" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"/>
        <Relationship Id="rId24" Target="header2.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/header"/>
        <Relationship Id="rId5" Target="settings.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings"/>
        <Relationship Id="rId15" Target="media/image7.png" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"/>
        <Relationship Id="rId23" Target="header1.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/header"/>
        <Relationship Id="rId28" Target="theme/theme1.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme"/>
        <Relationship Id="rId10" Target="media/image2.png" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"/>
        <Relationship Id="rId19" Target="media/image11.png" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"/>
        <Relationship Id="rId4" Target="stylesWithEffects.xml" Type="http://schemas.microsoft.com/office/2007/relationships/stylesWithEffects"/>
        <Relationship Id="rId9" Target="media/image1.png" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"/>
        <Relationship Id="rId14" Target="media/image6.png" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"/>
        <Relationship Id="rId22" Target="media/image14.png" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"/>
        <Relationship Id="rId27" Target="fontTable.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable"/>
    </Relationships>
    

    如您所见,使用此标签,id 为 13 的图像位于 Target 属性处。

    <Relationship Id="rId13" Target="media/image5.png" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"/>
    

    【讨论】:

    • Word可以用base64渲染图片吗?
    • 是的,有可能。我创建了一个可以用一句话替换图像的库:这是一个演示:javascript-ninja.fr/docxgenjs/examples/imageTagging.html# Repo 在这里:github.com/edi9999/docxgenjs
    • 其实你需要一个可以压缩Base 64文件的库(我认为它存在于ios上)
    • 好的。您是如何将图像放入 JavaScript 对象的?例如“图像数据”。很抱歉唠叨你,但这真的很酷!
    • 这是通过 XmlHttpRequest 完成的:var xhrImage= new XMLHttpRequest(); xhrImage.open('GET', './image.png', true); if (xhrImage.overrideMimeType) { xhrImage.overrideMimeType('text/plain; charset=x-user-defined'); } xhrImage.onreadystatechange = function(e) { if (this.readyState == 4 &amp;&amp; this.status == 200) { window.imgData=this.response; } }; xhrImage.send();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 2016-08-03
    相关资源
    最近更新 更多