我只拿到前两页。我在第三页中有一个生成的元素列表。当我的集合中有太多的元素时,我的pdf输出中的所有页面都变成空白。
using (FileStream fs = new FileStream(filePath, FileMode.Create))
{
Document document = new Document(PageSize.A4, 25, 25, 30, 30);
WebClient wc = new WebClient();
string htmlText = wc.DownloadString(textUrl);
PdfWriter pdfWriter = PdfWriter.GetInstance(document, fs);
document.Open();
// register all fonts in current computer
FontFactory.RegisterDirectories();
XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider();
using (var msHtml = new MemoryStream(System.Text.Encoding.Default.GetBytes(htmlText)))
{
//Set factories
var cssAppliers = new CssAppliersImpl(fontProvider);
var htmlContext = new HtmlPipelineContext(cssAppliers);
//HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);
htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());
//FontFactory.Register(arialuniTff);
string gishaTff = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "GISHA.TTF");
FontFactory.Register(gishaTff);
var worker = XMLWorkerHelper.GetInstance();
var cssStream = new FileStream(FolderMapPath("/css/style.css"), FileMode.Open);
worker.ParseXHtml(pdfWriter, document, msHtml, cssStream, new UnicodeFontFactory());
}
// Close the document
document.Close();
// Close the writer instance
pdfWriter.Close();
} 这是我的cshtml代码
发布于 2016-10-05 07:04:55
我就是这样解决问题的。问题不在于C#后端代码。现在看来,XMLWorkerHelper并不能很好地处理循环问题。我必须在PDF文件中显示项目列表。如果集合包含的项不多,则结果很好,但是当集合包含50多个项时,页面会中断,因为这不能在单个页面中显示。我所做的是,我开始计数项目的数量,在一些数字,如40,我只是包括一个中断元素<li style="list-style:none; list-style-type:none; page-break-before:always">@item</li>。并重置计数器并继续显示我的项目。这是伟大的,我的问题解决了。也许这对某人有帮助。
发布于 2016-10-03 20:57:34
我只有在Java中使用iText的经验,但是您使用的MemoryStream对象是否有一个字节限制,当第3页上的表有太多的元素要存储时,这个字节限制就会被填满吗?如果是这样的话,那么该长表上的结束标记可能不会写入MemoryStream,因此该表和之后的所有内容都不会被呈现;即get的截短由PDF转换器引擎完成。
您能尝试使用不同的Stream对象吗?
https://stackoverflow.com/questions/37941205
复制相似问题