5

背景:我正在尝试使用 c# 和 Interop 生成一个 word 文档。我成功地插入了表格、页眉、页脚、图表……大部分工作正常。作为下一步,我希望将其转换为 pdf。

流程调整:由于我使用的是 word 2011 和 word 2007(安装 saveaspdf 插件后),我使用“另存为”将文档保存为 pdf,然后文件类型为 pdf。

提出的问题:我已使用以下代码成功地将 pdf 嵌入到我的文档中。

        Object oIconLabel = new FileInfo(file_path).Name;
        Object oFileDesignInfo = file_path;
        Object oClassType = "AcroExch.Document.7";
        Object oTrue = true;
        Object oFalse = false;
        Object oMissing = System.Reflection.Missing.Value;
        Object index = 0;
        Range r = d.Bookmarks.get_Item(ref eod).Range;

        r.InlineShapes.AddOLEObject(
            ref oClassType, ref oFileDesignInfo, ref oFalse, ref oTrue, ref oMissing,
            ref index, ref oIconLabel, ref oMissing);

这里 d 是 Document 对象。现在,当我尝试将此 word 文档另存为 pdf 时,使用

 d.SaveAs(ref filename, ref filetype, 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);

pdf正在生成。但是我嵌入的文档没有嵌入到生成的 pdf 中。而是只显示一个图标。

如何将文档嵌入到 pdf 中?我们通常如何处理这种情况。如果问题不清楚,请告诉我。

4

3 回答 3

9

这是我选择的错误 API。它不应该是另存为。它是 ExportAsFixedFormat。

文档在这里

样品用法可以

d.ExportAsFixedFormat(filename.ToString(), WdExportFormat.wdExportFormatPDF,false,WdExportOptimizeFor.wdExportOptimizeForOnScreen,
                    WdExportRange.wdExportAllDocument,1,1,WdExportItem.wdExportDocumentContent,true,true,
                    WdExportCreateBookmarks.wdExportCreateHeadingBookmarks,true,true,false,ref oMissing);
于 2012-12-05T19:39:14.413 回答
4

这段代码对我来说适用于 word 文档中的文本、表格、图形和图像。
需要在服务器中安装 Word。
我正在使用 Word 2013 并且没问题。

Microsoft.Office.Interop.Word.Application wordApplication = new Microsoft.Office.Interop.Word.Application();

                    object oMissing = System.Reflection.Missing.Value;
                    Object oFalse = false;
                    Object filename = (Object)path;

                    Microsoft.Office.Interop.Word.Document doc = wordApplication.Documents.Open(ref filename, ref oMissing,
                        ref oFalse, 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();

                    var pathfilename = Path.Combine(Server.MapPath("~/UploadDocuments/PDF"), fileName).Replace(".docx", ".pdf"); ;
                    Object filename2 = (Object)pathfilename;

                    doc.SaveAs(ref filename2, WdSaveFormat.wdFormatPDF,
                        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 word doc and word app.
                    object saveChanges = WdSaveOptions.wdDoNotSaveChanges;

                    ((_Document)doc).Close(ref saveChanges, ref oMissing, ref oMissing);

                    ((_Application)wordApplication).Quit(ref oMissing, ref oMissing, ref oMissing);

                    wordApplication = null;
                    doc = null;
于 2016-06-23T13:04:53.363 回答
0

在此处查找函数 SaveAs 的所有参数的含义:

http://msdn.microsoft.com/en-us/library/office/bb256835(v=office.12).aspx

使用 UseISO19005_1 = True 嵌入字体子集

于 2012-08-03T14:18:37.440 回答