Image 如何将图像添加到PDF的所有页面?

Image 如何将图像添加到PDF的所有页面?,image,pdf,image-processing,razor,itextsharp,Image,Pdf,Image Processing,Razor,Itextsharp,我一直在尝试使用itextsharp向所有页面添加图像。图像需要覆盖每个页面的所有内容。我在所有其他doc.add() 以上代码仅在最后一页插入图像。有没有办法在所有页面中以相同的方式插入图像?通常只添加一次图像;毕竟:您只添加了一次。(或者您在代码片段中遗漏了一些基本步骤:请参阅我所做的编辑。) 在任何情况下:您都可以通过使用页面事件来解决问题。这里有一些Java示例: 或者你可以参考我书的第五章。所有示例都可以在中以及中找到 您应分5步创建文档,并在步骤2中添加事件: // step 1 D

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


以上代码仅在最后一页插入图像。有没有办法在所有页面中以相同的方式插入图像?

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

在任何情况下:您都可以通过使用页面事件来解决问题。这里有一些Java示例:

或者你可以参考我书的第五章。所有示例都可以在中以及中找到

您应分5步创建文档,并在步骤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
类:

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);
    }
}
每次
PdfWriter
完成一个页面时,都会触发类
MyEvent
中的
OnEndPage()
。因此,图像将添加到每个页面上

注意事项:
OnEndPage()方法之外创建
image
对象非常重要,否则图像字节的添加次数可能与PDF中的页面数量相同(导致PDF膨胀)


这对我来说很好;请参阅。

是的,我没有输入任何代码来添加图像,因为我从未找到任何方法。我正在使用razor,我找不到创建文件或重写方法或包含外部c的选项。fileRazor使用的是过时的、不受支持的iTextSharp版本。iText软件不支持该协议。对不起,iText没有人能帮你。你应该联系负责剃须刀的人。谢谢。我已经添加了剃须刀标签。我正在检查是否有任何方法包含.cs文件中的类谢谢我在razor中找到了一个解决方法。我不确定你们说的是“过时的和不受支持的版本”,但我必须找到一种方法将一个.cs文件链接到razor。基本上,您需要将.cs文件保存在根目录中名为“App_Code”的文件夹中。除了Bruno的答案之外,您的答案还提供了什么?是的,@mkl我添加了columnText bcoz添加唯一的图像对我不起作用。我引用此链接并添加
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);
    }
}
Document document = new Document();
// step 2

PdfWriter writer = PdfWriter.GetInstance(document, stream);

 final MyEvent event = new MyEvent();

    writer.setPageEvent(event);

    document.Open();

// Add whatever content you want to add

   document.Close();

//Now Create The new class and override the onEndPage()
//I have used this for footer image but you can add wherever you want 
//in the whole page using setAbsolutePosition(see below the class)
//I am using palyFramework with java
 package controllers;

import java.io.IOException;
import java.nio.file.Files;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.ColumnText;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfPageEventHelper;
import com.itextpdf.text.pdf.PdfWriter;
import play.Play;

public class MyEvent extends PdfPageEventHelper{

@Override
public void onEndPage(final PdfWriter writer, final Document document) 
{
    final Font ffont = new Font(Font.FontFamily.TIMES_ROMAN,8, 
Font.ITALIC);
    Image img;
    try {
        final Phrase footer = new Phrase("Powered By :", ffont);
img=Image.getInstance(Files.readAllBytes(Play.application().getFile("/
                                     img- path/Image.png").toPath()));
        img.scaleToFit(60f, 40f);
           img.setAbsolutePosition(510,5);
        final PdfContentByte cb = writer.getDirectContent();
        cb.addImage(img);
        ColumnText.showTextAligned(cb, Element.ALIGN_CENTER,
                footer,490, 15, 0);
    } catch (IOException | DocumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}}