2014-11-01 23 views
3

在按鈕點擊,我產生在我的PDF 4頁修復的背景圖像,我將此圖像提供背景圖片設置我的PDF iText的ASP C#的所有頁面

 string imageFilePath = parent + "/Images/bg_image.jpg"; 
     iTextSharp.text.Image jpg = iTextSharp.text.Image.GetInstance(imageFilePath); 
     jpg.ScaleToFit(1700, 1000); 
     jpg.Alignment = iTextSharp.text.Image.UNDERLYING; 
     jpg.SetAbsolutePosition(0, 0); 
     document.Add(jpg); 

它僅適用於1頁面,但是當我生成一個包含許多記錄並有多個頁面的PDF時,bg圖像僅位於最後一頁。我想將背景圖像應用於所有頁面。

回答

2

僅添加一次背景是正常的,因爲您只添加一次。

如果你想添加內容到每一頁,你不應該這樣做手動,因爲你不知道什麼時候iText會創建一個新頁面。相反,你應該使用頁面事件。這在Chapter 5 of my book(對於示例的C#版本,參見http://tinyurl.com/itextsharpIIA2C05)中有解釋。

一個很好的例子可以在Stationery示例中找到在第6章:Stationery.cs

的想法是通過擴展PdfPageEventHelper類並覆蓋OnEndPage()方法創建PdfPageEvent接口的實現,例如:

class TemplateHelper : PdfPageEventHelper { 
    private Stationery instance; 
    public TemplateHelper() { } 
    public TemplateHelper(Stationery instance) { 
     this.instance = instance; 
    } 
    /** 
    * @see com.itextpdf.text.pdf.PdfPageEventHelper#onEndPage(
    *  com.itextpdf.text.pdf.PdfWriter, com.itextpdf.text.Document) 
    */ 
    public override void OnEndPage(PdfWriter writer, Document document) { 
     writer.DirectContentUnder.AddTemplate(instance.page, 0, 0); 
    } 
} 

在這種情況下,我們添加一個PdfTemplate,但它是很容易的添加ImageImage實例替換Stationery實例和更換AddTemplate()方法與AddImage()方法。

一旦你有你的自定義頁面事件的情況下,你需要將其申報爲PdfWriter實例:

writer.PageEvent = new TemplateHelper(this); 

從這以後,你OnEndPage()方法將每一個頁面被最終確定的時間執行的那一刻。

警告:如記錄你不得使用OnStartPage()方法在一個頁面事件中添加內容!

更新:

最後的結果看起來或多或少是這樣的:

class ImageBackgroundHelper : PdfPageEventHelper { 
    private Image img; 
    public ImageBackgroundHelper(Image img) { 
     this.img = img; 
    } 
    /** 
    * @see com.itextpdf.text.pdf.PdfPageEventHelper#onEndPage(
    *  com.itextpdf.text.pdf.PdfWriter, com.itextpdf.text.Document) 
    */ 
    public override void OnEndPage(PdfWriter writer, Document document) { 
     writer.DirectContentUnder.AddImage(img); 
    } 
} 

現在你可以使用這個事件是這樣的:

string imageFilePath = parent + "/Images/bg_image.jpg"; 
iTextSharp.text.Image jpg = iTextSharp.text.Image.GetInstance(imageFilePath); 
jpg.ScaleToFit(1700, 1000); 
jpg.SetAbsolutePosition(0, 0); 
writer.PageEvent = new ImageBackgroundHelper(jpg); 

注意1700和1000似乎相當大。你確定這些是你網頁的尺寸嗎?

+1

我一直有錯誤,說「ImageBackgroundHelper不包含一個構造函數,需要1參數」的代碼writer.PageEvent = new ImageBackgroundHelper(jpg); – dandy 2014-11-01 12:06:13

+1

我可以清楚地看到構造函數:'public ImageBackgroundHelper(Image img){this.img = img; }'請不要釣魚StackOverflow! – 2014-11-01 12:33:40

相關問題