Convertir DOCX en PDF en C#

DocxToPdfConverter rend un document Word en PDF en un seul appel, sans Word, sans LibreOffice et sans interop Office. C'est du code managé de bout en bout, il tourne donc de la même façon dans un conteneur Linux et sur arm64 que sur un poste Windows.

using DocToolkit;

byte[] docx = File.ReadAllBytes("input.docx");
byte[] pdf = DocxToPdfConverter.Convert(docx);
File.WriteAllBytes("output.pdf", pdf);

Ce qu'il faut

  • Aucun navigateur, headless ou non.
  • Aucune installation d'Office, et pas de LibreOffice.
  • Aucun fichier natif : uniquement du code managé.
  • Aucun réseau à l'exécution, sauf si vous le demandez.

Bon à savoir

  • Synchrone : Convert prend le .docx sous forme de byte[] et renvoie le PDF sous forme de byte[] ; ConvertFile(inputPath, outputPath) va d'un chemin à un autre.
  • Un DOCX chiffré est refusé avec une DocumentConversionException ; retirez d'abord le mot de passe avec DocxEditor.Unprotect.
  • Le texte non latin dépend des polices présentes sur la machine hôte. Passez suffisamment de polices dans un PdfFontOptions à Convert(docx, fonts) : elles remplacent les polices de secours de l'hôte au lieu de s'y ajouter, donc en passer trop peu est pire que de n'en passer aucune.
  • Les images distantes du document ne sont pas récupérées : la conversion réussit sans elles.

Installation

dotnet add package Ank.DocToolkit

NuGetDocumentationGitHub