簡體   English   中英

如何將Indesign文件中的所有對象映射到XML

[英]How do I map all objects in Indesign file to XML

結束目標

最終,我需要將InDesign文件導出為HTML,以使每個HTML塊級元素都具有某種唯一的ID(只要唯一,就沒有關系),唯一的ID仍保留在無論用戶對InDesign內容進行了什么修改,InDesign文件都不會更改,並且會與HTML中的每個元素一起導出。 像這樣:

<p data-id="4j8w53">My first paragraph</p>
<p data-id="k39dh2">My second paragraph</p>

然后,當InDesign用戶更改內容並將其重新導出為HTML時,現有ID仍然保留,如下所示:

<p data-id="4j8w53">My first paragraph is awesome!</p>
<p data-id="lq09cf">My inserted paragraph</p>
<p data-id="k39dh2">My second paragraph</p>

如果有人知道執行此操作的簡單方法,我很想聽聽。

計划一

為了弄清楚這一點,我決定要做的是將InDesign文件中的所有內容都映射到XML,然后通過JS用戶腳本將ID屬性添加到XML項,然后通過另一個JS用戶腳本將XML導出為HTML。 由於XML項實際上是映射到InDesign項的,因此ID會隨着文本的更改而保持不變。

這是問題所在:我似乎無法使用mapStylesToXMLTags()函數將所有InDesign內容映射到XML。 我在文件中有一堆stories ,其中一個stories在導出時從未顯示在XML中。 它根本就不見了。

如果當我使用mapStylesToXMLTags()時可以將所有內容顯示在導出的XML中,則可能會解決我的問題。

或者,如果有一種不同的映射機制可以將我的所有項目實際映射到XML並保留映射,那么它也可能會起作用。

計划二

如果我通過遞歸循環allPageItemsapp.documents[0]和手動創建的XML,而不是使用mapStylesToXMLTags()則缺少的對象顯示出來就像一切。

但是,我提供給XML元素的ID不會附加到InDesign元素,因為這些元素實際上並沒有正式地“映射”到XML元素。 它們在更改后不會自動更新。 對InDesign文件進行更改時,我將不得不覆蓋所有XML,從而消除了數據ID值的一致性。

另外,當我以這種方式進行操作時,所有內容都亂七八糟,並且與InDesign文件中的布局方式脫節。

如果我能把所有內容都映射出來,那么第一號計划似乎仍然是最有前途的。

請在我身上輕松一點

我希望一切都清楚。 FWIW,我是JS / HTML專家,而不是InDesign專家。 我是InDesign的新手,我只是想弄清楚如何使組織中的InDesign用戶實現此過程。

如果文本被丟棄,則可能是映射不完整或文本不可標記,例如腳注,文本變量或標題。 為了使它們進入循環,您需要在導出之前將它們轉換為常規文本。 但以防萬一,這是一個簡單的腳本。 您可以嘗試看看它是否捕獲了有問題的文本。

 //MAIN ROUTINE var main = function() { var doc = app.properties.activeDocument, fgp = app.findGrepPreferences.properties, fcgo = app.findChangeGrepOptions.properties, found, n = 0, text, pTag, xe; //Exit if no documents open if ( !doc ) { alert("You need an open document" ); return; } //Setting F/R Grep app.findGrepPreferences = app.findChangeGrepOptions = null; app.findGrepPreferences.properties = { findWhat : "^.+", } app.findChangeGrepOptions.properties = { includeFootnotes:false, includeHiddenLayers:true, includeLockedLayersForFind:true, includeLockedStoriesForFind:true, includeMasterPages:true, } //Adding "p" tag if needed pTag = doc.xmlTags.itemByName("p"); !pTag.isValid && pTag = doc.xmlTags.add({name:"p"}); //Getting paragraphs occurences found = doc.findGrep(); n = found.length; while ( n-- ) { text = found[n]; xe = text.associatedXMLElements; //Adding "p" tags with ids if needed if ( !xe.length || xe[0].markupTag.name!="p") { doc.xmlElements[0].xmlElements.add( pTag, text ).xmlAttributes.add('id', guid () ); } } //Reverting initial F/R settings app.findGrepPreferences.properties = fgp; app.findChangeGrepOptions.properties = fcgo; } //Returns unique ID function guid() { function s4() { return Math.floor((1 + Math.random()) * 0x10000) .toString(16) .substring(1); } return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4(); } var u; //Run app.doScript ( "main()",u,u,UndoModes.ENTIRE_SCRIPT, "The Script" ); 

顯然,未映射到XML的對象是鏈接的InCopy文件,該文件已被鎖定,無法進行任何編輯。 為了將其映射到XML,我必須在其內部單擊,然后選擇“編輯”>“ InCopy”>“簽出”。 之后,使用我上面的“第一個計划”就毫不費力地進行了映射。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM