Comment puis-je convertir des fichiers Word en PDF programmatically?

j'ai trouvé plusieurs programmes open-source/freeware qui vous permettent de convertir .doc file à .les fichiers pdf, mais ils sont tous de la variété application/pilote d'imprimante, sans SDK attaché.

j'ai trouvé plusieurs programmes qui ont un SDK vous permettant de convertir .doc file à .des fichiers pdf, mais ils sont tous Du Type propriétaire, 2 000 $par licence ou à peu près.

personne Ne sait de tout nettoyer, peu coûteux (de préférence gratuit) solution programmatique à mon problème, en utilisant C# ou VB.NET Je ne sais pas.

Merci!

208
demandé sur Shaul Behr 2009-03-03 22:03:26

15 réponses

utilisez une boucle foreach au lieu d'une pour boucle - il a résolu mon problème.

int j = 0;
foreach (Microsoft.Office.Interop.Word.Page p in pane.Pages)
{
    var bits = p.EnhMetaFileBits;
    var target = path1 +j.ToString()+  "_image.doc";
    try
    {
        using (var ms = new MemoryStream((byte[])(bits)))
        {
            var image = System.Drawing.Image.FromStream(ms);
            var pngTarget = Path.ChangeExtension(target, "png");
            image.Save(pngTarget, System.Drawing.Imaging.ImageFormat.Png);
        }
    }
    catch (System.Exception ex)
    {
        MessageBox.Show(ex.Message);  
    }
    j++;
}

voici une modification d'un programme qui a fonctionné pour moi. Il utilise le mot 2007 avec le enregistrer en PDF add-in installé. Il cherche un répertoire pour .doc les ouvre en Word et les sauvegarde en PDF. Notez que vous devrez ajouter une référence à Microsoft.Bureau.Interop.Un mot pour la solution.

using Microsoft.Office.Interop.Word;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;

...

// Create a new Microsoft Word application object
Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();

// C# doesn't have optional arguments so we'll need a dummy value
object oMissing = System.Reflection.Missing.Value;

// Get list of Word files in specified directory
DirectoryInfo dirInfo = new DirectoryInfo(@"\server\folder");
FileInfo[] wordFiles = dirInfo.GetFiles("*.doc");

word.Visible = false;
word.ScreenUpdating = false;

foreach (FileInfo wordFile in wordFiles)
{
    // Cast as Object for word Open method
    Object filename = (Object)wordFile.FullName;

    // Use the dummy value as a placeholder for optional arguments
    Document doc = word.Documents.Open(ref filename, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing);
    doc.Activate();

    object outputFileName = wordFile.FullName.Replace(".doc", ".pdf");
    object fileFormat = WdSaveFormat.wdFormatPDF;

    // Save document into PDF Format
    doc.SaveAs(ref outputFileName,
        ref fileFormat, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing);

    // Close the Word document, but leave the Word application open.
    // doc has to be cast to type _Document so that it will find the
    // correct Close method.                
    object saveChanges = WdSaveOptions.wdDoNotSaveChanges;
    ((_Document)doc).Close(ref saveChanges, ref oMissing, ref oMissing);
    doc = null;
}

// word has to be cast to type _Application so that it will find
// the correct Quit method.
((_Application)word).Quit(ref oMissing, ref oMissing, ref oMissing);
word = null;
190
répondu Eric Ness 2015-03-16 15:16:25

pour résumer vb.net utilisateurs, l'option gratuite (doit avoir office installé):

Microsoft office assembles download:

  • pia for office 2010
  • pia for office 2007

  • ajouter une référence à Microsoft.Bureau.Interop.Mot.Application

  • ajouter utilisation ou importation (vb.net) déclaration à Microsoft.Bureau.Interop.Mot.Application

VB.NET exemple:

        Dim word As Application = New Application()
        Dim doc As Document = word.Documents.Open("c:\document.docx")
        doc.Activate()
        doc.SaveAs2("c:\document.pdf", WdSaveFormat.wdFormatPDF)
        doc.Close()
32
répondu Elger Mensonides 2017-05-29 13:52:54

PDFCreator a un composant COM, appelable à partir de .NET ou VBScript (échantillons inclus dans le téléchargement).

mais, il me semble qu'une imprimante est exactement ce dont vous avez besoin - il suffit de mélanger cela avec mot's automation , et vous devriez être bon à aller.

14
répondu Mark Brackett 2009-03-04 10:59:23
7
répondu tgamblin 2009-03-03 19:05:15

je voulais juste ajouter que J'ai utilisé Microsoft.Interop libraries, spécifiquement ExportAsFixedFormat function que je n'ai pas vu utilisé dans ce thread.

    using Microsoft.Office.Interop.Word;
    using System.Runtime.InteropServices;
    using System.IO;
    using Microsoft.Office.Core;Application app;

    public string CreatePDF(string path, string exportDir)
    {
        Application app = new Application();
        app.DisplayAlerts = WdAlertLevel.wdAlertsNone;
        app.Visible = true;

        var objPresSet = app.Documents;
        var objPres = objPresSet.Open(path, MsoTriState.msoTrue, MsoTriState.msoTrue, MsoTriState.msoFalse);

        var baseFileName = Path.GetFileNameWithoutExtension(path);
        var pdfFileName = baseFileName + ".pdf";
        var pdfPath = Path.Combine(exportDir, pdfFileName);

        try
        {
            objPres.ExportAsFixedFormat(
                pdfPath,
                WdExportFormat.wdExportFormatPDF,
                false,
                WdExportOptimizeFor.wdExportOptimizeForPrint,
                WdExportRange.wdExportAllDocument
            );
        }
        catch
        {
            pdfPath = null;
        }
        finally
        {
            objPres.Close();
        }
        return pdfPath;
    }
7
répondu zeta 2016-11-04 18:51:39

je suis passé par le mot de la douleur PDF quand quelqu'un m'a jeté avec 10000 fichiers de mot à convertir en PDF. Maintenant je l'ai fait en C# et utilisé le mot interop mais il était lent et s'est écrasé si j'ai essayé d'utiliser PC à tous.. très frustrant.

cela m'amène à découvrir que je pouvais larguer interops et leur lenteur..... pour Excel j'utilise (EPPLUS) et puis j'ai découvert que vous pouvez obtenir un outil gratuit appelé Spire qui permet la conversion en PDF... avec des limites!

http://www.e-iceblue.com/Introduce/free-doc-component.html#.VtAg4PmLRhE

4
répondu Ggalla1779 2016-12-26 18:04:20

je le fais dans le cadre d'un processus de publication - convertir un mot Doc en PDF.

http://www.suodenjoki.dk/us/productions/articles/word2pdf.htm et http://www.oooforum.org/forum/viewtopic.phtml?t=3772&highlight=pdf+formulaire

pas exactement programmatique, mais peut vous aider.

3
répondu Tim 2009-03-03 19:36:23

quand je suis tombé sur quelques problèmes avec la bureautique côté serveur nous avons examiné la technique décrite ici sur codeprojet . Il utilise la version portable (qui peut être déployée via xcopy) D'OpenOffice en combinaison avec une macro. Bien que nous n'ayons pas encore fait le changement nous-mêmes, il semble très promissing.

3
répondu Cohen 2009-03-04 21:24:10

j'ai été impressionné par Gembox ( http://www.gemboxsoftware.com / ) qui fournissent une édition gratuite limitée de la gestion des documents (y compris la conversion pdf). Ils font aussi des bibliothèques pour les tableurs. La licence de développeur 1 si vous dépassez leurs limites (ce que j'imagine que vous allez faire) est d'environ $580 ( http://www.gemboxsoftware.com/document/pricelist ). OK, ce n'est pas gratuit (ou à mon avis relativement peu coûteux) mais c'est beaucoup moins cher plus de 2000$. Comme je le comprends de leur liste de prix, il n'y a pas de redevance non plus pour les déploiements de serveurs. Peut-être vaut-il la peine de les approcher et de voir s'ils feront un marché si vous ne voulez pas rouler votre propre.

2
répondu The Senator 2016-06-17 11:03:13

semble être une information pertinente ici:

conversion de documents MS Word en PDF en ASP.NET

en outre, avec Office 2007 ayant publier à la fonctionnalité PDF, je suppose que vous pourriez utiliser la bureautique pour ouvrir le *.Fichier DOC dans Word 2007 et Enregistrer en tant que PDF. Je ne suis pas trop envie de bureautique comme elle est lente et sujette à la pendaison, mais juste jeter...

1
répondu MikeW 2017-05-23 12:34:33

j'ai utilisé ABCpdf qui est une option programmatique et n'était pas trop cher, 300 $/licence. Il fonctionne soit avec OpenOffice, soit avec Word si OpenOffice n'est pas disponible. La configuration était un peu délicate avec les permissions DE COM D'OpenOffice, mais cela valait vraiment la peine d'externaliser cette partie de l'application.

1
répondu RyanW 2011-08-30 02:40:30

Microsoft PDF add-in for word semble être la meilleure solution pour le moment, mais vous devez prendre en considération qu'il ne convertit pas tous les documents word correctement en pdf et dans certains cas, vous verrez une énorme différence entre le mot et la sortie pdf. Malheureusement, je n'ai trouvé aucune api qui convertirait correctement tous les documents word. La seule solution que j'ai trouvée pour m'assurer que la conversion était correcte à 100% était de convertir les documents par l'intermédiaire d'un pilote d'imprimante. L'inconvénient est que les documents sont mis en file d'attente et convertis un par un, mais vous pouvez être sûr que le pdf résultant est exactement le même que la mise en page de document word. Personnellement, j'ai préféré utiliser UDC (Universal document converter) et installé Foxit Reader (version gratuite) sur le serveur, puis j'ai imprimé les documents en lançant un "processus" et en mettant sa propriété de verbe à "imprimer". Vous pouvez également utiliser FileSystemWatcher pour définir un signal lorsque la conversion est terminée.

1
répondu Arvand 2012-03-25 08:26:05

aussi longtemps que vous avez Word 2010 ou plus tard installé, vous pouvez utiliser DocTo qui fournit une application en ligne de commande pour le faire.

1
répondu Toby Allen 2016-01-07 21:08:30

pour les programmeurs qui sont dans une situation où ils ne peuvent pas installer Office sur leur serveur, ou opérant dans un environnement de nuage -- une alternative peu coûteuse aux autres réponses est Api2Pdf qui prend en charge la conversion de fichiers Word en PDF ainsi que tout autre fichier MS Office. C'est une API web et utilise LibreOffice sous le capot.

0
répondu apexdodge 2018-09-06 01:12:25

j'ai utilisé iTextSharp pour générer des fichiers PDF avant. C'est un port open source d'iText du monde Java et est assez puissant.

Je n'ai pas fait explicitement une conversion de mot en PDF, mais j'ai créé et manipulé des PDF avec elle.

voici un autre lien au projet.

-4
répondu Mike L 2009-03-03 20:48:42