我如何将图像添加到我的PDF的所有网页?

问题描述 投票:2回答:2

我一直在试图将图像添加到使用iTextSharp的所有页面。该图像需要超过每一页的所有内容。我用下面的所有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();

上面的代码只是插入最后一页的图像。有什么办法来插入图像中的所有页面以同样的方式?

image pdf image-processing razor itextsharp
2个回答
4
投票

这是正常的图像只加一次;毕竟:您要添加它只有一次。 (或者你已经离开远一些必要的步骤,在您的代码片段:看我做了编辑。)

在任何情况下:您可以通过使用页面事件解决您的问题。有一些Java中的例子在这里:http://itextpdf.com/sandbox/events

或者您也可以咨询我的书的第5章。所有的例子在Java以及在C#可用。

你应该在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);
    }
}

在课堂上OnEndPage()MyEvent将被触发每次PdfWriter已完成一个页面的时间。因此,图像将在每个页面上进行添加。

警告:这是创建image方法外OnEndPage()对象重要的,否则,因为在你的PDF页面(导致臃肿PDF)添加图像字节风险多次。


1
投票
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();
    }
}}

这对我来说可以;参考this link

© www.soinside.com 2019 - 2024. All rights reserved.