Кнопка InfoPath C#: переключить вид, а затем экспортировать в PDF

Я видел некоторые вопросы, которые могут быть связаны, но на самом деле не отвечают на вопрос. У меня есть форма InfoPath 2013, которая размещается через SharePoint 2013 InfoPath Forms Services. Форма имеет код программной части, и я пытаюсь закодировать кнопку, чтобы она выполняла следующие шаги:

  1. Переключитесь на предварительно отформатированное представление печати только для чтения (НЕ по умолчанию, которое является вводом данных)
  2. Экспорт этого вида формы в PDF
  3. Сохранить форму
  4. Закрыть форму

Погуглив, я нашел некоторые решения, которые приближают меня, но я продолжаю сталкиваться с такими проблемами, как thisXDocument, не распознаваемый в контексте, или недопустимый метод экспорта. В настоящее время я использую как «Microsoft.Office.Interop.InfoPath», так и «Microsoft.Office.Interop.InfoPath.SemiTrust» в качестве ссылок. Я работаю в Visual Studio 2012.

Учитывая приведенные выше требования, можно ли это сделать с помощью кода C# и (если да), какие пространства имен необходимы?


person Omegacron    schedule 11.11.2014    source источник
comment
У меня нет большого опыта работы с формами браузера, но у меня его не было бы, хотя вам нужно использовать взаимодействие, если форма имеет код позади. Разве вы не можете просто использовать метод Export(string, ExportFormat)? Также вы можете создать представление для печати и использовать конструктор, чтобы установить представление для печати для представления ввода данных. В этом случае вам не нужно переключать представления.   -  person Dave Williams    schedule 10.12.2014
comment
@DaveWilliams - да, это в основном мой путь. Я настроил свое представление PDF как представление для печати, а затем использовал метод экспорта. Он автоматически переключается в режим печати и выталкивает его в PDF. Я опубликую код, который я использовал, если он кому-то еще понадобится.   -  person Omegacron    schedule 10.12.2014


Ответы (1)


В конечном итоге я получил две кнопки внизу формы: одну для «Сохранить и закрыть» и одну для «Экспорт в PDF». Если кому-то это поможет, вот код моей кнопки «Экспорт в PDF». Расположение папки и PDFName определяются в форме (расположение папки захватывается динамически в зависимости от того, откуда была запущена форма, в то время как PDFName является объединением других значений в форме).

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

Мне пришлось переключаться между представлениями, определив мое форматированное представление PDF в качестве представления для печати по умолчанию. Функция «Экспорт», по-видимому, работает как печать, поэтому она автоматически переключается в режим печати перед экспортом.

person Omegacron    schedule 10.12.2014
comment
Да, это то, что я имел в виду, рад, что вы разобрались. - person Dave Williams; 11.12.2014
comment
Я не вижу параметр .Export в коде программной части. Какую ссылку вы использовали? Спасибо. - person Si8; 09.12.2015
comment
@SiKni8 - вызов экспорта исходит из Microsoft.Office.InfoPath - person Omegacron; 11.12.2015
comment
Спасибо. К сожалению, он работает только с заполнителем InfoPath, а не с формами на основе браузера. - person Si8; 11.12.2015