【问题标题】:itextsharp: How to generate a report with dynamic header in PDF using itextsharp?itextsharp:如何使用 itextsharp 在 PDF 中生成带有动态标题的报告?
【发布时间】:2014-03-04 21:43:16
【问题描述】:

我正在使用 itextsharp 生成 PDF 报告,报告的标题包含客户的信息, 报告正文中包含客户交易列表。

我的疑问是:如何为每个客户端动态生成标头?

我需要一个示例来为报告动态生成标题。 每个新的页面Header都需要有数据,客户端在更改客户端Header时应该包含新客户端的信息。

【问题讨论】:

    标签: c# pdf itextsharp console-application


    【解决方案1】:

    你的问题有可能被否决,或者至少在“你尝试过什么?”的意义上是 cmets

    不过,我用 Java 为您编写了一个小示例,您可以轻松地适应 C#,因为 iText 和 iTextSharp 或多或少共享相同的语法。

    这个例子叫做VariableHeader,这些是最有趣的sn-ps:

    首先,我创建了PdfPageEvent 接口的自定义实现(使用PdfPageEventHelper)。请务必了解,您不能使用 onStartPage() 方法(原因在我的书中有所描述),请改用 onEndPage() 方法。

    public class Header extends PdfPageEventHelper {
    
        protected Phrase header;
    
        public void setHeader(Phrase header) {
            this.header = header;
        }
    
        @Override
        public void onEndPage(PdfWriter writer, Document document) {
            PdfContentByte canvas = writer.getDirectContentUnder();
            ColumnText.showTextAligned(canvas, Element.ALIGN_RIGHT, header, 559, 806, 0);
        }
    }
    

    如您所见,标题的文本存储在一个变量中,可以使用我们创建的setHeader() 方法更改该变量。

    PdfWriter 声明事件,如下所示:

    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename));
    Header event = new Header();
    writer.setPageEvent(event);
    

    我在调用newPage() 方法之前更改了标题Phrase

    event.setHeader(new Phrase(String.format("THE FACTORS OF %s", i)));
    document.newPage();
    

    在我的简单示例中,我生成了一个文档,其中列出了从 2 到 300 的所有数字的因数:variable_header.pdf。每个页面的标题都写着“X 的因素”,其中 X 是该页面上显示的因素的数量。

    您可以轻松调整它以显示不同的客户名称而不是数字。

    【讨论】:

      猜你喜欢
      • 2011-07-27
      • 2011-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      • 2022-10-06
      • 2014-07-30
      相关资源
      最近更新 更多