我这里有一个复杂的问题。
上下文:我正在编辑一个表单引擎项目,它根据每个请求的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成功地检索到了我的控件的超文本标记语言,但是如果一个控件作为它们内部的标准ASP.NET控件,那么子控件的超文本标记语言就不会被呈现。为什么?
谢谢,
发布于 2013-02-23 01:31:07
RenderControl会将子控件HTML化到sb字符串编写器中。
但是,http://www.aspose.com/docs/display/pdfnet/Text+Constructor+Overload_3 Aspose Text不会自动为每个子控件创建段。它期望您传递给它的字符串是针对单个(和当前)段的。
要添加控件的子控件,您需要递归地调用/生成每个子控件。因此,您需要重新构造上面的代码。
https://stackoverflow.com/questions/15029447
复制相似问题