.Net 使用 Office 互操作打印 PowerPoint 文档

Posted

技术标签:

【中文标题】.Net 使用 Office 互操作打印 PowerPoint 文档【英文标题】:.Net Print PowerPoint Document using Office interops 【发布时间】:2015-04-15 05:45:44 【问题描述】:

我正在做一个小项目,该项目可以使用一些打印机选项打印办公室文档。

MS Word interop 与 word docs 配合得很好,但是当我尝试使用 powerpoint interop 进行类似的操作时,它就不起作用了。

我用于打印 Word 文档的代码,使用缩放在一张纸上打印 4 页。

public void test5()
    
        try
        
            // Declaring the object variables we will need later
            object varFileName = filePath;
            object varFalseValue = false;
            object varTrueValue = true;
            object varMissing = Type.Missing;

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

            Microsoft.Office.Interop.PowerPoint.Application varPPT = new Microsoft.Office.Interop.PowerPoint.Application();

            Microsoft.Office.Interop.Word.Document varDoc =
           varWord.Documents.Open(ref varFileName, ref varMissing,
              true,
              ref varMissing, ref varMissing, ref varMissing, ref varMissing,
              ref varMissing, ref varMissing, ref varMissing,
              ref varMissing, ref varMissing, ref varMissing, ref varMissing,
              ref varMissing, ref varMissing);

            varDoc.Activate();
            varDoc.PrintOut(PrintZoomColumn: 2, PrintZoomRow: 2);

           
        catch (Exception varE)
         
            MessageBox.Show("Error:\n" + varE.Message, "Error message");
        
    

很简单。我需要做的是在 PrintOut 方法上添加 PrintZoomColumn、PrintZoomRow 选项。但是,根据 MSDN,PowerPoint 缺少这样的选项。 PrintZoomColunm 和 PrintZoomRow 甚至都不存在。但是,我在Presentation类下找到了一个叫做PrintOptions的方法,但是这并没有显示任何效果。

这是我打印 PPT 文件的代码。

public void test6()
    
        try
        
            // Declaring the object variables we will need later
            object varFileName = filePath;
            object varFalseValue = false;
            object varTrueValue = true;
            object varMissing = Type.Missing;

            Microsoft.Office.Interop.PowerPoint.Application varPPT = new Microsoft.Office.Interop.PowerPoint.Application();
            Microsoft.Office.Interop.PowerPoint.Presentation varPre = varPPT.Presentations.Open(filePath, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoFalse);
            varPre.PrintOptions.HandoutOrder =Microsoft.Office.Interop.PowerPoint.PpPrintHandoutOrder.ppPrintHandoutHorizontalFirst;
            varPre.PrintOut();
        
        catch (Exception varE)
        
            MessageBox.Show("Error:\n" + varE.Message, "Error message");
        
     

在上面的代码中,改变 printoptions 的 handoutorder 的值没有任何效果。在一页上打印多张幻灯片需要什么?

【问题讨论】:

【参考方案1】:

我认为您还需要设置 OutputType 属性。 HandoutOrder 只是告诉 powerpoint 如何在页面上布置幻灯片如果一页中有多个幻灯片

presentation.PrintOptions.OutputType = Microsoft.Office.Interop.PowerPoint.PpPrintOutputType.ppPrintOutputFourSlideHandouts;

每页应该给你 4 张幻灯片

【讨论】:

以上是关于.Net 使用 Office 互操作打印 PowerPoint 文档的主要内容,如果未能解决你的问题,请参考以下文章

在 VB.NET 中使用 Word 和 Outlook 2007 的 Office 互操作

在 ASP.net MVC6 网站上使用 Office 互操作

Excel 互操作在装有 Office 2007 的机器上工作,但在装有 Office 2010 的机器上失败

Office 互操作程序集 Windows 10

使用 Office 互操作通过虚拟目录运行时出错

Java 存储过程作为 Java / .Net 互操作