iText5.1.0在文档中设置页眉和页脚[关闭]

2024-04-09

我正在使用 servlet 来查看 pdf 文件,就像使用响应 setContentType pdf 一样。

我想设置IText 5.1.0生成的文档的页眉和页脚。

请帮忙..


暂时忘掉 servlet。确保您可以使页眉/页脚在本地工作。

编辑:我是一个糟糕的用户,因为我发布了过时的 HeaderFooter 内容。似乎很多人都在这样做,因此很难找到这个问题的简洁示例。使用 iText 将标题添加到 pdf https://stackoverflow.com/questions/5062898/add-header-to-pdf-using-itext回答这个问题。

Here seems to be the correct way to do it: (Modified from http://itextpdf.com/examples/iia.php?id=104 http://itextpdf.com/examples/iia.php?id=104 ): enter image description here https://gist.github.com/977502 https://gist.github.com/977502

/*
 * This class is part of the book "iText in Action - 2nd Edition"
 * written by Bruno Lowagie (ISBN: 9781935182610)
 * For more info, go to: http://itextpdf.com/examples/
 * This example only works with the AGPL version of iText.
 *
 * Modified by Nick Dunn (http://developmentality.wordpress.com) to
 * focus on just the PDF header aspect.
 */

package part1.chapter05;

import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Set;
import java.util.TreeSet;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.ExceptionConverter;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.ColumnText;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfPageEventHelper;
import com.itextpdf.text.pdf.PdfTemplate;
import com.itextpdf.text.pdf.PdfWriter;

public class MovieCountries1 {

    /** The resulting PDF file. */
    public static final String RESULT
        = "example_result.pdf";

    /**
     * Inner class to add a table as header.
     */
    class TableHeader extends PdfPageEventHelper {
        /** The header text. */
        String header;
        /** The template with the total number of pages. */
        PdfTemplate total;

        /**
         * Allows us to change the content of the header.
         * @param header The new header String
         */
        public void setHeader(String header) {
            this.header = header;
        }

        /**
         * Creates the PdfTemplate that will hold the total number of pages.
         * @see com.itextpdf.text.pdf.PdfPageEventHelper#onOpenDocument(
         *      com.itextpdf.text.pdf.PdfWriter, com.itextpdf.text.Document)
         */
        public void onOpenDocument(PdfWriter writer, Document document) {
            total = writer.getDirectContent().createTemplate(30, 16);
        }

        /**
         * Adds a header to every page
         * @see com.itextpdf.text.pdf.PdfPageEventHelper#onEndPage(
         *      com.itextpdf.text.pdf.PdfWriter, com.itextpdf.text.Document)
         */
        public void onEndPage(PdfWriter writer, Document document) {
            PdfPTable table = new PdfPTable(3);
            try {
                table.setWidths(new int[]{24, 24, 2});
                table.setTotalWidth(527);
                table.setLockedWidth(true);
                table.getDefaultCell().setFixedHeight(20);
                table.getDefaultCell().setBorder(Rectangle.BOTTOM);
                table.addCell(header);
                table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
                table.addCell(String.format("Page %d of", writer.getPageNumber()));
                PdfPCell cell = new PdfPCell(Image.getInstance(total));
                cell.setBorder(Rectangle.BOTTOM);
                table.addCell(cell);
                table.writeSelectedRows(0, -1, 34, 803, writer.getDirectContent());
            }
            catch(DocumentException de) {
                throw new ExceptionConverter(de);
            }
        }

        /**
         * Fills out the total number of pages before the document is closed.
         * @see com.itextpdf.text.pdf.PdfPageEventHelper#onCloseDocument(
         *      com.itextpdf.text.pdf.PdfWriter, com.itextpdf.text.Document)
         */
        public void onCloseDocument(PdfWriter writer, Document document) {
            ColumnText.showTextAligned(total, Element.ALIGN_LEFT,
                    new Phrase(String.valueOf(writer.getPageNumber() - 1)),
                    2, 2, 0);
        }
    }

    /**
     * Creates a PDF document.
     * @param filename the path to the new PDF document
     * @throws    DocumentException 
     * @throws    IOException
     * @throws    SQLException
     */
    public void createPdf(String filename)
        throws IOException, DocumentException, SQLException {

        // step 1
        Document document = new Document(PageSize.A4, 36, 36, 54, 36);
        // step 2
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(RESULT));
        TableHeader event = new TableHeader();
        writer.setPageEvent(event);
        // step 3 - fill in the document
        document.open();

        event.setHeader("Hello!");
        document.add(new Paragraph("Testing."));
        document.newPage();
        event.setHeader("There!");
        document.add(new Paragraph("Testing."));

        document.close();
    }

    /**
     * Main method.
     *
     * @param    args    no arguments needed
     * @throws DocumentException 
     * @throws IOException 
     * @throws SQLException
     */
    public static void main(String[] args)
        throws IOException, DocumentException, SQLException {
        new MovieCountries1().createPdf(RESULT);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iText5.1.0在文档中设置页眉和页脚[关闭] 的相关文章

  • createImage(int width, int height) 的问题

    我有以下代码 作为游戏的一部分每 10 毫秒运行一次 private void gameRender if dbImage null createImage returns null if GraphicsEnvironment isHea
  • 通过SOCKS代理连接Kafka

    我有一个在 AWS 上运行的 Kafka 集群 我想用标准连接到集群卡夫卡控制台消费者从我的应用程序服务器 应用程序服务器可以通过 SOCKS 代理访问互联网 无需身份验证 如何告诉 Kafka 客户端通过代理进行连接 我尝试了很多事情 包
  • 使用 Ant 将非代码资源添加到 jar 文件

    我正在将 java 应用程序打包成 jar 文件 我正在使用 ant 和 eclipse 我实际上需要在 jar 中直接在根文件夹下包含几个单独的非代码文件 xml 和 txt 文件 而不是与代码位于同一位置 我正在尝试使用includes
  • “java.net.MalformedURLException:未找到协议”读取到 html 文件

    我收到一个错误 java net MalformedURLException Protocol not found 我想读取网络上的 HTML 文件 mainfest uses permission android name android
  • 是否有任何简单(且最新)的 Java 框架可用于在 Swing 应用程序中嵌入电影?

    我正在构建一个小型 Swing 应用程序 我想在其中嵌入一部电影 重要的是 这个应用程序是一个 WebStart 应用程序 并且该库应该能够打包在我启动的 jnlp 中 即 不依赖于本机库 我知道并尝试过 JMF 但我认为与其他框架相比 其
  • Kotlin 未解决的参考:CLI 上 gradle 的 println

    放一个printlnkotlin 函数返回之前的语句会崩溃 堆栈跟踪 thufir dur NetBeansProjects kotlin thufir dur NetBeansProjects kotlin gradle clean bu
  • 如何根据运行的 jar 的结果让我的 ant 任务通过或失败?

    我正在运行 CrossCheck 无浏览器 js 单元测试 作为 ant 脚本的一部分 如果 CrossCheck 测试失败 我希望 ant 报告失败 这是 build xml 中的相关部分
  • 在另一个模块中使用自定义 gradle 插件模块

    我正在开发一个自定义插件 我希望能够在稍后阶段将其部署到存储库 因此我为其创建了一个独立的模块 在对其进行任何正式的 TDD 之前 我想手动进行某些探索性测试 因此 我创建了一个使用给定插件的演示模块 到目前为止 我发现执行此操作的唯一方法
  • 内部存储的安全性如何?

    我需要的 对于 Android 我需要永久保存数据 但也能够编辑 并且显然是读取 它 用户不应访问此数据 它可以包含诸如高分之类的内容 用户不得对其进行编辑 我的问题 我会 并且已经 使用过Internal Storage 但我不确定它实际
  • GWT 2.3 开发模式 - 托管模式 JSP 编译似乎不使用 java 1.5 兼容性

    无法编译 JSP 类 生成的 servlet 错误 DefaultMessage 上次更新 0 日期 中 0 时间 HH mm ss z 语法 错误 注释仅在源级别为 1 5 时可用 在尝试以开发模式在 Web 浏览器中打开我的 gwt 模
  • 流中的非终结符 forEach() ?

    有时 在处理 Java Stream 时 我发现自己需要一个非终端 forEach 来触发副作用但不终止处理 我怀疑我可以用 map item gt f item 之类的方法来做到这一点 其中方法 f 执行副作用并将项目返回到流中 但这似乎
  • QuerySyntaxException:无法找到类

    我正在使用 hql 生成 JunctionManagementListDto 类的实际 Java 对象 但我最终在控制台上出现以下异常 org hibernate hql internal ast QuerySyntaxException
  • java库维护数据库结构

    我的应用程序一直在开发 所以偶尔 当版本升级时 需要创建 更改 删除一些表 修改一些数据等 通常需要执行一些sql代码 是否有一个 Java 库可用于使我的数据库结构保持最新 通过分析类似 db structure version 信息并执
  • 返回 Java 8 中的通用函数接口

    我想写一种函数工厂 它应该是一个函数 以不同的策略作为参数调用一次 它应该返回一个函数 该函数根据参数选择其中一种策略 该参数将由谓词实现 嗯 最好看看condition3为了更好的理解 问题是 它没有编译 我认为因为编译器无法弄清楚函数式
  • 使用布尔值进行冒泡排序以确定数组是否已排序

    我有以下用于冒泡排序的代码 但它根本不排序 如果我删除布尔值那么它工作正常 我知道 由于我的 a 0 小于所有其他元素 因此没有执行交换 任何人都可以帮助我解决这个问题 package com sample public class Bub
  • JMenu 中的文本居中

    好吧 我一直在网上寻找有关此问题的帮助 但我尝试的任何方法似乎都不起作用 我想让所有菜单文本都集中在菜单按钮上 当我使用setHorizontalTextPosition JMenu CENTER 没有变化 事实上 无论我使用什么常量 菜单
  • Resteasy 可以查看 JAX-RS 方法的参数类型吗?

    我们使用 Resteasy 3 0 9 作为 JAX RS Web 服务 最近切换到 3 0 19 我们开始看到很多RESTEASY002142 Multiple resource methods match request警告 例如 我们
  • 将 Apache Camel 执行器指标发送到 Prometheus

    我正在尝试转发 添加 Actuator Camel 指标 actuator camelroutes 将交换 交易数量等指标 发送到 Prometheus Actuator 端点 有没有办法让我配置 Camel 将这些指标添加到 Promet
  • 在浏览器刷新中刷新检票面板

    我正在开发一个付费角色系统 一旦用户刷新浏览器 我就需要刷新该页面中可用的统计信息 统计信息应该从数据库中获取并显示 但现在它不能正常工作 因为在页面刷新中 java代码不会被调用 而是使用以前的数据加载缓存的页面 我尝试添加以下代码来修复
  • 洪水填充优化:尝试使用队列

    我正在尝试创建一种填充方法 该方法采用用户指定的初始坐标 检查字符 然后根据需要更改它 这样做之后 它会检查相邻的方块并重复该过程 经过一番研究 我遇到了洪水填充算法并尝试了该算法 它可以工作 但无法满足我对 250 x 250 个字符的数

随机推荐

  • 数据库性能:按列过滤与单独表过滤

    我想知道对于以下情况最好的方法是什么 我在数据库中有一个订单表 显然包含所有订单 但这些实际上是所有订单 因此包括刚刚标记为 完成 的完整 完成的订单 我想从所有未结订单中计算一些内容 例如未结金额 未结项目等 什么会更好的性能明智 保留
  • 为什么卸载时我的服务没有被删除? (维克斯)

    即使重新启动后 即使可执行文件消失 服务仍然存在 我使用的是 WIX 版本 3 0 5419 0
  • 内部类和外部成员的访问

    我一直认为内部类可以访问其外部类中的所有数据 但有代码 template
  • 如何获取二维列表中的每个第一个元素

    我有一个这样的列表 a 4 0 4 4 0 3 0 3 3 6 3 5 6 4 8 我想要这样的结果 EVERY列表中的第一个元素 4 0 3 0 3 5 I tried a 1 0 但它不起作用 就可以得到索引了 0 来自列表理解中的每个
  • 如果我在 onResume 中调用 getMeasuredWidth() 或 getWidth() 进行布局,它们将返回 0

    如果我在 onResume 中调用 getMeasuredWidth 或 getWidth 进行布局 它们将返回 0 我认为此时此刻还没有绘制出该视图 另外 我认为我需要将 getMeasuredWidth 或 getWidth 放入绘制布
  • 使用 MingW 64 绕过 fork() 的最佳方法?

    我浏览了十几个关于 Windows 没有的链接fork 以及应该如何使用CreateProcess or CreateThread试图解决这个问题 但是不允许时间和风险来重写一大段遗留代码 有没有一种快速 简单的方法来获取fork在 Win
  • Ruby 中 as_json 和 to_json 方法的区别

    两种方法有什么区别as json and to json 它们相同吗 如果不是的话它们之间有什么区别 to json返回字符串 as json返回带有字符串键的哈希值 gt name gt Konata Izumi age gt 16 1
  • 实体框架 - 首先反向工程代码 - 覆盖更改

    我使用 EF Power Tools 来反向工程现有的数据库 这可以 在 EDMX 数据库第一条路线下 我将为任何覆盖 例如数据注释 创建部分类 例如这里 账期是原始的 EntityObject MetadataType typeof Le
  • 如何 grep grep 返回的文件内容?

    当我使用以下命令查找带有错误消息的日志文件时grep error log 它返回日志文件列表 grep error log Binary file out0080 2011 01 07 12 38 log matches Binary fi
  • 检查调用和未调用时 Mockk 验证失败

    我正在尝试使用以下命令验证是否未调用函数 verify managementService deleteUser any wasNot Called 该验证失败并显示以下消息 验证失败 调用第 1 个 共 1 个 ManagementSer
  • OpenCV:imread给出CV_8UC3,无法转换为CV_8UC4?

    需要有关我尝试使用 OpenCV 加载和转换的图像的帮助 这是我的代码 templ imread Template bmp 1 cout lt lt templ before convert lt
  • 没有 RTTI 的情况下编译 c++ 什么时候会出现问题?

    我正在使用 gcc fno rtti标志在没有运行时类型信息的情况下编译我的 C 假设我没有使用dynamic cast lt gt or typeid 有什么可能导致我以后出现问题吗 由于您的问题特定于 GCC 您应该仔细查阅您正在使用的
  • 将管理证书与 azure REST API 一起使用

    我在我的应用程序中使用 azure 服务管理 REST API 我在azure上上传了管理证书 并在本地有一份副本 我将认证保存在应用程序本身的单独文件夹 AzureCertificate 中并引用该位置 例如 字符串证书路径 Server
  • Rails + PostgreSQL - 使用 Like

    我有以下两个疑问 SELECT users FROM users WHERE fname lname LIKE james SELECT users FROM users WHERE fname lname LIKE James 我在用户表
  • Mongoose Schema.update 不更新布尔值

    我尝试过更新其他字段 效果很好 我在 API 中使用的命令 User update email targetUser email set isAdmin true push log updated new Date function err
  • 如何在 Android 应用程序中访问 graph.windows.net Microsoft Azure Graph API?

    我已要求 IT 管理员添加一个名为EmployeeId以 Azure Active Directory 的目录扩展的形式 与我们的现场 AD 同步 当给定用户登录我的 Android 应用程序时 我试图检索该值 我已经关注了this htt
  • Cloud9 Watir/Selenium 测试

    我已经为一个简单的持续集成和交付系统设置了 Cloud9 和 Codeship 它非常适合开发我的网站 应用程序 有没有人能够在 Cloud9 IDE 中开发和运行基于浏览器的 Cucumber 测试 如果是这样 需要什么样的设置 附言 我
  • IIS6 ASP.NET 2.0 应用程序缓存 - 大量数据的数据存储选项和性能

    在 ASP NET 2 0 站点中IIS6我想将键 值对存储在应用程序缓存中 每个键始终是一个长度为 5 个字符的字符串 每个值都是一个长度为 15 250 个字符的字符串 使用场景是 每个网页请求都会查询一次缓存 如果键存在 则使用值 否
  • 如何重命名我的 asp.net 网页

    我的页面名称为 XYZ aspx 现在我想更改ABC aspx我应该怎么做 当我直接从解决方案资源管理器更改它时 它给了我一个错误 谁可以帮我这个事 谢谢 Smartdev ASP NET 文件通常由 1 3 个文件组成 具体取决于项目类型
  • iText5.1.0在文档中设置页眉和页脚[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在使用 servlet 来查看