itext对水印图片的旋转、放大、缩小等操作的示例

标签: itext 水印 图片 | 发表时间:2014-07-24 17:17 | 作者:fuanyu
出处:http://www.iteye.com
package test1;

import java.awt.Color;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;

import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Font;
import com.lowagie.text.HeaderFooter;
import com.lowagie.text.Image;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Phrase;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfGState;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;
import com.lowagie.text.pdf.PdfWriter;

public class PdfConvertor {
 

   // txt原始文件的路径
    private static final String txtFilePath = "c:/test/01.txt";
    // 生成的pdf文件路径
    private static final String pdfFilePath = "c:/test/01.pdf";
    // 添加水印图片路径
    private static final String imageFilePath = "c:/test/images/psue.jpg";
    // 生成临时文件前缀
    private static final String prefix = "tempFile";
    // 所有者密码
    private static final String OWNERPASSWORD = "123456";

    
    public static void generatePDFWithTxt(String txtFile, String pdfFile,
            String userPassWord, String waterMarkName, int permission) {
        try {
            // 生成临时文件
            File file = File.createTempFile(prefix, ".pdf");
            // 创建pdf文件到临时文件
            if (createPDFFile(txtFile, file)) {
                // 增加水印和加密
                waterMark(file.getPath(), pdfFile, userPassWord, OWNERPASSWORD,
                        waterMarkName, permission);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    
    private static boolean createPDFFile(String txtFilePath, File file) {
        // 设置纸张
        Rectangle rect = new Rectangle(PageSize.A4);
        // 设置页码
        HeaderFooter footer = new HeaderFooter(new Phrase("页码:", PdfConvertor
                .setChineseFont()), true);
        footer.setBorder(Rectangle.NO_BORDER);
        // step1
        Document doc = new Document(rect, 50, 50, 50, 50);
        doc.setFooter(footer);
        try {
            FileReader fileRead = new FileReader(txtFilePath);
            BufferedReader read = new BufferedReader(fileRead);
            // 设置pdf文件生成路径 step2
            PdfWriter.getInstance(doc, new FileOutputStream(file));
            // 打开pdf文件 step3
            doc.open();
            // 实例化Paragraph 获取写入pdf文件的内容,调用支持中文的方法. step4
            while (read.ready()) {
                // 添加内容到pdf(这里将会按照txt文件的原始样式输出)
                doc.add(new Paragraph(read.readLine(), PdfConvertor
                        .setChineseFont()));
            }
            // 关闭pdf文件 step5
            doc.close();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    
    private static void waterMark(String inputFile, String outputFile,
            String userPassWord, String ownerPassWord, String waterMarkName,
            int permission) {
        try {
            PdfReader reader = new PdfReader(inputFile);
            PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(
                    outputFile));
            // 设置密码
            //stamper.setEncryption(userPassWord.getBytes(), ownerPassWord.getBytes(), permission, false);
            BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",
                    BaseFont.NOT_EMBEDDED);
            int total = reader.getNumberOfPages() + 1;
            Image image = Image.getInstance(imageFilePath);
            image.setAbsolutePosition(50, 400);//坐标
            image.setRotation(-20);//旋转 弧度
            image.setRotationDegrees(-45);//旋转 角度
//            image.scaleAbsolute(200,100);//自定义大小
            image.scalePercent(50);//依照比例缩放
            PdfContentByte under;
            int j = waterMarkName.length();
            char c = 0;
            int rise = 0;
            for (int i = 1; i < total; i++) {
                rise = 500;
                under = stamper.getUnderContent(i);
                // 添加图片
                under.addImage(image);
                PdfGState gs = new PdfGState();
                gs.setFillOpacity(0.2f);// 设置透明度为0.2
                under.setGState(gs);
                under.beginText();
                under.setColorFill(Color.CYAN);
                under.setFontAndSize(base, 30);
                // 设置水印文字字体倾斜 开始
                if (j >= 15) {
                    under.setTextMatrix(200, 120);
                    for (int k = 0; k < j; k++) {
                        under.setTextRise(rise);
                        c = waterMarkName.charAt(k);
                        under.showText(c + "");
                        rise -= 20;
                    }
                } else {
                    under.setTextMatrix(180, 100);
                    for (int k = 0; k < j; k++) {
                        under.setTextRise(rise);
                        c = waterMarkName.charAt(k);
                        under.showText(c + "");
                        rise -= 18;
                    }
                }
                // 字体设置结束
                under.endText();
                // 画一个圆
                // under.ellipse(250, 450, 350, 550);
                // under.setLineWidth(1f);
                // under.stroke();
            }
            stamper.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    
    private static Font setChineseFont() {
        BaseFont base = null;
        Font fontChinese = null;
        try {
            base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",
                    BaseFont.EMBEDDED);
            fontChinese = new Font(base, 12, Font.NORMAL);
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return fontChinese;
    }

    public static void main(String[] args) {
        generatePDFWithTxt(txtFilePath, pdfFilePath, "123", "", 16);
    }
}

 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [itext 水印 图片] 推荐:

Itext PDF生成 加水印图片文字

- - CSDN博客研发管理推荐文章
由于项目中用到,所以网上找了很多,但或多或少有些问题,我整理更新了一下. import java.io.*; import com.itextpdf.text.*; import com.itextpdf.text.pdf.*; /** * PDF生成 */ public class PDFBuild {.

itext对水印图片的旋转、放大、缩小等操作的示例

- - 行业应用 - ITeye博客
// txt原始文件的路径. // 创建pdf文件到临时文件. HeaderFooter footer = new HeaderFooter(new Phrase("页码:", PdfConvertor. // 设置pdf文件生成路径 step2. // 打开pdf文件 step3. // 实例化Paragraph 获取写入pdf文件的内容,调用支持中文的方法.

Java图片加水印

- - CSDN博客推荐文章
pressText("真的好想你","3.jpg","宋体",Font.BOLD,0,20,200,200);. 作者:cjc211322 发表于2014-12-4 8:35:45 原文链接. 阅读:59 评论:0 查看评论.

iText 5.2.0 发布,PDF 开发包

- - 脚本爱好者
iText 5.2.0 发布了,该版本大部分的改进都集中在 PDF 解析上,支持特殊的编码和多种国外语言,修复了解析错误以及对一些错误的 PDF 语法更加适应,此外 iText 现在可支持生成超过 2G 的文件,减少对 java.awt 包的依赖,可更方便在 Android 平台和 GAE 中使用.

iText 5.4.0 发布,Java 的 PDF 开发包

- - 开源中国社区最新新闻
iText 5.4.0 除了修复很多 bug 之外,主要是侧重于创建结构化的 PDF 文档,当使用 Document, Paragraph, PdfPTable 创建 PDF 时可自动进行标识,标识的 PDF 是更好支持 PDF/UA 和 PDF/A 兼容性的第一步. iText是一个非常著名的能够快速产生PDF文件的Java类库.

基于iText和flying saucer结合freemark生成pdf 范例

- - CSDN博客推荐文章
项目主页:http://git.oschina.net/lemonzone2010/doc-render. 最近公司需要生成PDF,基于这个需求简单学习了下IText 和 flying saucer,对于这两个技术.我先简单介绍下:. Flying Saucer和iText介绍:.     A.  iText是一个生成PDF文档的开源java库,能够动态从XML或者数据库生成PDF,同时它具备PDF文档的绝大多数属性(比如加密……),支持java,C#等.

Java iText使用PDF模板生成PDF文档

- - CSDN博客综合推荐文章
我们系统需要生成一个可以打印的PDF文档,老板给了我一个Word文档,按照这个Word文档的格式生成PDF文档. 第一步:下载AdobeAcrobat DC,必须使用这个来制作from域. 第二步:使用AdobeAcrobat DC将Word导成PDF文档. 第三步:由于还要加水印的效果,所以还是使用AdobeAcrobat DC来添加水印,非常方便;.

使用nginx为图片进行水印操作

- - ITeye博客
打水印版nginx安装过程(centos). 下载 wget http://nginx.org/download/nginx-1.9.6.tar.gz. (2)解压 tar -zxvf nginx-1.9.6.tar.gz. (3) 进入目录 cd nginx-1.9.6. 点击download zip下载.

Java使用google的thumbnailator工具对图片压缩水印等做处理

- - 孟飞阳的博客
今天给大家分享一个非常好用的工具thumbnailator. Thumbnailator是一个非常好的图片开源工具. net.coobird thumbnailator 0.4.8 .

分享图片

- 糖果 - 变态辣椒的时政漫画