2014-02-20 96 views
1

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

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(); 

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

回答

3

这是正常的图像只添加一次;毕竟:你只添加一次。 (或者你已经在你的代码片段中留下了一些基本步骤:请参阅我所做的编辑。)

无论如何:你可以通过使用页面事件来解决你的问题。这里有一些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); 
    } 
} 

MyEventOnEndPage()会每当PdfWriter完成一个页面时触发。因此图像将被添加到每个页面上。

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

+0

是的,我没有把任何代码,添加图像,因为我从来没有发现任何方式这样做。 –

+0

我正在使用剃须刀,我没有找到创建文件或覆盖方法或包含外部c#文件的选项 –

+0

Razor正在使用过时的,不受支持的iTextSharp版本。它不被iText Software认可。我很抱歉,但iText没有人可以帮助你。您应该联系负责剃刀的人员。 –

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



It works me fine refer below link 

http://%20http://developers.itextpdf.com/examples/page-events/page-events-headers-and-footers

+0

除了布鲁诺的回答,你的回答究竟是什么? – mkl

+0

是的,@ mkl我已经添加了columnText bcoz,添加唯一的图像对我没有效果。我参考这个链接并添加了http://developers.itextpdf.com/examples/page-events/page-events-headers-and-footers –

相关问题