c# - 将页眉和页脚图像添加到 PDF : Header image doesn't show, 页脚被放大

标签 c# asp.net itextsharp

我正在尝试使用库 ITextSharp 创建一个简单的 .pdf。我正在制作一个 .pdf,其中页眉和页脚中有图像,页眉边距为 300px,页脚边距为 664px。

我的问题:我的代码由于某种原因没有插入页眉图像,而页脚图像由于某种原因放大/放大。

你能告诉我我的代码有什么问题吗?标题图像应该扩展 A4 页面的整个宽度并且高度为 300 像素。页脚图像应扩展页面的整个宽度,高度为 664 像素。两张图片都不需要调整大小,它们已经是页面的整个宽度和正确的高度。

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

最佳答案

添加模板时检查它们的位置。例如:

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

希望这对您有所帮助!

关于c# - 将页眉和页脚图像添加到 PDF : Header image doesn't show, 页脚被放大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9595859/

相关文章:

c# - 创建 observablecollection 的过滤 View 并将其显示在列表框中

javascript - 如何找到URL子路径?

c# - 更改 PDF - 文本重新定位

c# - iTextSharp 在不丢失格式的情况下替换现有 PDF 中的文本

c# - HTMLWorker 解析器的“对象引用未设置为对象的实例”

c# - 分析内部 .NET Framework 方法所花费的时间

c# - 第一次打开应用程序时应用程序变慢

c# - 测试不起作用

asp.net - ASP.NET 的 Comet 实现?

c# - 当用户在收到响应之前离开时,ASP.NET MVC Controller 会发生什么情况?