使用iText生成带底图的PDF

package com.wzh.itext;

import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * @date 2015-3-17 12:48:24
 * @author y
 * @desc
 */
public class ItextUtil {

    /**
     * 生成带底图的PDF字节流
     * @param swdjz
     * @return
     */
    public static byte[] createPdfBytes(Swdjz swdjz){
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte []content = null;

        Document doc = new Document(PageSize.A4.rotate(), 50, 50, 50, 50); //创建文档 ,A4纸,横屏 

         try {
            PdfWriter pw = PdfWriter.getInstance(doc, baos);
            doc.open();

            //解决中文不显示问题
            BaseFont bfChinese = BaseFont.createFont("STSong-Light","UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            //定义字体
            Font fontChinaTitle14 = new Font(bfChinese, 14, Font.BOLD);
            Font fontChina16 = new Font(bfChinese, 16);
            Font fontChina14 = new Font(bfChinese, 14);

            //加载电子税务登记证背景图片
            Image imgBg = Image.getInstance(swdjz.getBgPath());
            imgBg.setAbsolutePosition(0, 0); //设置图片位置
            imgBg.scaleAbsolute(842, 595);//设置图片大小
            doc.add(imgBg);

            // 空行
            Paragraph blank = new Paragraph(" ");
            doc.add(blank);
            doc.add(blank);
            doc.add(blank);
            doc.add(blank);
            doc.add(blank);

            /*右上角信息*/
            //档案号
            Chunk c01 = new Chunk(swdjz.getDanh(), fontChina16);
            Paragraph snoParagraph01 = new Paragraph();
            snoParagraph01.add(c01);
            snoParagraph01.setAlignment(Element.ALIGN_RIGHT);
            snoParagraph01.setIndentationRight(30);
            snoParagraph01.setSpacingBefore(10);
            doc.add(snoParagraph01);
            //纳税人识别号
            Chunk c02 = new Chunk(swdjz.getNsrsbh(), fontChina16);
            Paragraph snoParagraph02 = new Paragraph();
            snoParagraph02.add(c02);
            snoParagraph02.setAlignment(Element.ALIGN_RIGHT);
            snoParagraph02.setIndentationRight(28);
            doc.add(snoParagraph02);

            doc.add(blank);
            doc.add(blank);

            /*正文*/
            //纳税人名称
            Chunk c03 = new Chunk(swdjz.getNsrmc(), fontChina16);
            Paragraph snoParagraph03 = new Paragraph();
            snoParagraph03.add(c03);
            snoParagraph03.setIndentationLeft(220);
            doc.add(snoParagraph03);

            doc.add(blank);

            //法定代表人
            Chunk c04 = new Chunk(swdjz.getFddbr(), fontChina16);
            Paragraph snoParagraph04 = new Paragraph();
            snoParagraph04.add(c04);
            snoParagraph04.setIndentationLeft(220);
            doc.add(snoParagraph04);

            doc.add(blank);

            //地址
            Chunk c05 = new Chunk(swdjz.getDz(), fontChina16);
            Paragraph snoParagraph05 = new Paragraph();
            snoParagraph05.add(c05);
            snoParagraph05.setIndentationLeft(220);
            snoParagraph05.setSpacingBefore(3);
            doc.add(snoParagraph05);

            doc.add(blank);

            //登记注册类型
            Chunk c06 = new Chunk(swdjz.getDjzclx(), fontChina16);
            Paragraph snoParagraph06 = new Paragraph();
            snoParagraph06.add(c06);
            snoParagraph06.setIndentationLeft(220);
            snoParagraph06.setSpacingBefore(4);
            doc.add(snoParagraph06);

            doc.add(blank);

            //经营范围
            Chunk c07 = new Chunk(swdjz.getJyfw(), fontChina14);
            Paragraph snoParagraph07 = new Paragraph();
            snoParagraph07.add(c07);
            snoParagraph07.setIndentationLeft(220);
            doc.add(snoParagraph07);

            doc.add(blank);

            //批准设立机关
            Chunk c08 = new Chunk(swdjz.getPzsljg(), fontChina16);
            Paragraph snoParagraph08 = new Paragraph();
            snoParagraph08.add(c08);
            if(swdjz.getJyfw().length()>37){
                snoParagraph08.setSpacingBefore(-10);
            }else{
                snoParagraph08.setSpacingBefore(4);
            }
            snoParagraph08.setIndentationLeft(220);
            doc.add(snoParagraph08);

            doc.add(blank);

            //扣缴义务
            Chunk c09 = new Chunk(swdjz.getKjyw(), fontChina16);
            Paragraph snoParagraph09 = new Paragraph();
            snoParagraph09.add(c09);
            if(swdjz.getJyfw().length()<38){
                snoParagraph09.setSpacingBefore(4);
            }
            snoParagraph09.setIndentationLeft(220);
            doc.add(snoParagraph09);

            doc.add(blank);
            doc.add(blank);
            doc.add(blank);

            /*右下角*/
            //发证日期
            Chunk cYear = new Chunk("一三     ", fontChina16);
            Chunk cMonth = new Chunk("   八   ", fontChina16);
            Chunk cDay = new Chunk("   十二   ", fontChina16);

            Paragraph snoParagraph10 = new Paragraph();
            snoParagraph10.add(cYear);
            snoParagraph10.add(cMonth);
            snoParagraph10.add(cDay);
            snoParagraph10.setSpacingBefore(4);
            snoParagraph10.setIndentationRight(45);
            snoParagraph10.setAlignment(Element.ALIGN_RIGHT);
            doc.add(snoParagraph10);

            doc.close();

            content = baos.toByteArray();

        } catch (FileNotFoundException ex) {
            Logger.getLogger(ItextUtil.class.getName()).log(Level.SEVERE, null, ex);
        } catch (DocumentException ex) {
            Logger.getLogger(ItextUtil.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(ItextUtil.class.getName()).log(Level.SEVERE, null, ex);
        }finally{
            try {
                baos.close();
            } catch (IOException ex) {
                Logger.getLogger(ItextUtil.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        return content;
    }

}

Servlet 中:

 response.setContentType("application/pdf");

        ServletOutputStream sos = response.getOutputStream();

        response.setHeader("Content-Disposition", "attachment;filename="
                        + new String(swdjz.getNsrmc().getBytes(), "iso-8859-1"));

        byte [] content = ItextUtil.createPdfBytes(swdjz);

        BufferedOutputStream bos = new BufferedOutputStream(sos);
        bos.write(content);

        bos.close();
时间: 2024-08-30 10:58:56

使用iText生成带底图的PDF的相关文章

MWeb 1.2 版更新说明和用 wkhtmltopdf 生成带目录的 PDF 和自定预览 CSS

新增 可选择在输入时是否自动插入列表编号,可以在 Preferences --> General --> Auto insert list and blockquote prefix 开启和关闭. 分享功能的 Copy as image.Save as image.Save as PDF 等现在统一都用HTML的样式了,另外还专门为分享到微薄等SNS生成的图片做了优化,比如说如果有代码,会强制换行. 新增把文档库里的单个或多个文档导出为HTML或者PDF.使用方法为:选择要导出的文档(可多选)

通过Itext生成PDF实例-操作超全

要生成test1中的PDF用Itext怎么是实现呢,具体代码如下: import java.io.FileOutputStream; import java.io.IOException; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Element; import com.itextpdf.text.Font; import com.

java使用iText生成pdf表格

转载地址:http://www.open-open.com/code/view/1424011530749 首先需要你自己下载itext相关的jar包并添加引用,或者在maven中添加如下引用配置: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <dependency>     <groupId>com.lowagie</groupId>     <artifactId>iText</artifactId>  

itext生成PDF文件报错“Font &#39;STSong-Light&#39; with &#39;UniGB-UCS2-H&#39; is not recognized.”

最近需要写一个抽取表结构的工具,类似于powerdesigner中的表图,其中有一步用到了itext这个第三方jar包来生成pdf文件,碰到了一个问题,记录于此. 问题描述: 工程使用maven构建,pom.xml中对于jar包的定义如下: <dependency> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> <version>2.1.7</vers

Java Itext 生成PDF文件

利用Java Itext生成PDF文件并导出,实现效果如下: PDFUtil.java package com.jeeplus.modules.order.util; import java.io.OutputStream; import java.math.BigDecimal; import java.net.URL; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.Arr

Itext简绍及操作PDF文件

iText简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转化为PDF文件. iText的安装非常方便,下载iText.jar文件后,只需要在系统的CLASSPATH中加入iText.jar的路径,在程序中就可以使用iText类库了. iTextAsian.jar (亚洲语言包,可以使用中文) 需要添加到工程中 使用时需要在系统的环境变量Path中加入iTe

实战动态PDF在线预览及带签名的PDF文件转换

开篇语: 最近工作需要做一个借款合同,公司以前的合同都是通过app端下载,然后通过本地打开pdf文件,而喜欢创新的我,心想着为什么不能在线H5预览,正是这个想法,说干就干,实践过程总是艰难的,折腾了3,4天的时间,熬了两个凌晨3,4点,其中的艰辛.以及各中的曲折.压力只有自己能体会,项目上线后心里想着我要写一篇博文,一是总结一下经验,其次就是和大家分享自己这一路走来的的心得体会,欢迎吐槽!,废话不多说,来点干货! PDF在线预览实现: 8个实现在线浏览PDF文件的实用插件,笔者选择pdf.js,

CA证书应用二:制作带数字签名的PDF文档

接上期讲述了"CA证书应用一:Outlook发送邮件时,为邮件添加数字签名"之后,本期讲述如何给PDF文档添加数字签名. 大家都知道,如果想让一篇文档不再被修改,往往会制作为PDF格式.但是现在PDF文档很容易转化为Word格式,从而导致文档能进行第二次编辑.所以,如果想要确保PDF没有被别人修改,光制作成普通的PDF格式还不行,需要使用CA证书添加数字签名.具体实现方法如下: 一.安装Adobe Acrobat X Pro 制作PDF文档,当然需要先安装Adobe的PDF文档编辑工具

Servlet动态验证码的生成-带数字和字母

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 一.实现的思路: (1)首先,需要创建一个Servlet.该Servlet通过字节型响应给客户端返回一个图片,该图片是通过JDK中Java 2D的类库来生成一个图片.图片的生成是依靠一个随机数来完成,然后将这个随机数写成图片格式.最后在Session将这个随机的字符串的状态保持住,以便在用户填写后进行对比. (2)其次,在需要加入验证码的JSP页面中,通过<img src="生成验证码