PDF文档盖章

概述

在pdf文档的最后一页,合适位置,添加印章图片。

maven依赖

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.7</version>
</dependency>

实现

类图

createImage (imageContent: byte[], width: float, height: float, left: float, bottom: float): com.itextpdf.text.Image

以指定的内容、大小、位置创建itextpdf的Image对象,这个对象将用于addImage方法。

createImage (imageContent: byte[]): com.itextpdf.text.Image

以指定的内容,默认的大小和位置(参考类图中定义的常量)创建itextpdf的Image对象,这个对象将用于addImage方法。

addImage (image: com.itextpdf.text.Image, is: InputStream, os: OutputStream): void

将图片添加到指定pdf文档的最后一页,将结果写到指定输出流。参数is提供原pdf的内容,参数os提供写出结果的流。

testAddDefaultImage (is: InputStream, os: OutputStream): void

测试用:将默认的图片添加到指定pdf文档的最后一页,将结果写到指定输出流。

代码

IStamperService

package cn.ljl.javaweb.demo.ckeditor.service;

import java.io.InputStream;
import java.io.OutputStream;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.itextpdf.text.Image;
/**
 * 设置图片、添加图片.
 * @author lijinlong
 *
 */
public interface IStamperService {
    public static final Log logger = LogFactory.getLog(IStamperService.class);

    /** 默认宽度 */
    float DEFAULT_WIDTH = 100f;
    /** 默认高度 */
    float DEFAULT_HEIGHT = 100f;
    /** 默认x坐标 */
    float DEFAULT_LEFT = 440f;
    /** 默认y坐标 */
    float DEFAULT_BOTTOM = 50f;

    /**
     * 根据指定的图片数据,封装成{@link Image}对象实例.
     *
     * @param imageContent
     *            图片内容
     * @param width
     *            图片宽度
     * @param height
     *            图片高度
     * @param left
     *            图片X坐标
     * @param top
     *            图片Y坐标
     */
    public Image createImage(byte[] imageContent, float width, float height,
            float left, float bottom);

    /**
     * 使用默认的数据创建{@link Image}对象实例.
     * @param imageContent 图像内容.
     * @return
     */
    public Image createImage(byte[] imageContent);

    /**
     * 加入图片.<br/>
     * 要求先调用{@link #setImage(byte[], float, float, float, float)}设置图片;<br/>
     * 从指定的输入流读入pdf内容,加入图片之后写到指定的输出流.<br/>
     * @param image 指定作为印章的{@link Image}实例.
     * @param is
     * @param os
     */
    public void addImage(Image image, InputStream is, OutputStream os);

    /**
     * 将默认的图片加入pdf.<br/>
     * 这个方法仅用于功能测试.
     * @param is
     * @param os
     */
    public void testAddDefaultImage(InputStream is, OutputStream os);
}

StamperServiceImpl

package cn.ljl.javaweb.demo.ckeditor.service;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;

import com.itextpdf.text.BadElementException;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;

public class StamperServiceImpl implements IStamperService {
    StamperServiceImpl() {
        super();
    }

    @Override
    public Image createImage(byte[] imageContent, float width, float height, float left,
            float bottom) {
        Image image = null;
        try {
            image = Image.getInstance(imageContent);
        } catch (BadElementException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        image.scaleAbsolute(width, height);
        image.setAbsolutePosition(left, bottom);

        return image;
    }

    @Override
    public Image createImage(byte[] imageContent) {
        Image image = createImage(imageContent, DEFAULT_WIDTH, DEFAULT_HEIGHT,
                DEFAULT_LEFT, DEFAULT_BOTTOM);
        return image;
    }

    @Override
    public void addImage(Image image, InputStream is, OutputStream os) {
        PdfReader reader = null;
        PdfStamper stamper = null;
        try {
            reader = new PdfReader(is);
            int nop = reader.getNumberOfPages();
            stamper = new PdfStamper(reader, os);
            PdfContentByte content = stamper.getOverContent(nop);
            content.addImage(image);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        } finally {
            try {
                if (stamper != null) stamper.close();
            } catch (DocumentException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (reader != null) reader.close();
        }
    }

    /** 测试图片 */
    private static final String PATH_IMAGE = "ckeditor/stamper/signature.gif";
    @Override
    public void testAddDefaultImage(InputStream is, OutputStream os) {
        InputStream imageIs = StamperServiceImpl.class.getClassLoader().getResourceAsStream(PATH_IMAGE);
        byte[] imageContent = null;
        try {
            int length = imageIs.available();
            imageContent = new byte[length];
            imageIs.read(imageContent);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                imageIs.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        Image img = createImage(imageContent);
        addImage(img, is, os);
    }
}

印章图片

盖章用的图片需要经过特殊处理(应该是在透明度方面进行处理),否则会覆盖下面的内容。这里提供一张测试用的图片:

时间: 2024-10-12 23:41:34

PDF文档盖章的相关文章

教你如何将word转换成PDF文档使用

对于各种不同文档格式的转换对文字工作者来说可谓是"家常便饭",而最让人头疼的莫过于office文档与pdf文档之间的互相转换.有时候遇到需要文字编辑的就得转换成word文档,有时候要成稿传输了,又得转换成pdf格式,这来回之间的转换,如果没有一个好的转换器作为帮手,还真的是会让人抓狂. 今天小编和大家介绍一款小编平时用的转换器软件.除了将word转成pdf,更重要的是能够对一些常见类型的文档转换格式.像word.ppt.excel.pdf等都可以转为你需要的文档格式.另外还能对文档进行

java导出pdf文档

java导出pdf文档,多是iText实现的,可以创建pdf文档,并向文档写入内容. 1 导入包:itext-2.0.6.jar       itext必须使用的包. iTextAsian.jar      向pdf写入中文必须的包. 2 代码: package com.exp.pdf; import java.awt.Color; import java.io.FileOutputStream; import com.lowagie.text.Document; import com.lowa

PHP制作pdf文档方法

本篇博客是在看完 php+mysql web书以后自己的测试代码,虽然是测试代码,但不是简单的粘贴复制,为了学习thinkPHP框架,自己就用这个来做的,而且这本书已经有年头了.原书的代码中的方法,在查阅手册的时候,很多都已经弃用了,所以分享给大家还是有必要的.php制作pdf文档的方法有很多,我写的只是其中一种,大家有时间可以多看看.好了,进入正题 准备工作: 1.php手册(在线php关于pdf地址: http://php.net/manual/zh/intro.pdf.php ) 2.PD

CentOS6.4下使用默认的文档查看器打开PDF文档乱码的解决方案

 最近在CentOS6.4下使用其默认的文档查看器打开PDF文档时出现乱码的方块,有两种方法可以解决.    方法一:修改/etc/fonts/conf.d/49-sansserif.conf文件,如下: [html] view plaincopy <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <!-- If the f

PDF文档创建组件Spire.PDF for .NET

Spire.PDF for .NET控件是一款由e-iceblue公司开发的专业性的PDF文档创建组件.它能够使用户在不用Adobe Acrobat和其他外部控件的情况下,运用.NET 应用程序阅读,编写和操纵PDF 文档.Spire.PDF for .NET不仅可以运用在服务端比如:ASP.NET 或者其他环境,还可以应用在Windows Forms 应用程序中.Spire.PDF for .NET 适合应用于所有常见的坏境中,比如:创建好的PDF文档可以存到磁盘中, 还可以在Windows

Java生成PDF文档(表格、列表、添加图片等)

需要的两个包及下载地址: (1)iText.jar:http://download.csdn.net/source/296416 (2)iTextAsian.jar(用来进行中文的转换):http://download.csdn.net/source/172399 代码如下: 1 import java.awt.Color; 2 import java.io.FileOutputStream; 3 import com.lowagie.text.Cell; 4 import com.lowagi

PDF文档如何编辑,怎样设置PDF文本字体

PDF文件怎么编辑,如何设置字体?很多人都会编辑word.ppt这类文档,但是对于PDF格式的文档很少有人知道怎样去编辑修改,下面就来说说怎样编辑PDF,设置文本的字体. 在PDF阅读器中无法对文档内容进行编辑修改,所以要先用PDF编辑器来打开文档. 打开PDF文档后点击编辑内容工具,文档内容就可以进行编辑操作了. 设置字体,对文本格式进行修改,需要打开属性窗格.如果没有该窗格,可以选择"视图"-"其他窗格"-"属性窗格"来打开. 选择文本内容后

手机打开PDF文档中文英文支持(乱码问题)解决攻略

电子书的优点很多,随时随地阅读,无论白天黑夜走路坐车都能阅读:想确认一下某句话是不是这本书里的,搜索一下就可以知道:搬家也不用发愁,几万本书带在身上,依然轻松步行.我买了一台平板主要动因就是为了看书,但是有时候会遇到一些问题:一本PDF格式的电子书在电脑上打开时显示正常,用手机打开却出现乱码.通过网络查询,找到了解决办法.这里分享给大家.过程不算很麻烦.一本书2-3分钟搞定. PDF文件自身是可以嵌入字体的,这样就可以在任何语言的设备上直接阅读,而不用考虑该设备上是否有相应的字体.但是PDF文件

专业性的PDF文档创建组件 Spire.PDF for .NET

Spire.PDF for .NET控件是一款由e-iceblue公司开发的专业性的PDF文档创建组件.它能够使用户在不用Adobe Acrobat和其他外部控件的情况下,运用.NET 应用程序阅读,编写和操纵PDF 文档.Spire.PDF for .NET不仅可以运用在服务端比如:ASP.NET 或者其他环境,还可以应用在Windows Forms 应用程序中.Spire.PDF for .NET 适合应用于所有常见的坏境中,比如:创建好的PDF文档可以存到磁盘中, 还可以在Windows