簡體   English   中英

在PDF的頁腳中添加表格

[英]Adding a Table into the Footer of a PDF

從HTML創建PDF之后,我需要向每個頁面添加頁腳。 頁腳將是一個單行,三列的表,左邊的單元格是一個外部參考ID,中間的是“ Y的X頁”,右邊的是日期戳。 我沒有使用iTextSharp的經驗,但是在閱讀了各種文章之后,我創建了以下PageEventHandler

更新的代碼

public class FooterEvent : PdfPageEventHelper
{
    PdfContentByte cb;

    #region Properties
    private string _FooterLeft;
    public string FooterLeft
    {
        get { return _FooterLeft; }
        set { _FooterLeft = value; }
    }

    private string _FooterCenter;
    public string FooterCenter
    {
        get { return _FooterCenter; }
        set { _FooterCenter = value; }
    }

    private string _FooterRight;
    public string FooterRight
    {
        get { return _FooterRight; }
        set { _FooterRight = value; }
    }

    private Font _FooterFont;
    public Font FooterFont
    {
        get { return _FooterFont; }
        set { _FooterFont = value; }
    }
    #endregion

    public override void OnEndPage(PdfWriter writer, Document document)
    {
        base.OnEndPage(writer, document);

        Font font = new Font(Font.FontFamily.HELVETICA, 12, Font.NORMAL, BaseColor.BLACK);

        PdfPTable FooterTable = new PdfPTable(3);
        FooterTable.TotalWidth = document.PageSize.Width - document.LeftMargin - document.RightMargin;

        PdfPCell FooterLeftCell = new PdfPCell(new Phrase(2, FooterLeft, FooterFont));
        FooterLeftCell.HorizontalAlignment = Element.ALIGN_LEFT;
        FooterLeftCell.VerticalAlignment = Element.ALIGN_CENTER;
        FooterLeftCell.Border = 0;
        FooterTable.AddCell(FooterLeftCell);

        PdfPCell FooterCenterCell = new PdfPCell(new Phrase(2, FooterCenter, FooterFont));
        FooterCenterCell.HorizontalAlignment = Element.ALIGN_CENTER;
        FooterCenterCell.VerticalAlignment = Element.ALIGN_CENTER;
        FooterCenterCell.Border = 0;
        FooterTable.AddCell(FooterCenterCell);

        PdfPCell FooterRightCell = new PdfPCell(new Phrase(2, FooterRight, FooterFont));
        FooterRightCell.HorizontalAlignment = Element.ALIGN_RIGHT;
        FooterRightCell.VerticalAlignment = Element.ALIGN_CENTER;
        FooterRightCell.Border = 0;
        FooterTable.AddCell(FooterRightCell);

        FooterTable.WriteSelectedRows(0, -1, document.LeftMargin, document.BottomMargin, cb);
    }
}

新增回應

編輯我的PageEvent之后,我仍然遇到問題。 我想到我可能在調用PageEvent並將其添加到PDF時遇到問題(沒有使用iTextSharp的經驗)。 下面是我嘗試將頁腳添加到已作為byte []傳遞的現有PDF中。

byte[] output = null;
string identifier = id;
string time = DateTime.Now.ToString();
string page = null;

PdfReader reader = new PdfReader(original);
int n = reader.NumberOfPages;

try
{
   using (MemoryStream ms = new MemoryStream())
   {
      using (Document doc = new Document(PageSize.LETTER, 100, 100, 100, 100))
      {
         using (PdfWriter writer = PdfWriter.GetInstance(doc, ms))
         {
            FooterEvent footer = new FooterEvent();

            writer.PageEvent = footer;

            footer.FooterFont = FontFactory.GetFont(BaseFont.HELVETICA, 12, BaseColor.BLACK);

            doc.Open();

            for (int i = 1; i < n + 1; ++i)
            {
               doc.NewPage();
               page = "Page " + i + " of " + n;
               footer.FooterLeft = identifier;
               footer.FooterCenter = page;
               footer.FooterRight = time;

               doc.Add(new Paragraph(reader.GetPageContent(i).ToString()));
               //Probably wrong. Trying to add contents from each page in original PDF
            }

            doc.Close();

         }
      }
      output = ms.ToArray();
   }
}

catch (Exception ex)
{
   //Some Message added later
}

return output;

任何幫助表示贊賞。 提前致謝。

試試這個,對我有用:

FooterTable.WriteSelectedRows(0, -1, document.LeftMargin, FooterTable.TotalHeight, cb);

檢查這篇文章

使用iTextSharp的頁眉,頁腳和大表

你寫了:

FooterTable.WriteSelectedRows(0, 0, document.LeftMargin, document.RightMargin, cb);

但是,方法是:

FooterTable.WriteSelectedRows(rowStart, rowEnd, x, y, cb);

這意味着您要寫一些從行0開始到行0結束的行,或者:您要寫的不是一行。

此外,您提供x值而不是y值。 將該行更改為:

FooterTable.WriteSelectedRows(0, -1, document.LeftMargin, document.BottomMargin, cb);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM