效果图

038cfbdab7ea?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

QQ图片20190117140345.png

继承PdfPageEventHelper重写onEndPage方法

package com.xuqiang.itext.test;

import com.itextpdf.text.*;

import com.itextpdf.text.pdf.BaseFont;

import com.itextpdf.text.pdf.ColumnText;

import com.itextpdf.text.pdf.PdfPageEventHelper;

import com.itextpdf.text.pdf.PdfWriter;

import java.io.IOException;

/**

* @author xuqiang

* @date 2019/1/2

*/

public class PDFBuilder extends PdfPageEventHelper {

private Phrase leftHeader;

private Phrase rigntHeader;

static final int marginX = 90;

static final int marginY = 70;

private static BaseFont baseFont;

// 生成下划线空白占位符

private static String Blank;

// 页眉字体

private static Font font;

// 下划线字体

private static Phrase blankPhrase;

PDFBuilder(String[] header) {

this.leftHeader = new Phrase(header[0], PDFBuilder.font);

this.rigntHeader = new Phrase(header[1], PDFBuilder.font);

}

static {

try {

// 中文字体依赖itext得itext-asian包

baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);

StringBuilder sb = new StringBuilder();

for (int i = 0; i < 168; i++) {

sb.append("\u00a0");

}

Blank = sb.toString();

font = new Font(PDFBuilder.baseFont, 9, Font.UNDEFINED);

blankPhrase = new Phrase(PDFBuilder.Blank, new Font(PDFBuilder.baseFont, Font.DEFAULTSIZE, Font.UNDERLINE));

} catch (DocumentException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* @param writer

* @param document

*/

@Override

public void onEndPage(PdfWriter writer, Document document) {

int yMargin = -20;

float top = document.top(yMargin);

// 第一页不生成页眉页脚

if (document.getPageNumber() == 1) {

return;

}

//生成下划线,使用空格占位

ColumnText.showTextAligned(writer.getDirectContent(),

Element.ALIGN_LEFT, PDFBuilder.blankPhrase,

document.left(-1), top, 0);

//生成左侧页眉

ColumnText.showTextAligned(writer.getDirectContent(),

Element.ALIGN_LEFT, leftHeader,

document.left(), top, 0);

//生成右侧页眉

ColumnText.showTextAligned(writer.getDirectContent(),

Element.ALIGN_RIGHT, rigntHeader,

document.right(), top, 0);

//生成页脚页数

ColumnText.showTextAligned(writer.getDirectContent(),

Element.ALIGN_RIGHT, new Phrase(String.valueOf(document.getPageNumber() - 1), PDFBuilder.font),

document.right(), document.bottom(yMargin), 0);

}

}

测试类

package com.xuqiang.itext.test;

import com.itextpdf.text.Document;

import com.itextpdf.text.PageSize;

import com.itextpdf.text.pdf.PdfWriter;

import com.itextpdf.tool.xml.XMLWorkerHelper;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.OutputStream;

import java.nio.charset.StandardCharsets;

/**

* @author xuqiang

* @date 2018/12/29

*/

public class Test {

public static void main(String[] args) throws Exception {

// 创建一个文档

Document document = new Document(PageSize.A4, PDFBuilder.marginX, PDFBuilder.marginX, PDFBuilder.marginY, PDFBuilder.marginY);

// pdf输出流

OutputStream outputStream = new FileOutputStream("E:\\Users\\Desktop\\工作\\吊车组杆方案模板\\吊车组杆方案-test.pdf");

PdfWriter pdfWriter = PdfWriter.getInstance(document, outputStream);

// 添加页眉页脚

pdfWriter.setPageEvent(new PDFBuilder(new String[]{"新增糖厂坳配变解决110kV那前站10kV903线糖厂坡配变过载工程", "吊车组立电杆施工方案"}));

document.open();

// XMLWorkerHelper.getInstance().parseXHtml(

// pdfWriter,

// document,

// new ByteArrayInputStream(

// "

第一页1p开始

"

// .getBytes(StandardCharsets.UTF_8)),

// StandardCharsets.UTF_8);

// html生成pdf,注意文件要是utf-8编码

// 不显示中文页面注意添加字体

// 标签格式严格,注意使用在线格式化工具格式化html代码

XMLWorkerHelper.getInstance().parseXHtml(

pdfWriter,

document,

new FileInputStream("E:\\Users\\Desktop\\工作\\吊车组杆方案模板\\吊车组杆方案.htm"),

StandardCharsets.UTF_8);

document.close();

}

}

依赖

compile 'com.itextpdf:itextpdf:5.5.13'

compile 'com.itextpdf.tool:xmlworker:5.5.13'

compile 'com.itextpdf:itext-asian:5.2.0'

springMVC导出PDF,解决下载文件中文乱码

/**

* 导出PDF文件

* @param response

* @throws Exception

*/

@RequestMapping("apppdf")

public void exportPDF(HttpServletResponse response) throws Exception {

// ftl 路径

String path = "ftl/pdf/pdfTemplate.ftl";

// 读取网页

String html = Tools.readFileAllContent(path);

// 设置也没数据

String[] header = new String[]{"新增糖厂坳配变解决110kV那前站10kV903线糖厂坡配变过载工程", "吊车组立电杆施工方案"};

// 文件名

String filename = URLEncoder.encode(header[0] + ".pdf", "UTF-8");

// 文件名写入返回头,解决中文乱码

response.setHeader("Content-Disposition", "attachment;filename=" + filename + ";filename*=UTF-8''" + filename);

// 获取输出流

ServletOutputStream outputStream = response.getOutputStream();

// 生成pdf并写回

ExportPDFUtil.exportPDF(outputStream, html, header);

}

Java生成pdf设置两行页脚_Itextpdf 5 html生成pdf 页眉页脚相关推荐

  1. 100内奇数之和流程图_论文写作篇【03】——毕业论文排版保姆级教程之页眉/页脚设置...

    论文写作篇[01]--毕业论文排版痛点保姆级教程,请查收!论文写作篇[02]--毕业论文排版保姆级教程之图片/公式处理很多人都觉得页眉页脚设置非常头疼,其实如果弄清楚其中的原理,设置好各种各样要求的页 ...

  2. doc转pdf java不失真_java使用Aspose实现 word文档转pdf文件高效不失真

    java使用Aspose word文档转pdf功能实现 主要步骤 使用Aspose进行文档转换,首先引入相应的jar包到系统环境 项目resource下导入license.xml文件 使用Aspose ...

  3. java pdf 页眉_itext生成PDF设置页眉页脚的实例详解

    itext生成PDF设置页眉页脚的实例详解 实例代码: /** * ITextTest * iText生成PDF加入列表,注释等内容,同时设置页眉和页脚及页码等. */ package com.lab ...

  4. java导出pdf页码设置_itext生成PDF设置页眉页脚的实例详解

    itext生成pdf设置页眉页脚的实例详解 实例代码: /** * itexttest * itext生成pdf加入列表,注释等内容,同时设置页眉和页脚及页码等. */ package com.lab ...

  5. XMLWorkerHelper生成pdf文件添加页眉页脚

    一.Controller代码 import java.io.ByteArrayInputStream; import java.io.FileOutputStream; import java.io. ...

  6. itext总页数_itext 生成pdf文件添加页眉页脚

    原文来自:https://www.cnblogs.com/joann/p/5511905.html 我只是记录所有jar版本,由于版本冲突及不兼容很让人头疼的,一共需要5个jar, 其中itextpd ...

  7. web端生成pdf,前端生成pdf导出并自定义页眉页脚

    web前端生成pdf文档 描述 解决办法 技术栈 逻辑 直接上代码,后边再唠叨,注释写的还算清晰吧 用到的方法 模拟数据 最终版截图扔这儿一个 开始唠叨 需求 梳理 决定 缺点 描述 前端导出pdf文 ...

  8. c# .net生成pdf创建pdf,pdf签名pdf合并pdf增删页面页眉页脚批注旋转提取图片文本加水印等的类库SharpPDF

    SharpPDF是一款在.net平台实现PDF生成和编辑的解决方案级产品.可以在Winform,WPF,WebAPI,WebService,MVC,WebForm等多种类型项目中,轻松实现一行代码生成 ...

  9. Java 处理PDF文档(一):页眉页脚、水印、背景、附件

    前言 本文将介绍通过Java编程来处理PDF文档的一些方法,因为一篇文档的处理可能包括很多内容,比如文档安全性设置(水印.加密/解密).文本/图片/图形操作.注释.附件.域.文档转换(其他文件格式转为 ...

最新文章

  1. 大湾区第二次.NET技术交流会圆满成功
  2. cmd oracle sys登录_Oracle 数据库、表、方案的逻辑备份与恢复
  3. (对比PDF)Adobe Acrobat DC 离线对比PDF、draftable.com/compare 在线对比PDF
  4. Enterprise Library 4.1 Security Block 快速使用图文笔记
  5. Android HandlerThread和IntentService
  6. 微信小程序 图片处理的几个样式
  7. 数字化转型背景下的“新IT职业教育” | 职业教育系列报告(四)
  8. unpack php,php unpack函数怎么用
  9. 泰禾智能:智能改变未来,成就工业设备行业佼佼者
  10. 每周全球科技十大新闻(2021.6.21-6.27)
  11. 数据架构——数据架构
  12. 物联网平台的开发目标以及技术架构
  13. 键盘拆开重新安装步骤_如何拆解与并重新组装你的笔记本电脑
  14. 【Git】Git下载安装与使用(一)
  15. 汽车滤纸-市场现状及未来发展趋势
  16. 民宿预订小程序开发方案
  17. ThinkCMF引用第三方类库
  18. hdu6172(Array Challenge)-Berlekamp-Massey算法
  19. Pandas个人最强笔记
  20. PHP反序列化漏洞-从入门到提升

热门文章

  1. 关于Android 构建
  2. C#选择目录对话框FolderBrowserDialog
  3. hadoop job 未跑满资源_2018年第26周-解剖MapReduce Job
  4. JavaScript中的load事件的作用_史上最全的web前端面试题汇总及答案JavaScript之二(二)...
  5. 抗侧力构件弹性位移如何计算_穿心棒法盖梁施工计算书(工字钢)
  6. Linux无盘教程,如何无盘启动Linux
  7. 计算机在线作业office,16春地大《计算机级等级考试Office》在线作业二.doc
  8. mysql online ddl和pt_MySQL的onlineDDL及pt-osc
  9. MySQL设计一个图书馆数据库_请设计一个图书馆数据库
  10. php 安装rabbitmq拓展_【RabbitMQ】——centos7安装rabbitmq教程 以及 PHP开启rabbitmq扩展...