我一直在尝试使用itextsharp将图像添加到所有页面。图像需要超过每个页面的所有内容。我在所有其他doc.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();
以上代码仅在最后一页插入图像。有没有办法在所有页面中以相同的方式插入图像?
答案 0 :(得分: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 :(得分: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。