В итоге мы использовали метод XmlFormHostItem.NotifyHost
для отправки HTML-кода в пользовательскую веб-часть в событии, нажатом на кнопку, который преобразовал HTML в PDF с помощью Winnovative HTML в PDF Converter.
Генерация HTML из InfoPathcode-behind:
var formData = new XmlDocument();
var xslt = new XslCompiledTransform(true);
// Load the form data
formData.LoadXml(MainDataSource.CreateNavigator().InnerXml);
// Extract the stylesheet from the package
xslt.Load(ExtractFromPackage("Print.xsl")); // (uses Template.OpenFileFromPackage(string fileName) to get xsl)
// Perform XSL-transformation
// [...]
// Send HTML to web part
this.NotifyHost(formData.InnerXml);
Один недостаток этого метода заключается в том, что событие NotifyHost запускается только один раз для каждой формы, поэтому, если пользователь нажимает «Сохранить как PDF», а затем отменяет, он должен перезагрузить форму, чтобычтобы можно было сохранить как PDF.