簡體   English   中英

通過使用pptx生成的ppt在PowerPoint和libreoffice中的不同行為

[英]Different behavior in powerpoint and libreoffice by ppt generated using python-pptx

我正在嘗試在Flask服務器上使用python-pptx創建文件。 當我嘗試在我的代碼中使用text_frame.auto_size時,所有這些都可以正常工作,甚至下載也可以正常工作。 LibreOffice Impress可以完美顯示文本,但是MS Powerpoint不能正確顯示文本。

以下是說明問題的圖片-

LibreOffice- 在此處輸入圖片說明

微軟幻燈片軟件 - 在此處輸入圖片說明

另外,這是我正在使用的代碼-

text_box = slide.shapes.add_textbox(left, top, width, height)
text_frame = text_box.text_frame
text_frame.word_wrap = True
text_frame.auto_size = MSO_AUTO_SIZE.TEXT_TO_FIT_SHAPE

知道我在這里做錯了嗎?

不幸的是,這是PowerPoint的局限性,而且(以我的經驗)這是LibreOffice實際做得更好的地方。

您會注意到,如果您單擊PowerPoint文本,插入一個空格然后將其刪除,該文本將自動自動調整。 這可能無法解決問題,但可以指出原因。

在幻燈片后面的XML中,將緩存文本框的當前“自動調整”字體大小。 演示文稿打開時,LibreOffice會自動重新計算該緩存的圖形; PowerPoint沒有。

計算“自動調整”的字體大小是渲染引擎的工作,它可以訪問字體大小,換行/分行符等python-pptx不包括渲染引擎,也不能訪問一個(不存在)據我所知,適用於Python)。 因此,它可以做的最好的事情就是估算它,並且它不願意這樣做,因為這已經進入了渲染階段。

但是, .fit_text()方法的形式有一項實驗性功能,可以幫助您實現大部分目標。 基本上,這種功能是非常想要的,以至於有人願意贊助“盡力而為”解決方案,這就是該方法所代表的意思。 該鏈接上的文檔說明了如何使用它及其局限性。

請注意,該方法是實驗性的,這意味着如果它無法按您需要的方式工作,則不會將其視為錯誤。 如果可以做得更好,您可以自由進行闡述。

暫無
暫無

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

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