java操作pdf添加页眉条码添加水印图片
Post updated by `MetaWeblog API` on Mon Nov 26 2018 23:47:52 GMT+0800 (中国标准时间)
- 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添加页眉条码添加水印图片的更多相关文章
- 用什么方法给PDF添加页眉页脚
我们所看到的书本中都会设置好有页眉页脚,那么电子书想要添加页眉页脚要怎么操作呢,用什么方法可以在PDF中添加页眉页脚呢,今天就为大家分享一下,如何在电子文件中添加页眉页脚,想知道的小伙伴们就一起来看看 ...
- C# 给现有PDF文档添加页眉、页脚
概述 页眉页脚是一篇完整.精致的文档的重要组成部分.在页眉页脚处,可以呈现的内容很多,如公司名称.页码.工作表名.日期.图片,如LOGO.标记等.在之前的文章中介绍了如何通过新建一页空白PDF页来添加 ...
- ABBYY FineReader 15 如何为PDF文档添加页眉页脚
页眉.页脚是文档页面顶部或底部重复出现的文本信息.很多用户会习惯在文档页面的顶部与底部区域添加页眉.页脚来展现页码.文档标题.作者姓名.品牌名称等附加信息.而ABBYY FineReader 15(W ...
- C#word(2007)操作类--新建文档、添加页眉页脚、设置格式、添加文本和超链接、添加图片、表格处理、文档格式转化
转:http://www.cnblogs.com/lantionzy/archive/2009/10/23/1588511.html 1.新建Word文档 #region 新建Word文档/// &l ...
- ★itext-为pdf文件添加页眉页脚 | 3步完成 |
由于上一篇自定义生成pdf的功能需求又增加了,需要加上页码.所以本博客诞生了~ 1. 通过继承PdfPageEventHelper类,实现需要实现的方法 import com.lowagie.text ...
- 转 Java操作PDF之iText详细入门
转 Java操作PDF之iText详细入门 2016年08月08日 11:06:00 阅读数:19490 iText是著名的开放项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成 ...
- openxml(二) 添加页眉,页脚
openxml 中 word 文档的结构是如下图: 其中,页眉是 header,属于headerpart 部件,页脚是footer,属于footerpart 部件,图上还有其他的东西,之后会一一介绍. ...
- Java 操作pdf与excel
java 操作pdf组件 itextpdf <dependency> <groupId>com.itextpdf</groupId> <artifactId ...
- itext 生成pdf文件添加页眉页脚
原文来自:https://www.cnblogs.com/joann/p/5511905.html 我只是记录所有jar版本,由于版本冲突及不兼容很让人头疼的,一共需要5个jar, 其中itextpd ...
随机推荐
- C语言基础知识-循环结构
用while打印出1~100之间7的倍数 int i = 1; while循环是当条件表达式的结果为真时,执行大括号里面的循环体,重复执行直到条件表达式的结果为假时结束循环. w ...
- Unity3d Shader开发(四)UsePass ,GrabPass ,SubShader Tags
(一)UsePass 命令 使用 来自另一个着色器的命名通道. Syntax 语法 UsePass "Shader/Name" 插入所有来自给定着色器中的给定名字的通道.Shade ...
- 利用 runtime,解决多次点击相同 button,导致重复跳转的问题-b
当app有点卡的时候,多次点击相同的button,经常出现,跳转了N次相同的界面(比如闲鱼) 解决办法 用运行时和分类,替换 UIControl 响应事件,根据响应的间隔时间来判断是否执行事件. 详细 ...
- nodejs 第一次使用
在win7下安装与使用 1 nodejs官网下载,安装 https://nodejs.org/ 2 下载最新的 npm,在E:\nodejs\中解压 http://nodejs.org/dist/ ...
- 记一个菜鸟在Linux上部署Tomcat的随笔
以前都只是在园子里找各种资料.文档.各种抱大腿,今天是第一次进园子里来添砖加瓦,实话说,都不知道整些啥东西上来,就把自己在Linux上搭建Tomcat的过程记录下来,人笨,请各位大虾们勿喷. 虽然做开 ...
- [转载]MongoDB开发学习(2)索引的基本操作
索引能够极大的提高查询的效率.在数据库中简历索引必不可少. 在MongoDB中可以很轻松的创建索引. 默认索引_id_ 开启MongoDB服务器,创建数据库cnblogs,创建集合Users .(关于 ...
- <算法竞赛入门经典> 第8章 贪心+递归+分治总结
虽然都是算法基础,不过做了之后还是感觉有长进的,前期基础不打好后面学得很艰难的,现在才慢慢明白这个道理. 闲话少说,上VOJ上的专题训练吧:http://acm.hust.edu.cn/vjudge/ ...
- UVALive 3211 Now or later
每架飞机有早晚起降两种方式,给定n架飞机两种方式的起落时间,为每架飞机安排起落时间(早或晚),使得所有飞机起降时间按照早到晚的顺序之间的间隔时间最小值尽量大. 分析: 最小时间尽量大应该采用二分的方法 ...
- iOS开发UI篇—Quartz2D简单使用(一)
iOS开发UI篇—Quartz2D简单使用(一) 一.画直线 代码: 1 // 2 // YYlineview.m 3 // 03-画直线 4 // 5 // Created by apple on ...
- Java集合类之LinkedList链表
package com.test; import java.util.*; public class Demo7_3 { public static void main(String[] args) ...