如何使用 iText 7 将页眉和页脚添加到 PDF
How to add Header and Footer to a PDF with iText 7
使用 iTextSharp,您可以通过将事件附加到 PDF 来将 header/footer 添加到 PDF,就像在这个 SO 答案中解释的那样:
如何使用 iText 7 做同样的事情?
This link 有 Java 代码示例,但似乎没有使用页面事件。
将 Github 中的代码示例之一添加为答案(它将单词 "Copy" 作为 Header 添加到现有 PDF 文件中)。
protected void ManipulatePdf(String dest)
{
PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest));
Document doc = new Document(pdfDoc);
Paragraph header = new Paragraph("Copy")
.SetFont(PdfFontFactory.CreateFont(StandardFonts.HELVETICA))
.SetFontSize(14)
.SetFontColor(ColorConstants.RED);
for (int i = 1; i <= pdfDoc.GetNumberOfPages(); i++)
{
Rectangle pageSize = pdfDoc.GetPage(i).GetPageSize();
float x = pageSize.GetWidth() / 2;
float y = pageSize.GetTop() - 20;
doc.ShowTextAligned(header, x, y, i, TextAlignment.LEFT, VerticalAlignment.BOTTOM, 0);
}
doc.Close();
}
iText 7 .Net 示例 TextFooter.cs 说明了如何通过事件自动添加页眉和页脚:
public class TextFooter
{
public static readonly String DEST = "results/sandbox/events/text_footer.pdf";
public static void Main(String[] args)
{
FileInfo file = new FileInfo(DEST);
file.Directory.Create();
new TextFooter().ManipulatePdf(DEST);
}
protected void ManipulatePdf(String dest)
{
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
Document doc = new Document(pdfDoc);
pdfDoc.AddEventHandler(PdfDocumentEvent.END_PAGE, new TextFooterEventHandler(doc));
for (int i = 0; i < 3; i++)
{
doc.Add(new Paragraph("Test " + (i + 1)));
if (i != 2)
{
doc.Add(new AreaBreak());
}
}
doc.Close();
}
private class TextFooterEventHandler : IEventHandler
{
protected Document doc;
public TextFooterEventHandler(Document doc)
{
this.doc = doc;
}
public void HandleEvent(Event currentEvent)
{
PdfDocumentEvent docEvent = (PdfDocumentEvent) currentEvent;
Rectangle pageSize = docEvent.GetPage().GetPageSize();
PdfFont font = null;
try {
font = PdfFontFactory.CreateFont(StandardFonts.HELVETICA_OBLIQUE);
}
catch (IOException e)
{
Console.Error.WriteLine(e.Message);
}
float coordX = ((pageSize.GetLeft() + doc.GetLeftMargin())
+ (pageSize.GetRight() - doc.GetRightMargin())) / 2;
float headerY = pageSize.GetTop() - doc.GetTopMargin() + 10;
float footerY = doc.GetBottomMargin();
Canvas canvas = new Canvas(docEvent.GetPage(), pageSize);
canvas
.SetFont(font)
.SetFontSize(5)
.ShowTextAligned("this is a header", coordX, headerY, TextAlignment.CENTER)
.ShowTextAligned("this is a footer", coordX, footerY, TextAlignment.CENTER)
.Close();
}
}
}
使用 iTextSharp,您可以通过将事件附加到 PDF 来将 header/footer 添加到 PDF,就像在这个 SO 答案中解释的那样:
如何使用 iText 7 做同样的事情?
This link 有 Java 代码示例,但似乎没有使用页面事件。
将 Github 中的代码示例之一添加为答案(它将单词 "Copy" 作为 Header 添加到现有 PDF 文件中)。
protected void ManipulatePdf(String dest)
{
PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest));
Document doc = new Document(pdfDoc);
Paragraph header = new Paragraph("Copy")
.SetFont(PdfFontFactory.CreateFont(StandardFonts.HELVETICA))
.SetFontSize(14)
.SetFontColor(ColorConstants.RED);
for (int i = 1; i <= pdfDoc.GetNumberOfPages(); i++)
{
Rectangle pageSize = pdfDoc.GetPage(i).GetPageSize();
float x = pageSize.GetWidth() / 2;
float y = pageSize.GetTop() - 20;
doc.ShowTextAligned(header, x, y, i, TextAlignment.LEFT, VerticalAlignment.BOTTOM, 0);
}
doc.Close();
}
iText 7 .Net 示例 TextFooter.cs 说明了如何通过事件自动添加页眉和页脚:
public class TextFooter
{
public static readonly String DEST = "results/sandbox/events/text_footer.pdf";
public static void Main(String[] args)
{
FileInfo file = new FileInfo(DEST);
file.Directory.Create();
new TextFooter().ManipulatePdf(DEST);
}
protected void ManipulatePdf(String dest)
{
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
Document doc = new Document(pdfDoc);
pdfDoc.AddEventHandler(PdfDocumentEvent.END_PAGE, new TextFooterEventHandler(doc));
for (int i = 0; i < 3; i++)
{
doc.Add(new Paragraph("Test " + (i + 1)));
if (i != 2)
{
doc.Add(new AreaBreak());
}
}
doc.Close();
}
private class TextFooterEventHandler : IEventHandler
{
protected Document doc;
public TextFooterEventHandler(Document doc)
{
this.doc = doc;
}
public void HandleEvent(Event currentEvent)
{
PdfDocumentEvent docEvent = (PdfDocumentEvent) currentEvent;
Rectangle pageSize = docEvent.GetPage().GetPageSize();
PdfFont font = null;
try {
font = PdfFontFactory.CreateFont(StandardFonts.HELVETICA_OBLIQUE);
}
catch (IOException e)
{
Console.Error.WriteLine(e.Message);
}
float coordX = ((pageSize.GetLeft() + doc.GetLeftMargin())
+ (pageSize.GetRight() - doc.GetRightMargin())) / 2;
float headerY = pageSize.GetTop() - doc.GetTopMargin() + 10;
float footerY = doc.GetBottomMargin();
Canvas canvas = new Canvas(docEvent.GetPage(), pageSize);
canvas
.SetFont(font)
.SetFontSize(5)
.ShowTextAligned("this is a header", coordX, headerY, TextAlignment.CENTER)
.ShowTextAligned("this is a footer", coordX, footerY, TextAlignment.CENTER)
.Close();
}
}
}