zoukankan      html  css  js  c++  java
  • Java编辑PDF写入文字 插入图片

    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){
    PdfReader reader = null;
    PdfStamper stamper = null; try{ //创建一个pdf读入流 reader = new PdfReader(pdfPath); //根据一个pdfreader创建一个pdfStamper.用来生成新的pdf. 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(); }
    finally {
    try {
    if (null != is)
    is.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    try {
    if (null != os)
    os.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    } }
    PDF开发包下载地址:http://pdfbox.apache.org/
  • 相关阅读:
    144环形链表
    83. 删除排序链表中的重复元素
    21合并两个有序链表
    PyCharm2020激活破解教程
    Python正课目录
    2条pip命令解决Python项目依赖的导出和导出
    pip离线安装模块
    Python正课149 —— luffy项目 User表的配置
    Python正课148 —— luffy项目 数据库配置
    解决:django中LookupError No installed app with label 'admin'
  • 原文地址:https://www.cnblogs.com/qinxu/p/8270310.html
Copyright © 2011-2022 走看看