2012-03-07 12 views
4

libary ITextSharpを使用して簡単な.pdfを作成しようとしています。私は.pdfを作成しています。ヘッダ&フッタには画像があり、ヘッダマージンは300px &です。フッタマージンは664pxです。PDFにヘッダーとフッターイメージを追加する:ヘッダーイメージが表示されない、フッターがスケールアップされる

問題:私のコードで何らかの理由でヘッダーイメージが挿入されず、フッターイメージが何らかの理由でサイズが狂っている/拡大しています。

私のコードで何が間違っているか教えてもらえますか?ヘッダーイメージは、A4ページの全幅を延長する必要があります。&の高さは300pxです。フッタ画像は、ページの全幅が高さで664pxになるようにしてください。&どちらのイメージもサイズを変更する必要はありません。ページの全幅が既に正確な高さである&です。

public class itsEventsHandler : PdfPageEventHelper 
{ 
    PdfTemplate total; 
    BaseFont helv; 

    // I am following a tutorial & they said that if I want to create headers/footers when each page is created 
    // that I should override the OnEndPage() not the OnStartPage() is that correct? 
    public override void OnEndPage(PdfWriter writer, Document document) 
    { 
     // Post: When each new page is created, add a header & footer image to the page. And set the top margin to 370px 
     //  and the bottom margin to 664px. 
     // Result: The function executes but the pdf's header image isn't visible & the footer looks resized(scaled up in size). 

     //Footer Image 
     iTextSharp.text.Image imgfoot = iTextSharp.text.Image.GetInstance(resolvePath("~/images/pdf/bottomBorder.jpg")); 
     //Header Image 
     iTextSharp.text.Image imghead = iTextSharp.text.Image.GetInstance(resolvePath("~/images/pdf/topBorder.jpg")); 

     imgfoot.SetAbsolutePosition(0, 0); 
     imghead.SetAbsolutePosition(0, 0); 

     PdfContentByte cbhead = writer.DirectContent; 
     PdfTemplate tp = cbhead.CreateTemplate(2480, 370); // units are in pixels but I'm not sure if thats the correct units 
     tp.AddImage(imghead); 

     PdfContentByte cbfoot = writer.DirectContent; 
     PdfTemplate tpl = cbfoot.CreateTemplate(2480, 664); 
     tpl.AddImage(imgfoot); 

     cbhead.AddTemplate(tp, 0, 0); 
     cbfoot.AddTemplate(tpl, 0, 0); 

     helv = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED); 

     /*PdfContentByte cb = writer.DirectContent; 
     cbfoot.SaveState(); 
     document.SetMargins(35, 35, 100, 82); 
     cb.RestoreState();*/ 

     //document.NewPage(); 
     base.OnStartPage(writer, document); 
    } 

    public override void OnOpenDocument(PdfWriter writer, Document document) 
    { 
     total = writer.DirectContent.CreateTemplate(100, 100); 
     total.BoundingBox = new iTextSharp.text.Rectangle(-20, -20, 100, 100); 
     helv = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED); 
    } 
} 

// My code to create the pdf 
// Create a Document object 
var document = new Document(PageSize.A4, 50, 50, 370, 664); 
var output = new MemoryStream(); 
var writer = PdfWriter.GetInstance(document, output); 
writer.PageEvent = new itsEventsHandler(); 
// Open the Document for writing 
document.Open(); 
// add some paragrahs 
document.Close(); 

答えて

4

テンプレートを追加するときに、その場所を確認します。例:

cbhead.AddTemplate(tp, 0, 715); 
cbfoot.AddTemplate(tpl, 0, 0); 

関連する問題