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/
Java编辑PDF写入文字 插入图片的更多相关文章
- 开发笔记:PDF生成文字和图片水印
背景 团队手里在做的一个项目,其中一个小功能是用户需要上传PDF文件到文件服务器上,都是一些合同或者技术评估文档,鉴于知识版权和防伪的目的,需要在上传的PDF文件打上水印, 这时候我们需要提供能力给客 ...
- MVC 生成PDf表格并插入图片
最近做的项目中有一个功能,将最终的个人信息生成PDF表格,并插入图片.对于没接触过的程序员来说回一片茫然,网上有多种生成PDf的方法,我给大家介绍一下我认为比较简单,好操作的一种. iTextShar ...
- Java 在PDF中添加水印——文本/图片水印
水印是一种十分常用的防伪手段,常用于各种文档.资料等.常见的水印,包括文字类型的水印.图片或logo类型的水印.以下Java示例,将分别使用insertTextWatermark(PdfPageBas ...
- C#中如何创建PDF网格并插入图片
这篇文章我将向大家演示如何以编程的方式在PDF文档中创建一个网格,并将图片插入特定的网格中. 网上有一些类似的解决方法,在这里我选择了一个免费版的PDF组件.安装控件后,创建新项目,添加安装目录下的d ...
- c# iText 生成PDF 有文字,图片,表格,文字样式,对齐方式,页眉页脚,等等等,
#region 下载说明书PDF protected void lbtnDownPDF_Click(object sender, EventArgs e) { int pid = ConvertHel ...
- Java 将PDF 转为Word、图片、SVG、XPS、Html、PDF/A
本文将介绍通过Java编程来实现PDF文档转换的方法.包括: 1. PDF转为Word 2. PDF转为图片 3. PDF转为Html 4. PDF转为SVG 4.1 将PDF每一页转为单个的SVG ...
- java 在Excel中插入图片 POI实现
一.POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象.它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97- ...
- 利用百度AI OCR图片识别,Java实现PDF中的图片转换成文字
序言:我们在读一些PDF版书籍的时候,如果PDF中不是图片,做起读书笔记的还好:如果PDF中的是图片的话,根本无法编辑,做起笔记来,还是很痛苦的.我是遇到过了.我们搞技术的,当然得自己学着解决现在的痛 ...
- C#调用NPOI组件读取excel表格数据转为datatable写入word表格中并向word中插入图片/文字/书签 获得书签列表
调用word的com组件将400条数据导入word表格中耗时10分钟简直不能忍受,使用NPOI组件耗时4秒钟.但是NPOI中替换书签内容的功能不知道是不支持还是没找到. 辅助类 Excel表格数据与D ...
随机推荐
- Oracle Split字符串
为了让 PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成.REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行 ...
- SCOPE_IDENTITY的用法【转载】
SCOPE_IDENTITY 和 @@IDENTITY 的作用都是取得返回在当前会话中的任何表内所生成的最后一个标识值,简单的说就是在执行一条插入语句之后使用@@IDENTITY的全局变量 ...
- tomcat源码 分析 Catalina
通过查看分析启动脚本,发现最终调用的入口是org.apache.catalina.startup包下面的Bootstrap#main public static void main(String ar ...
- GoJS拖动设计
http://192.168.0.149:8035/gojs/intro/groups.html http://192.168.0.149:8035/gojs/intro/ports.html htt ...
- PREV-4_蓝桥杯_剪格子
问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+|10* 1|52|+--****--+|20|30* 1|*******--+| 1| 2| 3|+--+--+--+ ...
- 在WPS绿色版中增加自定义皮肤
在WPS绿色版中增加自定义皮肤小俊的博客:http://xiaojun911.com/WPS绿色版:http://xiaojun911.com/xiazai/469.html小俊精简的WPS2016 ...
- 固态硬盘使用简要手册——windows平台
第一步,请安装它. 第二步,请关闭磁盘整理功能,如图 详细:控制面板--管理工具--任务计划程序 打开界面,设置如下 图1 第三步:预读(Superfetch)和快速搜索(Windows Search ...
- PAT 甲级 1001 A+B Format (20)(20 分)
1001 A+B Format (20)(20 分) Calculate a + b and output the sum in standard format -- that is, the dig ...
- hadoop 完全分布式安装
一个完全的hadoop分布式安装至少需要3个zookeeper,3个journalnode,3个datanode,2个namenode组成. 也就是说需要11个节点,但是我云主机有限,只有3个,所以把 ...
- spring4.3新注解之:@RequestMapping变种(@GetMapping,@PostMapping,@PutMapping,@DeleteMapping,@PatchMapping)
Spring 4.3 中引进了下面的注解 @RequestMapping 在方法层级的变种,来帮助简化常用 HTTP 方法的映射,并更好地表达被注解的方法的语义.比如,@GetMapping可以读作 ...