2017-01-27 2 views
0

J'essaye de créer un fichier en utilisant python-pptx sur un serveur flask. Tout cela fonctionne et même le téléchargement fonctionne par le problème vient quand j'essaie d'utiliser text_frame.auto_size dans mon code. LibreOffice Impress affiche le texte parfaitement mais MS Powerpoint n'affiche pas le texte correctement.Comportement différent dans powerpoint et libreoffice par ppt généré en utilisant python-pptx

Voici les images qui expliquent la question -

LibreOffice - enter image description here

Powerpoint - enter image description here

De plus, voici le code que j'utilise -

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 

Une idée de ce que je fais mal ici?

Répondre

0

Ceci est malheureusement une limitation de PowerPoint et un endroit inhabituel (à mon avis) où LibreOffice fait effectivement mieux.

Vous remarquerez que si vous cliquez dans le texte PowerPoint, insérez un espace, puis supprimez-le, que le texte sera automatiquement mis à jour. Cela peut ne pas résoudre le problème, mais il indique la cause.

Dans le code XML situé derrière la diapositive, la taille de police "auto-ajustée" actuelle de la zone de texte est en cache. LibreOffice recalcule automatiquement ce chiffre mis en cache lorsque la présentation s'ouvre; PowerPoint ne fonctionne pas. Le calcul de la taille de police "auto-ajustée" est le travail du moteur de rendu, qui a accès aux tailles de police, aux sauts de lignes/mots, etc. python-pptx n'inclut pas de moteur de rendu ni n'a accès à un moteur de rendu (aucun n'existe pour Python autant que je sache). Donc, le mieux qu'il peut faire est de l'estimer et il préfère ne pas le faire, car cela commence à être rendu. Cependant, il existe une fonctionnalité expérimentale sous la forme de la méthode .fit_text() qui peut vous permettre d'y parvenir en grande partie. Fondamentalement, cette capacité était si désirée que quelqu'un était prêt à parrainer une solution de «meilleurs efforts», ce que représente cette méthode. La documentation de ce lien explique comment l'utiliser et ses limites.

Notez que cette méthode est expérimentale, ce qui signifie qu'elle ne sera pas considérée comme un bug si elle ne fonctionne pas comme vous le souhaitez. Vous êtes libre de l'élaborer si vous pouvez faire mieux.

+0

Merci pour la réponse! Mais je cours mon code sur une machine CentOS. Et fit_text a essayé d'obtenir l'information de police qui jette l'erreur "Unsupported Operating System" pour moi. J'ai également lu quelque part qu'il y a une demande de traction qui attend d'être fusionnée, ce qui va résoudre ce problème. Mais jusque-là, je ne peux pas utiliser fit_text. : / – yashdosi