2013-03-17 90 views
3

我目前正在研究一个将docx文件作为输入并使用它来构建html页面的库,由于含糊不清和缺少docx文档,我不得不严重依赖于示例输出来决定如何处理某些的东西。其中之一就是超链接。什么是在docx文件中创建超链接的允许方式?

至于我迄今的docx已经看到,至少,做超链接的方式有两种:

  • 锚 - <w:hyperlink w:anchor="_Toc000000000" history="1"></w:hyperlink>

    这似乎是这样搞的大多是首选方式TOC链接。

  • 标识 - <w:hyperlink w:id="rId7" history="1"></w:hyperlink>

    这似乎是指定的超级链接的URL(与在.xml.rels文件中定义的ID)

到目前为止好,只有这样我问题在于我遇到过文件,他们只是简单地指定了“超链接”的rStyle值(在textrun对象上),然后似乎相信这会使文本充当超链接到textrun中指定的标题。

例如一个文件可以包含以下内容:

<w:p> 
    <w:pPr> 
    <w:pStyle w:val="Heading1"/> 
    </w:pPr> 
    <w:r> 
    <w:t>Introduction</w:t> 
    </w:r> 
</w:p> 

而且再往follwing:

<w:p> 
    <w:r> 
    <w:t>This is a hyperlink to </w:t> 
    </w:r> 
    <w:r> 
    <w:rPr> 
     <w:rStyle w:val="Hyperlink"/> 
    </w:rPr> 
    <w:t>Introduction</w:t> 
    </w:r> 
    <w:r> 
    <w:t>.</w:t> 
    </w:r> 
</w:p> 

所以我的问题是,这几样“超链接”(w:p代替w:hyperlink)实际上是有效还是仅仅是那些单词或我拥有的文件的作者做错了?

回答

3

当你说docx格式很模糊且缺少文档时,你看过规格吗? http://www.ecma-international.org/publications/standards/Ecma-376.htm(尽管我发现它们在关键点上含糊不清)。

至少有两种方法可以创建链接。 w:超链接就是其中之一。

w:hyperlink元素既可以在内部链接,也可以在外部链接,并且可以或多或少地发现您发现的内容。

在外部超链接的情况下,它将具有关系id,并且该文档的关系中的条目标记为具有uri的外部关系。该规范说,如果超链接是外部的,锚定属性应该被忽略,但实际上,我发现Word将在此处粘贴外部网址的锚点部分。例如。 http://example.com/page#myAnchor将在关系中存储没有#myAnchor的URI,并且hyperlinkanchor属性将具有没有“#”的“myAnchor”。你可能想要检查两者。

对于内部超链接,锚点应匹配w:bookmarkStart元素的name属性,或者是“_GoBack”或“_top”之类的特殊值。

第二种情况是链接的图像,不幸的是,它更加复杂。将会有一个w:drawing图像,该图像将具有docPr元素和hlinkClick元素,该元素将与目标有一个关系id。这个规范似乎有点不清楚,但看看Word做了什么,看起来好像这个关系是内部的,它将是一个书签名(前缀为'#'),如果是外部的,则为uri。

+0

嗯,我很抱歉的措辞不好。我应该指定“良好的文档”。另外我没有在我的文档中使用说明文档,所以完全可以理解的通信错误。 :) 非常感谢您的答案! – Hobblin 2013-03-18 21:17:46

+0

没问题。我只是想确保你知道它,即使它不会回答你的问题。我发现它对于大多数事情非常有帮助,至少作为一个起点,当关键事物丢失或没有明确指定时,或者当Word看起来与规范行为不一样时,会感到沮丧。 :) – Marc 2013-03-20 21:52:28

相关问题