¿Cómo convierto archivos de Word a PDF mediante programación? [cerrado]

Resuelto Shaul Behr asked hace 15 años • 8 respuestas

He encontrado varios programas de código abierto/freeware que le permiten convertir archivos .doc a archivos .pdf, pero todos son de la variedad de aplicaciones/controladores de impresora, sin ningún SDK adjunto.

He encontrado varios programas que tienen un SDK que le permite convertir archivos .doc a archivos .pdf, pero todos son del tipo propietario, $2,000 por licencia o algo así.

¿Alguien conoce alguna solución programática limpia y económica (preferiblemente gratuita) para mi problema, usando C# o VB.NET?

¡Gracias!

Shaul Behr avatar Mar 04 '09 02:03 Shaul Behr
Aceptado

Utilice un bucle foreach en lugar de un bucle for; resolvió mi problema.

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++;
}

Aquí hay una modificación de un programa que funcionó para mí. Utiliza Word 2007 con el complemento Guardar como PDF instalado. Busca en un directorio archivos .doc, los abre en Word y luego los guarda como PDF. Tenga en cuenta que deberá agregar una referencia a Microsoft.Office.Interop.Word a la solución.

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;
Eric Ness avatar Mar 03 '2009 20:03 Eric Ness

Para resumir para los usuarios de vb.net, la opción gratuita (debe tener Office instalado):

Descarga de ensamblajes de Microsoft Office:

  • pia para oficina 2010
  • pia para oficina 2007

  • Agregar referencia a Microsoft.Office.Interop.Word.Application

  • Agregue una declaración de uso o importación (vb.net) a Microsoft.Office.Interop.Word.Application

Ejemplo de VB.NET:

        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()
Elger Mensonides avatar Sep 21 '2012 11:09 Elger Mensonides