web-dev-qa-db-fra.com

Markdown à docx, y compris un modèle complexe

J'ai automatisé ma génération pour convertir des fichiers Markdown en fichiers DOCX à l'aide de Pandoc. J'ai même utilisé un document de référence pour le style du document final. La commande que j'utilise est:

pandoc -f markdown -t docx --data-dir=docs/rendering/ mydoc.md -o mydoc.docx

Le reference.docx est récupéré par Pandoc auprès de docs/rendering et Pandoc rend mydoc.docx avec les mêmes styles que le document de référence.

Toutefois, reference.docx contient plus que des styles. Il contient des logos coporés, un préambule, etc.

Comment puis-je automatiser la fusion du contenu Markdown avec les styles et le contenu de reference.docx. Ma solution doit fonctionner sous Linux.

64
Synesso

Mise à jour

Utilisez la version pipée suggérée par l'utilisateur Christian Long:

pandoc -t latex mydoc.md | pandoc -f latex --data-dir=docs/rendering/ -o mydoc.docx

Je sais que cela tarde à venir, mais je suppose que les gens sont toujours à la recherche de solutions à ce problème trois ans après la question initiale - je le sais.

Ma solution était d'utiliser LaTeX comme intermédiaire entre markdown et docx (en fait, je convertissais du mode org, mais même différence). Donc, dans votre cas, je pense qu'une solution à une ligne serait:

pandoc -f markdown -t latex -o mydoc.tex mydoc.md && \
pandoc -f latex -t docx --data-dir=docs/rendering/ -o mydoc.docx mydoc.tex

Ce qui pourrait vous rapprocher de votre objectif. Bien sûr, Pandoc a une centaine d'arguments qu'il peut gérer, et il existe probablement des moyens de rendre cela plus joli. Il a également reçu plusieurs mises à jour depuis la première publication de votre question.

23
François Leblanc

Idéalement, vous pouvez utiliser un modèle docx personnalisé, mais pandoc ne le prend pas encore en charge. UNE reference.docx le fichier permet uniquement d'incorporer des styles personnalisés dans les fichiers docx nouvellement créés.

Heureusement, vous pouvez l'approcher en utilisant odt au lieu de docx. Vous pouvez assez facilement modifier le modèle OpenDocument par défaut pour inclure vos logos personnalisés, préambule et autres choses. Utilisez le modèle personnalisé conjointement avec un reference.odt fichier pour obtenir tous les styles et le contenu personnalisé.

Une fois que vous avez le fichier au format odt, vous pouvez utiliser n'importe quel nombre d'outils de ligne de commande pour convertir d'odt en docx. Par exemple, sous Linux, vous pouvez exécuter

libreoffice --invisible --convert-to docx test.odt

Ou sous OS X:

/Applications/LibreOffice.app/Contents/MacOS/soffice.bin --invisible --convert-to docx test.odt
12
Andrew

Idéalement, PanDoc développera cette fonctionnalité mais cela ne semble pas probable de sitôt.

Je ne connais aucun outil qui fera le travail directement, mais vous pourriez probablement revenir à la fusion reference.docx et votre produit PanDoc mydoc.docx dans du code.

Le format .docx est une archive Zip (principalement) de fichiers XML. Le plus important est Word/document.xml. Si vous utilisez un outil XML pour prendre (la plupart) le document.xml d'un fichier et insérez-le dans l'autre, vous aurez quelque chose de plus proche de ce dont vous avez besoin.

Je pourrais pirater un exemple, par exemple, Ruby si une illustration pouvait aider.

11
RJHunter

MISE À JOUR: cette fonctionnalité est incomplète

Je l'ai utilisé sur certains modèles complexes et je l'ai trouvé très bien mappé les polices, les logos d'entreprise, etc. Mais en utilisant .docx -> .docx, j'ai dû appliquer manuellement des styles de titre aux sauts de chapitre/section. La police était correcte, mais pas la section. Je vais essayer .md -> .docx ensuite.


Cette fonctionnalité est désormais disponible dans Pandoc, comme décrit ici:

Markdown à docx, y compris le modèle complexe

À partir du lien ci-dessus:

pandoc  input --reference-docx=my-reference.docx -o out.docx

my-reference.docx (n.b. pas un .dotx) peut être:

  • le dossier actuel OU
  • un dossier défini par --data-dir OU
  • le dossier par défaut du système pour le répertoire de données qui est
    • $ HOME/.pandoc sur les systèmes de type UNIX
    • C:\Documents And Settings\USERNAME\Application Data\pandoc sous Windows XP vous ne devriez plus utiliser
    • C:\Users\USERNAME\AppData\Roaming\pandoc sur Windows Vista ou version ultérieure.
1
Jason