出于某种原因,当我尝试创建一个包含多个页面的文档时,第一页是可以的,但所有其他页面都是空的。
public PdfDocument toPdf()
{
// Create new PDF document
PdfDocument document = new PdfDocument();
XGraphics gfx;
PdfPage page;
foreach (var p in pages)
{
// Create new page
page = document.AddPage();
page.Width = XUnit.FromMillimeter(width);
page.Height = XUnit.FromMillimeter(height);
gfx = XGraphics.FromPdfPage(page, XGraphicsUnit.Millimeter);
p.drawItems(gfx);
}
return document;
}
任何线索?
答案 0 :(得分:2)
当您设置非默认单位时,AFAIK XGraphics
出现问题(在您的情况下为毫米)。
也许第二页不是空的,但内容在" viewport"之外。
如果我的猜测是正确的,那么第一页也不正确。
在PDFsharp论坛上查看此案例:
http://forum.pdfsharp.net/viewtopic.php?p=9642#p9642
答案 1 :(得分:1)
尝试正确处理图形对象,如下所示:
public PdfDocument toPdf()
{
// Create new PDF document
PdfDocument document = new PdfDocument();
PdfPage page;
foreach (var p in pages)
{
// Create new page
page = document.AddPage();
page.Width = XUnit.FromMillimeter(width);
page.Height = XUnit.FromMillimeter(height);
using (var gfx = XGraphics.FromPdfPage(page, XGraphicsUnit.Millimeter))
{
p.drawItems(gfx);
}
}
return document;
}
作为一般规则:必须通过调用IDisposable
来处理实现Dispose
的所有对象。 using
语句隐含了这一点。
由于您要退回文件,因此调用者有责任处理该文件。
作为旁注:有些人会告诉您Dispose
将会调用Finalizer
,因此您无需调用它。此参数无效,因为:
a)并非所有人都能正确实施IDisposable
,并且
如果这没有帮助,请确保您没有空白页: - )