码迷,mamicode.com
首页 > 编程语言 > 详细

Java编辑PDF写入文字 插入图片

时间:2018-01-11 22:13:06      阅读:751      评论:0      收藏:0      [点我收藏+]

标签:name   rgb   操作   idt   position   ring   hello   not   exce   

package com.test;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.*;
import org.junit.Test;

import java.io.FileOutputStream;

/**
 *编辑PDF
 */
public class PDFTest {
    @Test
    public void testPDF(){
        generatePDF("D:/1.pdf","D:/2.pdf","D:1.png");
    }


    /**
     * 生成新的PDF
     * @param pdfPath 要编辑的PDF路径
     * @param newPDFPath 生成新的PDF路径
     * @param imagePath 插入图片路径
     */
    public void generatePDF(String pdfPath,String newPDFPath,String imagePath){
        try{
            //创建一个pdf读入流
            PdfReader reader = new PdfReader(pdfPath);
            //根据一个pdfreader创建一个pdfStamper.用来生成新的pdf.
            PdfStamper stamper = new PdfStamper(reader,new FileOutputStream(newPDFPath));
            //这个字体是itext-asian.jar中自带的 所以不用考虑操作系统环境问题.
            BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            //baseFont不支持字体样式设定.但是font字体要求操作系统支持此字体会带来移植问题.
            Font font = new Font(bf,10);
            font.setStyle(Font.BOLD);
            font.getBaseFont();
            PdfContentByte over;
            //页数是从1开始的
            for (int i=1; i<=reader.getNumberOfPages(); i++){
                //获得pdfstamper在当前页的上层打印内容.也就是说 这些内容会覆盖在原先的pdf内容之上.
                over = stamper.getOverContent(i);
                //当前页的下层打印内容  按自己需求选择
                //over = stamper.getUnderContent(i);
                //用pdfreader获得当前页字典对象.包含了该页的一些数据.比如该页的坐标轴信息.
                PdfDictionary p = reader.getPageN(i);
                //拿到mediaBox 里面放着该页pdf的大小信息.
                PdfObject po =  p.get(new PdfName("MediaBox"));
                //po是一个数组对象.里面包含了该页pdf的坐标轴范围.
                PdfArray pa = (PdfArray) po;
                //开始写入文本
                over.beginText();
                //设置字体和大小
                over.setFontAndSize(font.getBaseFont(), 90);
                //设置字体颜色
                over.setColorFill(new BaseColor(0,110,107,100));
                com.itextpdf.text.pdf.PdfGState gState = new PdfGState();
                gState.setStrokeOpacity(0.1f);
                over.setGState(gState);
                //要输出的text          对齐方式          写的字        设置字体的输出位置  字体是否旋转
                over.showTextAligned(0,"HELLO WORLD",0,100,100);
                over.endText();
                //创建一个image对象.
                Image image = Image.getInstance(imagePath);
                //设置image对象的输出位置pa.getAsNumber(pa.size()-1).floatValue() 是该页pdf坐标轴的y轴的最大值  0, 0, 841.92, 595.32
                image.setAbsolutePosition(0,pa.getAsNumber(pa.size()-1).floatValue());
                //设置插入的图片大小
                image.scaleToFit(50,50);
                over.addImage(image);
                //画一个圈.
                over.setRGBColorStroke(0xFF, 0x00, 0x00);
                over.setLineWidth(5f);
                over.ellipse(250, 450, 350, 550);
                over.stroke();
            }
            stamper.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
PDF开发包下载地址:http://pdfbox.apache.org/

Java编辑PDF写入文字 插入图片

标签:name   rgb   操作   idt   position   ring   hello   not   exce   

原文地址:https://www.cnblogs.com/qinxu/p/8270310.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!