2013-02-22 9 views
1

У меня здесь сложная проблема.RenderControl не выводит дочерние элементы управления HTML

Контекст: Я редактирую проект формы, который динамически создает его на основе определения XML для каждого запроса, чтобы добавить функцию генерации PDF с использованием Aspose.PDF. Короче говоря, механизм форм как набор элементов управления, которые действуют как базовые функции для заполнения формы (текстовое поле, номер телефона, контроль даты и т. Д.), Каждый элемент управления и его свойства определяются в файлах xml и соответствуют xml схемы. Теперь, когда форма завершена, существует элемент управления formRepeater, который извлекает ранее заполненную страницу и форматирует данные для печати в веб-браузере. Я должен заменить это, чтобы вместо этого создать pdf-файл.

Что я сделал: Я добавил новый абстрактный метод GeneratePdf, который должен реализовать весь FormControls, и я вызываю этот метод для каждого элемента управления и субконтроля в моем контейнере PreRender контейнера управления. Метод будет отличаться в зависимости от каждого элемента управления, но вот основной один сейчас

public override void GeneratePdf(Aspose.Pdf.Generator.Pdf file) 
    { 

     //Add the control HTML in a new section of the PDF File 
     var section = file.Sections.Add(); 
     var sb = new StringBuilder(); 
     var writer = new HtmlTextWriter(new StringWriter(sb)); 
     this.RenderControl(writer); 
     var html = new Aspose.Pdf.Generator.Text(section, sb.ToString()); 
     html.IsHtmlTagSupported = true; 
     section.Paragraphs.Add(html); 
    } 

Моей проблема: Я успешно извлекая HTML моих элементов управления с помощью StringBuilder, но если элемент управления в качестве стандартного ASP.NET элементы управления внутри них, HTML дочерних элементов управления не отображается. Зачем?

Спасибо,

ответ

2

RenderControl будет оказывать ребенку-контроль HTML в сб StringWriter.

Однако, http://www.aspose.com/docs/display/pdfnet/Text+Constructor+Overload_3 Текст в виде текста не создает автоматически сегменты для каждого вспомогательного элемента управления. Он ожидает, что строка, которую вы передали ей, будет для одиночного (и текущего) сегмента.

Чтобы добавить субконтроллеры элемента управления, вам потребуется рекурсивно вызывать/генерировать каждый дополнительный элемент управления. Поэтому вам нужно будет перестроить свой код выше.

Смежные вопросы