Post updated by `MetaWeblog API` on Mon Nov 26 2018 23:47:52 GMT+0800 (中国标准时间)

添加条码页眉以及图片水印
1. 引入jar包
    1. itext-4.2.1.jar
    2. itext-asian-5.2.0.jar
    3. jbarcode-0.2.8.jar
2. 代码
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.imageio.ImageIO;
import org.apache.commons.io.IOUtils;
import org.jbarcode.JBarcode;
import org.jbarcode.encode.Code39Encoder;
import org.jbarcode.encode.InvalidAtributeException;
import org.jbarcode.paint.BaseLineTextPainter;
import org.jbarcode.paint.WideRatioCodedPainter;import com.lowagie.text.BadElementException;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Image;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfGState;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper; /**
* pdf工具
*
* @author 宋杰
* @date 2016-07-11 13:19:33
*/
public class PdfUtils {
/**
* 添加条码
* @param str 条码内容
* @param filepath pdf 文件绝对路径
* @param l_height 水平位置
* @param l_weight 垂直位置
*/public static void addString(String str,String filepath,int l_height,int l_weight){
BufferedImage localBufferedImage=null;
JBarcode jbcode = null;
try {
//1.创建条码图像
jbcode = new org.jbarcode.JBarcode(Code39Encoder.getInstance(), WideRatioCodedPainter.getInstance(),BaseLineTextPainter.getInstance());
localBufferedImage = jbcode.createBarcode(str);
ByteArrayOutputStream bao= new ByteArrayOutputStream();
ImageIO.write(localBufferedImage, "png", bao);
Image img = Image.getInstance(bao.toByteArray());
img.setAlignment(1); //居中显示
img.setAbsolutePosition(l_height, l_weight);//显示位置,根据需要调整
img.scalePercent(60); //显示为原条形码图片大小的比例,百分比
//2.创建pdf输入输出流
InputStream is = new FileInputStream(filepath);
PdfReader reader = new PdfReader(is);
OutputStream os = new FileOutputStream(filepath);
PdfStamper stamp = new PdfStamper(reader, os);
PdfContentByte contentByte = null;
int n = reader.getNumberOfPages();
//3. 设置透明度
PdfGState gs = new PdfGState();
gs.setFillOpacity(0.7f);
gs.setStrokeOpacity(0.7f); //4.在pdf每页右上角添加条码
for (int i = 1; i <= n; i++){
contentByte = stamp.getOverContent(i); // getOverContent 水印会把正文盖住 getUnderContent 水印会被正文的图片盖住
contentByte.setGState(gs);
contentByte.addImage(img);
//contentByte.addImage(Image.getInstance("D:/primeton/yunda/ide/eclipse/workspace/ydsoa/com.yd.soa.budget/src/webcontent/comm/logo.jpg"));
}
//5.关闭所有输入输出
reader.close();
stamp.close();
IOUtils.closeQuietly(bao);
IOUtils.closeQuietly(is);
IOUtils.closeQuietly(os);
} catch (InvalidAtributeException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (BadElementException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
} /**
* 添加图片水印 居中
* @param imagepath 图片文件绝对路径
* @param filepath pdf 文件绝对路径
*/public static void addWaterImage(String imagepath,String filepath){
InputStream is = null;
PdfReader reader = null;
OutputStream os = null;
PdfStamper stamp = null;
try {
//1.创建pdf输入输出流
is = new FileInputStream(filepath);
reader = new PdfReader(is);
os = new FileOutputStream(filepath);
stamp = new PdfStamper(reader, os); PdfContentByte contentByte = null;
int n = reader.getNumberOfPages();
//2. 设置透明度
PdfGState gs = new PdfGState();
gs.setFillOpacity(0.5f);
gs.setStrokeOpacity(0.5f);
//3. 读取图片
Image logo = Image.getInstance(imagepath);
//4.在pdf每页右上角添加条码
for (int i = 1; i <= n; i++){
contentByte = stamp.getUnderContent(i); // getOverContent 水印会把正文盖住 getUnderContent 水印会被正文的图片盖住
contentByte.setGState(gs);
Rectangle rectangle = reader.getPageSize(i);
float width = rectangle.getWidth();
float height = rectangle.getHeight();
logo.setAbsolutePosition(width/2-logo.getWidth()/2, height/2);
contentByte.addImage(logo);
}
} catch (IOException e) {
e.printStackTrace();
} catch (BadElementException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}finally{
//5.关闭所有输入输出
reader.close();
try {
stamp.close();
} catch (DocumentException e) {
} catch (IOException e) {
}
IOUtils.closeQuietly(is);
IOUtils.closeQuietly(os);
}
} public static void main(String[] args){
addString("YDHT-CG-20160525-001", "D:/111.pdf", 400, 795);
addWaterImage("com.yd.soa.budget/src/webcontent/comm/logo.jpg", "D:/111.pdf"); }
}

java操作pdf添加页眉条码添加水印图片的更多相关文章

  1. 用什么方法给PDF添加页眉页脚

    我们所看到的书本中都会设置好有页眉页脚,那么电子书想要添加页眉页脚要怎么操作呢,用什么方法可以在PDF中添加页眉页脚呢,今天就为大家分享一下,如何在电子文件中添加页眉页脚,想知道的小伙伴们就一起来看看 ...

  2. C# 给现有PDF文档添加页眉、页脚

    概述 页眉页脚是一篇完整.精致的文档的重要组成部分.在页眉页脚处,可以呈现的内容很多,如公司名称.页码.工作表名.日期.图片,如LOGO.标记等.在之前的文章中介绍了如何通过新建一页空白PDF页来添加 ...

  3. ABBYY FineReader 15 如何为PDF文档添加页眉页脚

    页眉.页脚是文档页面顶部或底部重复出现的文本信息.很多用户会习惯在文档页面的顶部与底部区域添加页眉.页脚来展现页码.文档标题.作者姓名.品牌名称等附加信息.而ABBYY FineReader 15(W ...

  4. C#word(2007)操作类--新建文档、添加页眉页脚、设置格式、添加文本和超链接、添加图片、表格处理、文档格式转化

    转:http://www.cnblogs.com/lantionzy/archive/2009/10/23/1588511.html 1.新建Word文档 #region 新建Word文档/// &l ...

  5. ★itext-为pdf文件添加页眉页脚 | 3步完成 |

    由于上一篇自定义生成pdf的功能需求又增加了,需要加上页码.所以本博客诞生了~ 1. 通过继承PdfPageEventHelper类,实现需要实现的方法 import com.lowagie.text ...

  6. 转 Java操作PDF之iText详细入门

    转 Java操作PDF之iText详细入门 2016年08月08日 11:06:00 阅读数:19490 iText是著名的开放项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成 ...

  7. openxml(二) 添加页眉,页脚

    openxml 中 word 文档的结构是如下图: 其中,页眉是 header,属于headerpart 部件,页脚是footer,属于footerpart 部件,图上还有其他的东西,之后会一一介绍. ...

  8. Java 操作pdf与excel

    java 操作pdf组件  itextpdf <dependency> <groupId>com.itextpdf</groupId> <artifactId ...

  9. itext 生成pdf文件添加页眉页脚

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

随机推荐

  1. CRF图像语义分割

    看了Ladicky的文章Associative Hierarchical CRFs for Object Class Image Segmentation,下载他主页的代码,文章是清楚了,但代码的RE ...

  2. log4j记录运行日志

    1.在工程中导入log4j-1.2.15.jar的jar包2.新建测试类 package control; import org.apache.log4j.Logger; import org.apa ...

  3. struts2 查 找总结

    0:38 2013/5/25 查 找 * * |-_-查找全部 Action层的home方法中的查找方法创建时不需要带个查找对象的参数 service层不用组织条件 dao层一条查询所有的hql语句S ...

  4. C++练习题

    1. 用面向对象的程序描述员工拥有的股票,股票有公司,价格,数量属性,且拥有展现基本数据,更新价格,买进,卖出操作,并具有比较两个股票对象股值大小的比较方法. 2. 用面向对象的程序描述一个栈的操作, ...

  5. centos 下 yum 安装 nginx 平滑切换安装到 Tengine

    ---恢复内容开始--- 据说淘宝的Tengine很牛X,所以我们今天也来玩玩,我们这里是某开放云的vps,现在已经安装好了nginx,现在我们要平滑切换到安装Tengine. 下载Tengine,解 ...

  6. Tomcat 性能调优 出现java.lang.OutOfMemoryError: PermGen space

    Tomcat 在部署应用中,Server报错:java.lang.OutOfMemoryError: PermGen space,问题就是Tomcat内存分配的太小了. 解决办法 1: 修改Tomca ...

  7. 将cocos2dx项目从VS移植到Eclipse

    本文转自:http://www.cnblogs.com/Z-XML/p/3349518.html 引言:我们使用cocos2d-x引擎制作了一款飞行射击游戏,其中创新性地融入了手势识别功能.但是我们在 ...

  8. Java 开发者不容错过的 12 种高效工具

    Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松.目前,市面上涌现出越来越多的高效编程工具.所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用.正在使用或 ...

  9. No Pain No Game

    hdu4630:http://acm.hdu.edu.cn/showproblem.php?pid=4630 题意:给定一个排序,求区间最大GCD. 题解:离散树状数组.首先把查询按左端点从大到小排序 ...

  10. CSS 背景-CSS background

    这里有个很好的样式学习网站:http://www.divcss5.com/rumen/r125.shtml 一.Css background背景语法   -   TOP CSS背景基础知识 CSS 背 ...