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