RenderControl不输出子控件HTML

本文关键字:控件 HTML 输出 RenderControl | 更新日期: 2023-09-27 18:00:51

我遇到了一个复杂的问题。

上下文:我正在编辑一个表单引擎项目,该项目根据每个请求的XML定义动态创建控件,以使用Aspose.PDF添加PDF生成功能。简而言之,表单引擎是一组控件,作为填写表单的基本功能(文本框、电话号码、日期控件等(。每个控件及其属性都在xml文件中定义,并对应于xml模式。现在,当表单完成时,有一个formRepeater控件可以检索以前填写的页面并格式化数据以在web浏览器中打印。我必须替换它来生成一个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);
    }

我的问题:我使用Stringbuilder成功地检索了控件的HTML,但如果控件中的控件是标准ASP.NET控件,则不会呈现子控件的HTML。为什么?

谢谢,

RenderControl不输出子控件HTML

RenderControl将把子控件HTML呈现到sb字符串编写器中。

然而,http://www.aspose.com/docs/display/pdfnet/Text+Constructor+Overload_3AsposeText不会自动为每个子控件创建段。它期望您传递给它的字符串用于单个(和当前(段。

要添加控件的子控件,您需要递归地调用/生成每个子控件。因此,您需要在上面重构您的代码。