【问题标题】:PDF footer at the bottom using iTextSharp底部使用 iTextSharp 的 PDF 页脚
【发布时间】:2011-07-14 05:59:21
【问题描述】:

我正在尝试使用 iTextSharp 5.0.6 在 c# 中创建一个 pdf 文档。我想分别为 OnStartPage 和 OnEndPage 事件中的每个页面添加页眉和页脚。

如果是页脚,则存在一个问题,即页脚是在页面结束的地方创建的,而我想在页面底部。

iTextSharp 中有没有办法指定页面高度,以便始终在底部创建页脚。

谢谢!

【问题讨论】:

    标签: c# pdf .net-4.0 itextsharp


    【解决方案1】:

    页面的高度总是定义的:

    document.PageSize.Height // document.getPageSize().getHeight() in Java
    

    请记住,在 PDF 中,0,0 是左下角,并且随着您向右和向上移动,坐标会增加。

    在 PdfPageEvent 中,您需要使用绝对坐标。听起来您要么从文档中获取当前的 Y,要么只是在当前位置绘制东西。不要那样做。

    此外,如果您想在每个页面上使用完全相同的页脚,您可以将所有内容绘制到 PdfTemplate 中,然后将该模板绘制到您想要的各个页面中。

    PdfTemplate footerTmpl = writer.getDirectContent().createTemplate( 0, 0, pageWidth, footerHeight );
    
    footerTmpl.setFontAndSize( someFont, someSize );
    footerTmpl.setTextMatrix( x, y );
    footer.showText("blah");
    // etc
    

    然后在您的PdfPageEvent 中,您只需在页面底部添加footerTempl

     writer.getDirectContent().addTemplateSimple( footerTmpl, 0, 0 );
    

    即使您的页脚大部分是相同的,您也可以使用此技术来节省内存、执行时间和文件大小。

    另外,如果你不想直接乱用PdfContentByte的绘图命令,可以通过ColumnText在一定程度上避开它们。有几个用 iText 或 iTextSharp 标记的问题来处理该类。到处走走,你会找到它们。

    【讨论】:

    • 如何访问“getDirectContent()”函数? iTextSharp 在 writer 对象上似乎没有这样的方法。
    • @NickG,在C#中,你可以使用writer.DirectContent
    • 文本“blah”仅在 chrome 中可见。您可以用 BeginText() 和 EndText() 包围 showtext 函数,并使其像这样 footer.BeginText(); footer.ShowText("废话");页脚.EndText();
    猜你喜欢
    • 1970-01-01
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 2018-05-25
    • 2013-04-15
    • 2018-03-12
    相关资源
    最近更新 更多