C# pdf压模,尝试使用itext在pdf文档上添加页码时pdfEventHandler不工作
我正在使用itext生成pdf文档,但我正在尝试使用现有的解决方案将页码添加到正在生成的pdf文档中,但它们似乎都不适合我 我试过用类似的东西C# pdf压模,尝试使用itext在pdf文档上添加页码时pdfEventHandler不工作,c#,asp.net-mvc-5,itext,C#,Asp.net Mvc 5,Itext,我正在使用itext生成pdf文档,但我正在尝试使用现有的解决方案将页码添加到正在生成的pdf文档中,但它们似乎都不适合我 我试过用类似的东西 using (MemoryStream stream = new MemoryStream()) { PdfReader reader = new PdfReader(bytes); using (PdfStamper stamper = new PdfStamper(reader, stream)) { in
using (MemoryStream stream = new MemoryStream())
{
PdfReader reader = new PdfReader(bytes);
using (PdfStamper stamper = new PdfStamper(reader, stream))
{
int pages = reader.NumberOfPages;
for (int i = 1; i <= pages; i++)
.NumberOfPages和.GetPageSize上有错误
我还尝试创建一个单独的PageEventHandler类,但问题仍然存在
现在,我可以生成pdf,但我想添加页码,我有一个类似
private MemoryStream MakeDocument(Application application)
{
MemoryStream ms = new MemoryStream();
PdfWriter writer = new PdfWriter(ms);
PdfDocument pdfDocument = new PdfDocument(writer);
using (var document = new Document(pdfDocument))
{
var sections = new List<IDocumentSection>
{
new Header(),
new Projects(application.Projects),
//Footer
};
foreach (var section in sections)
section.AddTo(document);
Rectangle pageSize;
PdfCanvas canvas;
int n = pdfDocument.GetNumberOfPages();
for (int i = 1; i <= n; i++)
{
PdfPage page = pdfDocument.GetPage(i);
pageSize = page.GetPageSize();
canvas = new PdfCanvas(page);
canvas.BeginText()
.SetFontAndSize(PdfFontFactory.CreateFont(FontConstants.HELVETICA), 7)
.MoveText(pageSize.GetWidth() / 2 - 7, 10)
.ShowText(i.ToString())
.ShowText(" of ")
.ShowText(n.ToString())
.EndText();
}
}
return ms;
但它在抱怨GetPageSize
对象引用未设置为对象的实例。即使我将页面大小设置为A4,它也会在canvas=new PdfCanvas(page)时开始抱怨 您似乎正在使用iText 7。或者更确切地说,当我看到:
PdfWriter writer = new PdfWriter(ms);
PdfDocument pdfDocument = new PdfDocument(writer);
Document document = new Document(pdfDocument);
PdfStamper
类是一个iText 5类。它不存在于iText 7中。请参阅。你可能想要这样的东西:
MemoryStream stream = new MemoryStream();
PdfWriter writer = new PdfWriter(stream);
PdfReader reader = new PdfReader(bytes);
PdfDocument pdfDoc = new PdfDocument(reader, writer);
Document document = new Document(pdfDoc);
Rectangle pageSize;
PdfCanvas canvas;
int n = pdfDoc.GetNumberOfPages();
for (int i = 1; i <= n; i++) {
PdfPage page = pdfDoc.GetPage(i);
pageSize = page.GetPageSize();
canvas = new PdfCanvas(page);
// draw page numbers on the canvas
}
pdfDoc.close();
MemoryStream stream=newmemoryStream();
PdfWriter writer=新的PdfWriter(流);
PdfReader reader=新PdfReader(字节);
PdfDocument pdfDoc=新PdfDocument(读写器);
文件=新文件(pdfDoc);
矩形页面大小;
PdfCanvas帆布;
int n=pdfDoc.GetNumberOfPages();
对于(int i=1;我是的,你是对的,我正在使用itext7。我在添加页码方面仍然有一些困难。你读过跳转开始教程吗?添加页眉、添加页脚、添加水印……这些都在教程中解释。你能详细说明你不明白的地方吗?我已经修改了我的问题,如果你能提出更多建议的话。是的,我确实读过,但问题是他们使用了两个单独的文件。这不是问题。但我想在文档中添加更多的节。因此我无法使用固定文档,它基本上是在pageSize=page.GetPageSize();当它抱怨时会发出什么声音?我不知道你是否意识到这一点,但你不是很有帮助。这就好像你不想得到帮助一样。检查。那里有一个方法GetPageSize()
,那么你抱怨什么呢?你确定你使用的是正确的矩形类吗?
PdfWriter writer = new PdfWriter(ms);
PdfDocument pdfDocument = new PdfDocument(writer);
Document document = new Document(pdfDocument);
MemoryStream stream = new MemoryStream();
PdfWriter writer = new PdfWriter(stream);
PdfReader reader = new PdfReader(bytes);
PdfDocument pdfDoc = new PdfDocument(reader, writer);
Document document = new Document(pdfDoc);
Rectangle pageSize;
PdfCanvas canvas;
int n = pdfDoc.GetNumberOfPages();
for (int i = 1; i <= n; i++) {
PdfPage page = pdfDoc.GetPage(i);
pageSize = page.GetPageSize();
canvas = new PdfCanvas(page);
// draw page numbers on the canvas
}
pdfDoc.close();