PdfDocument.GetPageSize() 未设置为 object iText7 的实例
PdfDocument.GetPageSize() not set to an instance of object iText7
我正在尝试按照一些 iText7 文档将 header 插入到我的 pdf 文档中,但是 GetPageSize() returns 'Object reference not set to an instance of an object.'.
我试过通过 PdfDocument object 和文档 object 添加页面并设置页面大小。我可以在循环中看到 4 个页面,但是我所做的任何更改都不会给我一个页面大小。
public static void createPdf(string dest)
{
MemoryStream stream = new MemoryStream();
PdfWriter writer = new PdfWriter(stream);
PdfDocument pdfDoc = new PdfDocument(writer);
pdfDoc.AddNewPage(PageSize.A4);
pdfDoc.AddNewPage(PageSize.A4);
pdfDoc.AddNewPage(PageSize.A4);
pdfDoc.AddNewPage(PageSize.A4);
var doc = new Document(pdfDoc);
doc.Add(new Paragraph("This is page 1."));
doc.Add(new AreaBreak(AreaBreakType.NEXT_PAGE));
doc.Add(new Paragraph("This is page 2."));
doc.Add(new AreaBreak(AreaBreakType.NEXT_PAGE));
doc.Add(new Paragraph("This is page 3."));
doc.Add(new AreaBreak(AreaBreakType.NEXT_PAGE));
doc.Add(new Paragraph("This is page 4."));
Paragraph header = (new Paragraph("Copy").SetFont(PdfFontFactory.CreateFont(StandardFonts.HELVETICA)).SetFontSize(14));
for (int i = 1; (i <= pdfDoc.GetNumberOfPages()); i++)
{
PdfPage page = pdfDoc.GetPage(i);
Rectangle pageSize = page.GetPageSize();
float x = (pdfDoc.GetPage(i).GetPageSize().GetWidth() / 2);
float y = (pdfDoc.GetPage(i).GetPageSize().GetTop() - 20);
doc.ShowTextAligned(header, x, y, i, TextAlignment.CENTER, VerticalAlignment.BOTTOM, 0);
}
doc.Close();
}
错误信息System.NullReferenceException:'Object reference not set to an instance of an object.'出现在Rectangle pageSize = page.GetPageSize();
行
一旦你使用Document
实例,它会默认刷新写入PDF的内容,因此你添加了4页内容,当你执行你的时候,第一页已经刷新了循环获取矩形大小。
要解决此问题,您可以通过将 false
传递给构造函数 (immediateFlush
) 中的第三个参数来告诉 Document
默认不刷新其内容:
var doc = new Document(pdfDoc, PageSize.Default, false);
我正在尝试按照一些 iText7 文档将 header 插入到我的 pdf 文档中,但是 GetPageSize() returns 'Object reference not set to an instance of an object.'.
我试过通过 PdfDocument object 和文档 object 添加页面并设置页面大小。我可以在循环中看到 4 个页面,但是我所做的任何更改都不会给我一个页面大小。
public static void createPdf(string dest)
{
MemoryStream stream = new MemoryStream();
PdfWriter writer = new PdfWriter(stream);
PdfDocument pdfDoc = new PdfDocument(writer);
pdfDoc.AddNewPage(PageSize.A4);
pdfDoc.AddNewPage(PageSize.A4);
pdfDoc.AddNewPage(PageSize.A4);
pdfDoc.AddNewPage(PageSize.A4);
var doc = new Document(pdfDoc);
doc.Add(new Paragraph("This is page 1."));
doc.Add(new AreaBreak(AreaBreakType.NEXT_PAGE));
doc.Add(new Paragraph("This is page 2."));
doc.Add(new AreaBreak(AreaBreakType.NEXT_PAGE));
doc.Add(new Paragraph("This is page 3."));
doc.Add(new AreaBreak(AreaBreakType.NEXT_PAGE));
doc.Add(new Paragraph("This is page 4."));
Paragraph header = (new Paragraph("Copy").SetFont(PdfFontFactory.CreateFont(StandardFonts.HELVETICA)).SetFontSize(14));
for (int i = 1; (i <= pdfDoc.GetNumberOfPages()); i++)
{
PdfPage page = pdfDoc.GetPage(i);
Rectangle pageSize = page.GetPageSize();
float x = (pdfDoc.GetPage(i).GetPageSize().GetWidth() / 2);
float y = (pdfDoc.GetPage(i).GetPageSize().GetTop() - 20);
doc.ShowTextAligned(header, x, y, i, TextAlignment.CENTER, VerticalAlignment.BOTTOM, 0);
}
doc.Close();
}
错误信息System.NullReferenceException:'Object reference not set to an instance of an object.'出现在Rectangle pageSize = page.GetPageSize();
行一旦你使用Document
实例,它会默认刷新写入PDF的内容,因此你添加了4页内容,当你执行你的时候,第一页已经刷新了循环获取矩形大小。
要解决此问题,您可以通过将 false
传递给构造函数 (immediateFlush
) 中的第三个参数来告诉 Document
默认不刷新其内容:
var doc = new Document(pdfDoc, PageSize.Default, false);