pdfbox对pdf字节流添加空白页以及简易编辑_oracle在逃工程师的博客-程序员ITS301_pdfbox 在两行之间添加空白行

技术标签: java  

1.pdfbox对pdf流操作

//这个是获取到的pdf的base64
        BASE64Decoder base64Decoder = new BASE64Decoder();
        //base64转成的数组
        byte[] pdfData = base64Decoder.decodeBuffer(pdfBase64);
        //通过pdfbox对pdf流新增空白页
        PDDocument document = PDDocument.load(pdfData);
        document.addPage(new PDPage());
        ByteArrayOutputStream bos=new ByteArrayOutputStream();
        document.save(bos);
        byte[] pdfDataAddPage = bos.toByteArray();
        document.close();

2.pdfbox小demo

public static void main(String[] args) throws IOException {
    
		//通过pdfbox对pdf流新增空白页
		File file = new File("Z:\\workSpace\\csdc\\csdc-h5\\src\\main\\resources\\file\\pdfCaSign.pdf");
		PDDocument document = PDDocument.load(file);
		//新增空白页
		PDPage blankPage = new PDPage();
		//获取空白页在文档中的内容流
		PDPageContentStream contentStream = new PDPageContentStream(document, blankPage);
		//设置文本字体格式和大小
		File fontFile = new File("C:\\Windows\\Fonts\\simfang.ttf");
		PDType0Font font = PDType0Font.load(document, fontFile);

		setText(contentStream,font);

		//将空白页拼接至pdf尾页
		document.addPage(blankPage);
		ByteArrayOutputStream bos=new ByteArrayOutputStream();
		document.save(bos);
		byte[] pdfDataAddPage = bos.toByteArray();
		document.close();
		PDDocument newDoc = PDDocument.load(pdfDataAddPage);
		newDoc.save("Z:\\newDoc.pdf");
	}

	public static void setText(PDPageContentStream contentStream,PDType0Font font) throws IOException {
    
        //开启文本输入流
		contentStream.beginText();
		contentStream.setFont(font, 12);
		//设置文本页面定位
		contentStream.newLineAtOffset(20, 200);
		//将文本写入文本流
		contentStream.showText("This is a test text ! 用于测试页面是否乱码。");
		contentStream.newLine();
		contentStream.newLineAtOffset(40,220);
		contentStream.showText("投保人签字:______________");
		contentStream.newLine();
		contentStream.newLineAtOffset(60,230);
		contentStream.showText("被保人签字:______________");
		contentStream.newLine();
		contentStream.newLineAtOffset(60,235);
		contentStream.showText("受益人签字:______________");
		//结束文本输入流
		contentStream.endText();
		//关闭流
		contentStream.close();
	}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_45473377/article/details/124144434

智能推荐

国汽智控发布智能汽车基础脑iVBB2.0,“缺芯少核”解决方案量产落地_高工智能汽车的博客-程序员ITS301

伴随传统巨头在产品研发、团队与生产各方面的本土化,以及面向中国市场的全面开放,智能汽车产业的竞争将更加激烈。这意味着,主机厂对于芯片、操作系统自主可控的需求将井喷式增长。及早谋划,掌握研发主动权已成为从政策制定到产业升级的共识。突破车规级芯片、车用操作系统、新型电子电气架构,突破车载智能计算平台,搭建开放共享、协同演进的良好生态也多次在数个汽车产业规划中被提及。具体来讲,整车计算平台需要高算力车规级芯片加安全的底层操作系统,同时,统一的开源开放的操作系统则可以形成构架之上的车载应用软件“百花齐放

unity游戏框架学习-资源管理_weixin_30411239的博客-程序员ITS301

概述:https://www.cnblogs.com/wang-jin-fu/p/10975660.html这篇只涉及基础原理,下篇会讲如何实现一个简单的资源管理框架。一、Assets和Objects资源(Asset)是存储在Unity项目的Assets文件夹中的磁盘文件。有些资源的数据格式是Unity原声支持的,有些资源则需要转换为源生的数据格式后才能被使用。对象(...

java程序RSA加密程序一直报错,错误异常: algid parse error, not a sequence​_sy83896268的博客-程序员ITS301

其原因是因为,用openssl生成的私钥没有进行pkcs8编码,所以导致程序无法识别。用openssl转一下码就好了,命令如下:pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt使用转码后的私钥即可。...

【Avro三】Hadoop MapReduce读写Avro文件_axxbc123的博客-程序员ITS301

Avro是Doug Cutting(此人绝对是神一般的存在)牵头开发的。 开发之初就是围绕着完善Hadoop生态系统的数据处理而开展的(使用Avro作为Hadoop MapReduce需要处理数据序列化和反序列化的场景),因此Hadoop MapReduce集成Avro也就是自然而然的事情。这个例子是一个简单的Hadoop MapReduce读取Avro格式的源文件进行计数统计,然后将计算结...

DB2数据库的SQL1042C错误解决案例_weixin_33935505的博客-程序员ITS301

 测试机上一个老的DB2数据库在正常停库后,在启库时报SQL1042C错误。具体信息如下:# su - db2inst1 $ db2start2013-04-23 13:23:08     0   0   SQL1042C  An unexpected system error occurred.SQL1032N  No start database manager comma...

【软件工具】之 TotalCommander_王廷云的博客的博客-程序员ITS301_totalcommander教程

目录一、TotalCommander 简介二、TotalCommander 使用教程1、软件配置2、添加工具栏程序3、常用快捷键4、重新定义快捷键一、TotalCommander 简介Total Commander,简称 TC,原名 Windows Commander,功能强大的全能文件管理器。它支持随意自定义的菜单、工具栏、快捷键,给您最大的自由,打造个性TC,一般的文件操作,如搜索、复制、移动、改名、删除等功能应有尽有。功能介绍1、内置 ZIP/TAR/GZ/TGZ

随便推点

python的扩展库numpy如何安装_python如何安装numpy库_黄山侯的博客-程序员ITS301

python如何安装numpy库发布时间:2020-09-23 09:53:03来源:亿速云阅读:83作者:小新这篇文章主要介绍了python如何安装numpy库,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数...

SpringBoot 整合 Elastic Stack 最新版本(7.14.1)分布式日志解决方案,开源微服务全栈项目【有来商城】的日志落地实践_有来技术的博客-程序员ITS301

一. 前言日志对于一个程序的重要程度不用过多的言语修饰,本篇将以实战的方式讲述开源微服务全栈项目 有来商城 是如何整合当下主流日志解决方案 ELK +Filebeat 。 话不多说,先看实现的效果图,绝不搞些浪费大家时间且没意义的东西。二. Elastic Stask 技术栈1. 为什么引入 Filebeat ?ELK 作为分布式日志解决方案让人为之津津乐道,即使没有实践过也能耳熟,可见其火热程度。 Beats 作为数据采集器后来加入进来 Elastic 家族,ELK正式更名为 Elastic

rtsp流媒体buffer填充的处理过程_Abelccc的博客-程序员ITS301_onomxemptybufferdone

NuPlayer流媒体播放器中从网络上取得的rtp包在解码和显示时所用buffer的填充和清空的机制,与stagefright框架播放本地视频时的处理流程类似。都是通过回调函数fillbuffer及emptybuffer来实现的。NuPlayer中的ACodec与Stagefright中的OMXCodec的作用相似。以下是rtsp流媒体中填充待解码的buffer,以及把解码后的buff

2019年7月中国奶业经济月报_深圳小组座谈会的博客-程序员ITS301

一、总体形势分析2019年7月份,生鲜乳价格继续上涨,玉米价格环比上涨、豆粕价格环比下降根据农业农村部监测数据,7月有3周生鲜乳上涨,月度均价3.59元/千克,环比上涨0.9%,同比上涨6.3%,月末3.61元/公斤,比前一周上涨0.6%,同比上涨7.1%。玉米月度均价2.11元/千克,环比上涨1.0%,同比上涨3.7%;豆粕月度均价3.20元/千克,环比下降1.1%,同比下降3....

启动 webLogic的时候有错误 此时不应有 \Java\jdk\lib\dt.jar_修心猿的博客-程序员ITS301

错误如题。解决方案:将环境变量中的CLASSPATH去掉就可以了!

db2 row_number(), oracle rowid_cindysaj的博客-程序员ITS301

select ROW_NUMBER() OVER(order by id desc) from e2exlation.asset