2011-05-24 88 views
2

使用OpenXmlSDK 2.0我正在讀寫Powerpoint文檔。我們有一種情況,在PowerPoint文檔中有一個簡單的字符串刪除了空格。使用OpenXmlSDK缺失PPTX段落中的空白

當對一個段落進行多個內聯標記更改時,單個段落中的例句就會出現。在下面重新創建標記可能有點棘手,但是使用Powerpoint標記和然後寫入句子應用格式似乎會產生以下結果。

快速棕色狐狸

這導致標記大致相同:

<a:p> 
    <a:r> 
     <a:t>The</a:t> 
    </a:r> 

    <a:r> 
     <a:t> </a:t> 
    </a:r> 

    <a:r> 
     <a:t b="1">quick</a:t> 
    </a:r> 

    <a:r> 
     <a:t> </a:t> 
    </a:r> 

    <a:r> 
     <a:t i="1">brown</a:t> 
    </a:r> 

    <a:r> 
     <a:t> fox</a:t> 
    </a:r> 

</a:p> 

這一切看起來像它的做工精細,以及PowerPoint中的客戶端中正確打開。但是在打開時,在使用OpenXmlSDK演示製作其他地方的變化,保存並關閉標記已被簡化文檔:

<a:p> 
    <a:r> 
     <a:t>The</a:t> 
    </a:r> 

    <a:r> 
     <a:t /> <!-- Whitespace missing, causes PowerPoint to ignore it. --> 
    </a:r> 

    <a:r> 
     <a:t b="1">quick</a:t> 
    </a:r> 

    <a:r> 
     <a:t /> <!-- Whitespace missing, causes PowerPoint to ignore it. --> 
    </a:r> 

    <a:r> 
     <a:t i="1">brown</a:t> 
    </a:r> 

    <a:r> 
     <a:t> fox</a:t> 
    </a:r> 

</a:p> 

有沒有竅門在標記保留空間,說明什麼?或者另一種方式,我們可以構建這些運行包括空間?

+0

我這樣做沒有SDK - 只是簡單的Linq和System.IO.Packaging。對於SlidePart,您只需設置'slide = XElement.Load(新建StreamReader(slidePart.GetStream),LoadOptions.PreserveWhitespace)'。 SDK已經認爲它知道它在做什麼,所以我認爲你不會有太多的運氣。其他選項可能是通過代碼預先在其中一個文本標記中保留空白。看起來你可能只是在對詞語進行某種拆分,使用空格作爲分隔符。也許嘗試一種不同的方法? – 2011-05-28 04:25:03

+0

謝謝,到目前爲止,我採用的方法是在繼續之前清理代碼中的標記。我覺得我錯過了SDK中的一些東西,它看起來不像是期望的行爲。此外WordProcessing文本元素似乎有一個特定的「空間」屬性。 – damoe 2011-05-30 06:32:49

+0

爲什麼SDK人員不能解決這個問題?這已經超過1年了,因爲這個問題已經報告了......嘆息... – 2012-10-23 06:51:23

回答

0

你需要做< A:T的xml:空間= 「保存」 > </A:T >

的XML:空間= 「保存」 告訴它掛到空白(從內存中寫入 - 可能有錯誤的語法)。

+0

這是理想的我正在尋找的東西,但是xml:space屬性無法通過SDK添加到文本元素中DrawingML命名空間。 WordProcessing元素支持此元素,但不支持。 – damoe 2011-05-25 08:04:23