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文件图片_Java编辑PDF写入文字 插入图片相关推荐

  1. html图片在wps中不显示文字大小,WPS文字插入图片显示不全怎么办 WPS文字插入图片显示不完整的解决方法...

    在wps文字编辑文档时,如果我们在使用时插入图片显示不全,这种情况我们该怎么解决呢?想必有不少的用户遇到过这种问题,下面教程之家网为大家带来WPS文字插入图片显示不完整的解决方法,不知道怎么解决的朋友 ...

  2. Java pdf文件传输_java中pdf文件的管理(pdf文件转png文件,base64传输文件以及删除)...

    org.apache.pdfbox pdfbox 2.0.12 影像文件转为base64编码使用java自带的BASE64Encoder类 代码部分: 前端上传文件的保存: @RequestMappi ...

  3. 在pdf文件中怎样编辑pdf文件图片

    想要编辑pdf文件中的图片是比较不容易的,没有好的方法的话不仅浪费时间而且很容易编辑失败,那么pdf图片怎么编辑大小及透明度呢?下面小编给出解答. 一.首先需要在电脑中安装好一个pdf编辑工具: 捷速 ...

  4. 电脑上怎么做pdf文件_怎么编辑pdf文件内容?什么工具可以编辑pdf?

    怎么编辑pdf文件内容?临近毕业时候,我有了报考教师资格证的想法,打算之后当老师.期间,我在网上找了很多报考教资的参考资料,不过它们大多是以pdf格式文件形式存在.有时候要往里加入.修改些内容,但我不 ...

  5. java生成文字与图片_java生成word(文字和图片)

    1.整体思路 利用xml模板,在模板中预留占位标识(${yourContent}),然后将xml转为ftl文件,通过Map传值填充对应的内容即可,word其实和html一样,也有自己的xml标签,表头 ...

  6. java pdf文件保存_java根据模板文件导出pdf

    原文:https://www.cnblogs.com/wangpeng00700/p/8418594.html 在网上看了一些Java生成pdf文件的,写的有点乱,有的不支持写入中文字体,有的不支持模 ...

  7. mac命令行将输出写入文件_如何在Linux中使用命令行将PDF文件转换为可编辑文本...

    mac命令行将输出写入文件 There are various reasons why you might want to convert a PDF file to editable text. M ...

  8. JAVA删除pdf空白页_如何编辑PDF文件,如何删除PDF文档中的空白页

    时代在发展,科技在进步,我们现在日常使用的文件也发展了,以前只有Word跟TXT,现在还增加了一个PDF格式的文件,但PDF格式的文件跟Word和TXT文件不一样,Word跟TXT文件可以直接的打开编 ...

  9. [PDF文件全攻略]-PDF二次开发(.NET开发 C++开发 Java PHP)

    原文:http://www.cankau.cn/news/tech/2009112016.html [PDF文件全攻略]-PDF二次开发(.NET开发 C++开发 Java PHP) 2009-11- ...

最新文章

  1. keepalived + haproxy 实现web 双主模型的高可用负载均衡--转
  2. RocketMQ Consumer 负载均衡算法源码学习 -- AllocateMessageQueueConsistentHash
  3. 会计记忆总结之三:会计等式与复式记账
  4. python动态映射_sqlalchemy动态映射
  5. 让你的 Qt 桌面程序看上去更加 native(三):自定义 style
  6. 缓存,你真的用对了么?
  7. Python抓取2500份招聘需求,数据显示未来最吃香的岗位是这个
  8. 最新中文文本挖掘小例子及程序
  9. 程序员代码面试指南读书笔记1
  10. 电阻电容封装选择以及电路接地问题
  11. 树莓派+ L298N 控制二相四线步进电机
  12. 前端合并单元格(行合并、列合并)
  13. 关于A 星算法的研究与简单分析及其实现-A star
  14. SystemUI Monkey测试原生代码报错:MLand类NullPointerException
  15. 这几款软件的隐藏功能,你们知道多少?
  16. 面对工业4.0,我国工业企业的挑战与对策
  17. 登陆qq出现计算机丢失msvcp140.dll,缺少msvcp140.dll怎么办?msvcp140.dll丢失解决方法...
  18. 纽约大学计算机与科学,纽约大学计算机科学专业排名第30(2020年USNEWS美国排名)...
  19. 选择所在城市html按字母,微信小程序实现根据字母选择城市功能
  20. Linux环境下不安装DM数据库,编译dmPython

热门文章

  1. Linux网络安全精要 William Bo Rothwell
  2. Auto CAD:CAD三维建模设计之常用工具之放样图文教程案例集合(不规则截面路径放样设计香蕉造型和电吹风外壳造型、导向放样设计茶壶造型和苹果造型)
  3. java android pptp,Centos7搭建PPTP
  4. python图像分类_关于使用SVM进行图像分类:使用SVM进行图像分类-Python
  5. Scratch编程绘制正多边形,寻找多边形的规律!
  6. 解读 Service Mesh 的实现方式与同程艺龙的具体实践
  7. 三星健身服务器无响应 怎么办,刚买的三星g7508q怎么网速慢的要死怎么办
  8. 11.Linux文件管理命令---diff比较两个文件
  9. 【STM32】入门(九):HAL库学习
  10. 同一对象实例,序列化后,出现 {$ref:$. 的问题