如何将图像添加到 PDF 的所有页面? [英] How can I add an image to all pages of my PDF?

查看:52
本文介绍了如何将图像添加到 PDF 的所有页面?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在尝试使用 itextsharp 将图像添加到所有页面.图像需要覆盖每个页面的所有内容.我在所有其他doc.add()

I have been trying to add an image to all pages using itextsharp. The image needs to be OVER all content of every page. I have used the following code below all the otherdoc.add()

Document doc = new Document(iTextSharp.text.PageSize.A4, 10, 10, 30, 1);
PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(Server.MapPath("~/pdf/" + fname), FileMode.Create));
doc.Open();
Image image = Image.GetInstance(Server.MapPath("~/images/draft.png"));
image.SetAbsolutePosition(12, 300);
writer.DirectContent.AddImage(image, false);
doc.Close();

上面的代码只在最后一页插入了一张图片.有什么办法可以在所有页面中以相同的方式插入图片吗?

The above code only inserts an image in the last page. Is there any way to insert the image in the same way in all pages?

推荐答案

图片只添加一次是正常的;毕竟:您只添加一次.(或者您在代码片段中遗漏了一些基本步骤:请参阅我所做的编辑.)

It's normal that the image is only added once; after all: you're adding it only once. (Or you've left away some essential steps in your code snippet: see the edit I made.)

无论如何:您可以通过使用页面事件来解决您的问题.这里有一些 Java 示例:http://itextpdf.com/sandbox/events

In any case: you can solve your problem by using a page event. There are some examples in Java here: http://itextpdf.com/sandbox/events

或者你可以参考我书的第 5 章.JavaC#.

Or you can consult chapter 5 of my book. All examples are available in Java as well as in C#.

您应该分 5 个步骤创建文档并在步骤 2 中添加一个事件:

You should create a document in 5 steps and add an event in step 2:

// step 1
Document document = new Document();
// step 2
PdfWriter writer = PdfWriter.GetInstance(document, stream);
MyEvent event = new MyEvent();
writer.PageEvent = event;
// step 3
document.Open();
// step 4
// Add whatever content you want to add
// step 5
document.Close();

您必须自己编写 MyEvent 类:

You have to write the MyEvent class yourself:

protected class MyEvent : PdfPageEventHelper {

    Image image;

    public override void OnOpenDocument(PdfWriter writer, Document document) {
        image = Image.GetInstance(Server.MapPath("~/images/draft.png"));
        image.SetAbsolutePosition(12, 300);
    }

    public override void OnEndPage(PdfWriter writer, Document document) {
        writer.DirectContent.AddImage(image);
    }
}

MyEvent 类中的 OnEndPage() 将在每次 PdfWriter 完成一个页面时被触发.因此,图像将添加到每个页面上.

The OnEndPage() in class MyEvent will be triggered every time the PdfWriter has finished a page. Hence the image will be added on every page.

警告:OnEndPage() 方法之外创建 image 对象很重要,否则图像字节有被添加的风险次,因为您的 PDF 中有页面(导致 PDF 臃肿).

Caveat: it is important to create the image object outside the OnEndPage() method, otherwise the image bytes risk being added as many times as there are pages in your PDF (leading to a bloated PDF).

这篇关于如何将图像添加到 PDF 的所有页面?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆