1

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

背景:我正在编辑一个表单引擎项目,该项目根据每个请求的 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 不会呈现。为什么?

谢谢,

4

1 回答 1

2

RenderControl 将把子控件 HTML 渲染到 sb stringwriter 中。

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

To add the sub-controls of a control, you will need to recursively call/generate each sub-control. So you will need to restructure your code above.

于 2013-02-22T17:31:07.247 回答