InfoPath C#按钮:切换视图,然后导出为PDF

InfoPath C#按钮:切换视图,然后导出为PDF,c#,pdf,pdf-generation,infopath,infopath-forms-services,C#,Pdf,Pdf Generation,Infopath,Infopath Forms Services,我看到了一些可能相关的问题,但没有真正回答这个问题。我有一个通过SharePoint 2013 InfoPath Forms Services托管的InfoPath 2013表单。表单有代码隐藏,我正在尝试对一个按钮进行编码,以便它执行以下步骤: 切换到只读、预格式化的打印视图(不是默认值,即数据输入) 将该表单视图导出为PDF格式 保存表单 关闭窗体 通过谷歌搜索,我找到了一些解决方案,但我一直遇到这样的问题:上下文中无法识别此xdocument,或者导出方法无效。我目前正在使用“Micros

我看到了一些可能相关的问题,但没有真正回答这个问题。我有一个通过SharePoint 2013 InfoPath Forms Services托管的InfoPath 2013表单。表单有代码隐藏,我正在尝试对一个按钮进行编码,以便它执行以下步骤:

  • 切换到只读、预格式化的打印视图(不是默认值,即数据输入)
  • 将该表单视图导出为PDF格式
  • 保存表单
  • 关闭窗体
  • 通过谷歌搜索,我找到了一些解决方案,但我一直遇到这样的问题:上下文中无法识别此xdocument,或者导出方法无效。我目前正在使用“Microsoft.Office.Interop.InfoPath”和“Microsoft.Office.Interop.InfoPath.SemiTrust”作为参考。我在VisualStudio2012工作


    鉴于上述要求,这可以通过C代码实现吗?如果可以的话,需要什么名称空间?

    我最终在表单底部有两个按钮,一个用于“保存并关闭”,另一个用于“导出到PDF”。为了帮助其他人,这里是我的“导出到PDF”按钮的代码。文件夹位置和PDFName在表单中定义(文件夹位置根据它们启动表单的位置动态抓取,而PDFName是表单中其他值的集合)


    我把格式化的PDF视图定义为默认的打印视图,从而避免了切换视图的麻烦。导出功能显然与打印类似,因此在导出之前它会自动切换到“打印”视图。

    我对浏览器表单没有太多经验,但如果表单后面有代码,我不认为您需要使用互操作。您不能只使用导出(string,ExportFormat)方法吗?您还可以创建“打印视图”,并使用设计器为数据输入视图设置“打印视图”。在这种情况下,您不必切换视图。@DaveWilliams-是的,这基本上就是我所走的路线。我将PDF视图设置为打印视图,然后使用导出方法。它会自动切换到打印视图,并将其弹出为PDF格式。我将发布我使用的代码,以防其他人需要。是的,这就是我的意思,很高兴你对它进行了排序。我在代码后面没有看到
    .Export
    选项。你使用了什么参考资料?谢谢。@SiKni8-导出电话来自Microsoft.Office.InfoPath谢谢。不幸的是,它只适用于InfoPath filler,而不适用于基于浏览器的表单。
    public void CTRL_PDF_Clicked(object sender, ClickedEventArgs e)
        {
            // Write your code here.
    
            //Declare variables
            string fileName;
            string fileLocation;
            XPathNavigator nameNode;
            XPathNavigator folderNode;
            XPathNavigator timeNode;
    
            //Get the values for each variable from fields in the form
            nameNode = MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:PDFName", NamespaceManager);
            folderNode = MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:FolderLocation", NamespaceManager);
            fileName = nameNode.Value;
            fileLocation = folderNode.Value;
    
            //Export the view as a PDF file.
            Microsoft.Office.InfoPath.View currentView = this.CurrentView;
            this.CurrentView.Export(@fileLocation + fileName + ".pdf", ExportFormat.Pdf);
    
            // End your code here.
        }