将Word (.doc) 文件转换成PDF格式是许多应用程序中的常见需求。然而,找到一种简洁、经济的编程解决方案可能具有挑战性。开源选项通常缺乏SDK,而专有解决方案通常价格过高。
为了应对这一挑战,这里有两种编程方法:
此解决方案解决了先前使用for循环的代码中的一个问题。使用如下所示的foreach循环实现代码可以解决此问题:
<code class="language-csharp">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++; }</code>
此解决方案利用Microsoft Word Interop来实现转换:
<code class="language-csharp">using Microsoft.Office.Interop.Word; using System; using System.IO; // ...其他using语句... // 创建新的Microsoft Word应用程序对象 Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application(); // C#没有可选参数,所以我们需要一个虚拟值 object oMissing = System.Reflection.Missing.Value; // 获取指定目录中Word文件的列表 DirectoryInfo dirInfo = new DirectoryInfo(@"\server\folder"); FileInfo[] wordFiles = dirInfo.GetFiles("*.doc"); word.Visible = false; word.ScreenUpdating = false; foreach (FileInfo wordFile in wordFiles) { // 转换为Object类型以用于word Open方法 Object filename = (Object)wordFile.FullName; // 使用虚拟值作为可选参数的占位符 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; // 将文档保存为PDF格式 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); // 关闭Word文档,但保持Word应用程序打开。 // doc必须转换为_Document类型,以便找到正确的Close方法。 object saveChanges = WdSaveOptions.wdDoNotSaveChanges; ((_Document)doc).Close(ref saveChanges, ref oMissing, ref oMissing); doc = null; } // word必须转换为_Application类型,以便找到正确的Quit方法。 ((_Application)word).Quit(ref oMissing, ref oMissing, ref oMissing); word = null;</code>
以上是如何有效且廉价地将Word文件编程转换为PDF?的详细内容。更多信息请关注PHP中文网其他相关文章!