我正在使用itext生成pdf文档,但我正在尝试使用现有的解决方案将页码添加到正在生成的pdf文档中,但它们似乎都不适用于我。
我尝试使用像
这样的东西 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++)
但我的代码不识别PdfStamper并要求我创建一个类。 同样,我尝试使用
MemoryStream ms = new MemoryStream();
PdfReader reader = new PdfReader(pdf);
int n = reader.NumberOfPages;
Rectangle psize = reader.GetPageSize(1);
.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;
var outputStream = MakeDocument(application);
var response = new HttpResponseMessage
{
StatusCode = HttpStatusCode.OK,
Content = new ByteArrayContent(outputStream.ToArray())
};
response.Content.Headers.Add("Content-Type", "application/pdf");
return response;
但它在GetPageSize抱怨 你调用的对象是空的。即使我将页面大小设置为A4,它也会在canvas = new PdfCanvas(页面)上开始抱怨;
答案 0 :(得分:1)
您似乎正在使用iText 7.或者更确切地说,当我看到时,这就是我的假设:
PdfStamper
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();
类是iText 5类。它在iText 7中不存在。请参阅Chapter 5的jump-start tutorial。你可能想要这样的东西:
PdfStamper
如果您没有使用iText 7,那么您的问题就出现了问题。在这种情况下,您应该澄清在同一个句子中使用概念PdfEventHandler
和{{1}}时的含义,因为这没有任何意义。