2013-03-17 89 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

相關問題