您好 我正在使用itextsharp生成一个pdf文件。我正在其上放置一个背景图像,并希望在所有页面上显示该图像。但是当第一页完成时,文本会自动移动到下一页,因此图像不会出现在新页面上页。
有没有办法识别页面结尾,以便我们可以添加新页面,然后先设置图像,这样就会显示在背景中,然后可以添加剩余的文本。
所有我想在pdf文件的所有页面上都有背景图像。
答案 0 :(得分:3)
我建议您使用页面事件:
myWriter.setPageEvent(new BackgroundPageEvent(backgroundImage));
class BackgroundPageEvent extends PdfPageEventHelper {
Image backgroundImage = null;
public BackgroundPageEvent( Image img ) {
backgroundImage = img;
}
public void onStartPage(PdfWriter writer, Document doc) {
PdfContentByte underContent = writer.getDirectContentUnder();
underContent.addImage(backgroundImage);
}
}
使用上面的代码,backgroundImage
将在创建每个页面时添加到“内容下”。无需担心何时自己添加... iText将为您解决这个问题,并且每个页面的underContent中的第一件事就是您的图像。您可能需要使用addImage的各种覆盖来获得所需的大小。
我相信如果您的程序有所不同,您还可以查询doc
当前页面大小。如果没有,您应该能够以绝对位置/比例创建您传入的图像(这可能就是您已经在做的事情)。
PdfPageEvent还有许多其他可以覆盖的事件。 PdfPageEventHelper覆盖了所有带“no ops”的基础,因此你可以覆盖你想要的事件:
通用标签实际上非常方便。您可以为文档中的任何内容提供通用标记(字符串),并使用用于绘制标记内容的rect调用OnGenericTag覆盖。各种各样的可能性。
答案 1 :(得分:1)
只需检查PdfWriter.PageNumber属性,如下所示:
using (FileStream fs = File.Create("test.pdf"))
{
Document document = new Document(PageSize.A4, 72, 72, 72, 72);
PdfWriter writer = PdfWriter.GetInstance(document, fs);
document.Open();
int pageNumber = -1;
for (int i = 0; i < 20; i++)
{
if (pageNumber != writer.PageNumber)
{
// Add image
pageNumber = writer.PageNumber;
}
// Add something else
}
document.Close();
}