【问题标题】:add page number to pdf document (itextsharp)将页码添加到 pdf 文档 (itextsharp)
【发布时间】:2012-05-07 16:33:57
【问题描述】:

我想在 itextsharp pdf 文件的页脚添加页码。我从 html(asp.net 转发器)生成 pdf。我使用 XMLWorkerHelper 来解析 html 内容。我搜索了很多,但找不到任何有用的东西做到这一点。

【问题讨论】:

  • 嗯,奇怪。你到底是怎么搜索的?因为当我访问following link 时,我得到了相当数量的有趣指针。
  • 如果您即时创建文档,有添加页码的示例。但是我从页面中的 html 创建 pdf 文档。我什么都不做,我只是得到 html 输出通过这个repeater.RenderControl 属性进行转发并用xhtmlworkerhelp 类解析它。简短地说,pdf 文档是由xhtmlworkerhelp 创建的,我不涉及文档的细节。我希望我能告诉我我在做什么。

标签: c# asp.net itextsharp


【解决方案1】:

您必须使用iTextSharp 打开 PDF 并自己添加页码。不久前我做了类似的事情,这是我的功能,可能会给你一个开始。 该函数将当前页面添加到左下角,因此您可能需要将其放置在适合您需要的其他位置。

public static byte[] AddPageNumbers(byte[] pdf)
{
MemoryStream ms = new MemoryStream();
// we create a reader for a certain document
PdfReader reader = new PdfReader(pdf);
// we retrieve the total number of pages
int n = reader.NumberOfPages;
// we retrieve the size of the first page
Rectangle psize = reader.GetPageSize(1);

// step 1: creation of a document-object
Document document = new Document(psize, 50, 50, 50, 50);
// step 2: we create a writer that listens to the document
PdfWriter writer = PdfWriter.GetInstance(document, ms);
// step 3: we open the document

document.Open();
// step 4: we add content
PdfContentByte cb = writer.DirectContent;

int p = 0;
Console.WriteLine("There are " + n + " pages in the document.");
for (int page = 1; page <= reader.NumberOfPages; page++)
{
    document.NewPage();
    p++;

    PdfImportedPage importedPage = writer.GetImportedPage(reader, page);
    cb.AddTemplate(importedPage, 0, 0);

    BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
    cb.BeginText();
    cb.SetFontAndSize(bf, 10);
    cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, +p + "/" + n, 7, 44, 0);
    cb.EndText();
}
// step 5: we close the document
document.Close();
return ms.ToArray();
}

【讨论】:

  • 很好的答案!但是 ms.Write(pdf, 0, pdf.Length) 不是必需的,并且在我的情况下已导致文件损坏。
【解决方案2】:

这样的事情应该可以工作:

var sourceFileList = new List<string>();

//add files to merge

int sourceIndex = 0;
PdfReader reader = new PdfReader(sourceFileList[sourceIndex]);
int sourceFilePageCount = reader.NumberOfPages;

Document doc = new Document(reader.GetPageSizeWithRotation(1));
PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(destinationFileName, FileMode.Create));
doc.Open();

PdfImportedPage page;
PdfContentByte contentByte = writer.DirectContent;                

int rotation;
while (sourceIndex < sourceFileList.Count)
{
    int pageIndex = 0;
    while (pageIndex < sourceFilePageCount)
    {
        pageIndex++;

        doc.SetPageSize(reader.GetPageSizeWithRotation(pageIndex));
        doc.NewPage();

        page = writer.GetImportedPage(reader, pageIndex);
        rotation = reader.GetPageRotation(pageIndex);

        if (rotation.Equals(90 | 270))
            contentByte.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(pageIndex).Height);
        else
            contentByte.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
    }

    sourceIndex++;
    if (sourceIndex < sourceFileList.Count)
    {
        reader = new PdfReader(sourceFileList[sourceIndex]);
        sourceFilePageCount = reader.NumberOfPages;
    }
}

doc.Close();

【讨论】:

    猜你喜欢
    • 2011-05-06
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 2015-05-14
    相关资源
    最近更新 更多