Come posso convertire i file Word in PDF a livello di programmazione?

Ho trovato diversi programmi open source / freeware che consentono di convertire i file .doc in file .pdf, ma sono tutti della varietà di driver dell’applicazione / stampante, senza l’SDK collegato.

Ho trovato diversi programmi che hanno un SDK che consente di convertire i file .doc in file .pdf, ma sono tutti di tipo proprietario, $ 2.000 una licenza o giù di lì.

Qualcuno sa di una soluzione programmatica pulita, economica (preferibilmente gratuita) al mio problema, usando C # o VB.NET?

Grazie!

Usa un ciclo foreach invece di un ciclo for – ha risolto il mio 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++; } 

Ecco una modifica di un programma che ha funzionato per me. Utilizza Word 2007 con il componente aggiuntivo Salva come PDF installato. Cerca una directory per i file .doc, li apre in Word e li salva come PDF. Tieni presente che dovrai aggiungere un riferimento a Microsoft.Office.Interop.Word alla soluzione.

 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; 

Per riassumere gli utenti di vb.net, l’opzione gratuita (deve avere installato Office):

Download di Microsoft Office Assembies:

  • pia per l’ufficio 2010
  • pia per l’ufficio 2007

  • Aggiungi riferimento a Microsoft.Office.Interop.Word.Application

  • Aggiungere utilizzando o importare (vb.net) istruzione in Microsoft.Office.Interop.Word.Application

Esempio 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 ha un componente COM, richiamabile da .NET o VBScript (esempi inclusi nel download).

Ma, mi sembra che una stampante sia proprio ciò di cui hai bisogno: basta mescolarlo con l’automazione di Word , e dovresti essere a posto.

C’è un’intera discussione sulle librerie per convertire Word in PDF sui forum di discussione di Joel . Alcuni suggerimenti dal thread:

  • Aspose
  • creatore di PDF
  • PDFsharp

Volevo solo aggiungere che ho usato le librerie Microsoft.Interop, in particolare la funzione ExportAsFixedFormat che non ho visto in questa discussione.

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

Ho passato il dolore Word in PDF quando qualcuno mi ha scaricato con 10000 file word per convertirlo in PDF. Ora l’ho fatto in C # e ho usato l’interoperabilità di Word ma era lento e si arrestava in modo anomalo se provavo a usare il PC … molto frustrante.

Questo mi ha portato a scoprire che potevo scaricare gli intervalli e la loro lentezza ….. per Excel che uso (EPPLUS) e poi ho scoperto che è ansible ottenere uno strumento gratuito chiamato Spire che consente la conversione in PDF … con limitazioni!

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

Lo faccio come parte di un processo di rilascio – convertire un documento Word in PDF.

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

non esattamente programmaticamente, ma potrebbe aiutarti.

Quando mi sono imbattuto in alcuni problemi con l’automazione del side office del server abbiamo esaminato la tecnica descritta qui su codeproject . Utilizza la versione portatile (che può essere distribuita tramite xcopy) di OpenOffice in combinazione con una macro. Anche se non abbiamo ancora fatto l’interruttore, sembra molto promettente.

Sono rimasto impressionato da Gembox ( http://www.gemboxsoftware.com/ ) che fornisce un’edizione gratuita limitata della gestione dei documenti (include la conversione pdf). Fanno anche delle librerie per fogli di calcolo. La 1 licenza di sviluppatore se superi i loro limiti (che immagino tu abbia) è di circa $ 580 ( http://www.gemboxsoftware.com/document/pricelist ). OK, non è gratuito (o secondo me relativamente poco costoso) ma è molto più economico di $ 2000. Dal momento che capisco dal loro listino prezzi non ci sono royalty per le distribuzioni dei server. Potrebbe valere la pena di avvicinarsi a loro e vedere se faranno un accordo se non si desidera eseguire il proprio.

Sembra che ci siano alcune informazioni pertinenti qui:

Conversione di documenti MS Word in PDF in ASP.NET

Inoltre, con Office 2007 con funzionalità di pubblicazione su PDF, suppongo che potresti utilizzare l’automazione dell’ufficio per aprire il file * .DOC in Word 2007 e Salva come PDF. Non sono troppo entusiasta dell’automazione dell’ufficio perché è lento e incline all’impiccagione, ma lo butto lì fuori …

Ho usato ABCpdf che è un’opzione programmatica e non era troppo costoso, $ 300 / licenza. Funziona con OpenOffice o ricade su Word se OpenOffice non è disponibile. L’installazione è stata un po ‘complicata con i permessi di OpenOffice COM, ma valeva la pena esternalizzare quella parte dell’app.

Il componente aggiuntivo Microsoft PDF per Word sembra essere la soluzione migliore per ora, ma dovresti prendere in considerazione che non converte tutti i documenti word correttamente in pdf e in alcuni casi vedrai un’enorme differenza tra la parola e il pdf di output. Purtroppo non sono riuscito a trovare alcuna API che possa convertire correttamente tutti i documenti di parole. L’unica soluzione che ho trovato per garantire che la conversione fosse corretta al 100% è stata la conversione dei documenti attraverso un driver di stampa. Il rovescio della medaglia è che i documenti vengono accodati e convertiti uno per uno, ma puoi essere sicuro che il pdf ottenuto è esattamente lo stesso del layout del documento word. Personalmente ho preferito utilizzare UDC (Universal document converter) e installato Foxit Reader (versione gratuita) sul server, quindi ho stampato i documenti avviando un “Processo” e impostando la sua proprietà Verb su “print”. È inoltre ansible utilizzare FileSystemWatcher per impostare un segnale al termine della conversione.

Finché è installato Word 2010 o versione successiva, è ansible utilizzare DocTo che fornisce un’applicazione a riga di comando per eseguire questa operazione.

Ho usato iTextSharp per generare PDF in precedenza. È una porta open source di iText dal mondo Java ed è piuttosto potente.

Non ho fatto esplicitamente una conversione da Word a PDF, ma ho creato e manipolato a livello di codice PDF con esso.

Ecco un altro link al progetto.