¿Cómo convierto archivos de Word a PDF mediante progtwigción?

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

He encontrado varios progtwigs que sí tienen un SDK que te permite convertir archivos .doc a archivos .pdf, pero todos son del tipo propietario, $ 2,000 por licencia o menos.

¿Alguien sabe de alguna solución programática limpia, barata (preferiblemente gratuita) para mi problema, usando C # o VB.NET?

¡Gracias!

Use 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 progtwig 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 en formato 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; 

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

Descarga de Microsoft Office assembies:

  • pia para oficina 2010
  • pia para oficina 2007

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

  • Agregue la instrucción de usar o importar (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() 

PDFCreator tiene un componente COM, que se puede llamar desde .NET o VBScript (muestras incluidas en la descarga).

Pero, me parece que una impresora es justo lo que necesita, simplemente mezcle eso con la automatización de Word , y debería estar listo para empezar.

Hay una discusión completa de bibliotecas para convertir Word a PDF en los foros de discusión de Joel . Algunas sugerencias del hilo:

  • Aspose
  • creador de PDF
  • PDFsharp

Solo quería agregar que utilicé las bibliotecas Microsoft.Interop, específicamente la función ExportAsFixedFormat que no vi utilizada en este hilo.

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

Pasé por el dolor de Word to PDF cuando alguien me dejó con archivos de 10000 palabras para convertir a PDF. Ahora lo hice en C # y usé interoperabilidad de Word, pero fue lento y colapsé si traté de usar una PC … muy frustrante.

Esto me llevó a descubrir que podía eliminar interoperabilidad y su lentitud ….. para Excel que uso (EPPLUS) y luego descubrí que puedes obtener una herramienta gratuita llamada Spire que permite convertir a PDF … ¡con limitaciones!

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

Lo hago como parte de un proceso de lanzamiento: convertir un Word Doc en PDF.

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

no exactamente programáticamente, pero puede ayudarte.

Cuando tropecé con algunos problemas con la automatización del servidor de lado, vimos la técnica descrita aquí en codeproject . Utiliza la versión portátil (que se puede implementar a través de xcopy) de OpenOffice en combinación con una macro. Aunque todavía no hemos hecho el cambio, parece muy prometedor.

Estoy impresionado con Gembox ( http://www.gemboxsoftware.com/ ) que ofrece una edición gratuita limitada de la administración de documentos (incluye conversión de PDF). También hacen bibliotecas para hojas de cálculo. La licencia de 1 desarrollador si excedes sus límites (lo que imagino que harás) es de alrededor de $ 580 ( http://www.gemboxsoftware.com/document/pricelist ). OK, no es gratis (o en mi opinión relativamente barato) pero es mucho más barato que $ 2000. Tal como lo entiendo de su lista de precios, tampoco hay regalías para las implementaciones del servidor. Puede valer la pena acercarse a ellos y ver si van a hacer un trato si no quieres hacer tu propio.

Parece ser alguna información relevante aquí:

Conversión de documentos de MS Word a PDF en ASP.NET

Además, con Office 2007 con la función de publicación en PDF, creo que podría usar la automatización de oficina para abrir el archivo * .DOC en Word 2007 y Guardar como PDF. No estoy muy interesado en la automatización de oficinas, ya que es lento y propenso a colgarse, pero solo tirando eso por ahí …

Utilicé ABCpdf que es una opción programática y no era demasiado cara, $ 300 / licencia. Funciona con OpenOffice o recurre a Word si OpenOffice no está disponible. La configuración era un poco complicada con los permisos de OpenOffice COM, pero definitivamente valía la pena externalizar esa parte de la aplicación.

El complemento de Microsoft PDF para Word parece ser la mejor solución por ahora, pero debe tener en cuenta que no convierte todos los documentos de Word correctamente en PDF y, en algunos casos, verá una gran diferencia entre la palabra y el PDF resultante. Desafortunadamente no pude encontrar ninguna API que convierta todos los documentos de Word correctamente. La única solución que encontré para garantizar que la conversión fuera 100% correcta fue la conversión de los documentos a través de un controlador de impresora. La desventaja es que los documentos se ponen en cola y se convierten uno por uno, pero puede estar seguro de que el pdf resultante es exactamente igual al diseño del documento Word. Yo personalmente preferí usar UDC (convertidor universal de documentos) e instalé Foxit Reader (versión gratuita) en el servidor, luego imprimí los documentos comenzando un “Proceso” y estableciendo su propiedad Verb para “imprimir”. También puede usar FileSystemWatcher para establecer una señal cuando la conversión se haya completado.

Siempre que tenga Word 2010 o posterior instalado, puede usar DocTo, que proporciona una aplicación de línea de comandos para hacer esto.

He usado iTextSharp para generar archivos PDF antes. Es un puerto de fuente abierta de iText del mundo de Java y es bastante poderoso.

No he hecho una conversión explícita de Word a PDF, pero he creado y manipulado archivos PDF con ella.

Aquí hay otro enlace al proyecto.