JAVA PDF 给PDF添加文字/图片水印(指定内容),并且设置位置

这篇具有很好参考价值的文章主要介绍了JAVA PDF 给PDF添加文字/图片水印(指定内容),并且设置位置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:看完这个简单的demo 后就知道怎样去操作一个PDF了

文章目录

  • 前言
  • 一、前提准备
  • 二、使用步骤
    • 1.引入库
    • 2.以下是部分代码的作用
  • 总结

前言

提示:操作PDF其实是一件很简单的事情,比一般的CRUD都简单

例如:我们拿到了一个需求,我需要给这个PDF设置一个电子签名(就是一张图片盖在这个PDF上,然后输出到服务器的某个指定文件夹中)和年月日(自定义的文字)


提示:以下是本篇文章正文内容,下面案例可供参考

一、前提准备

示例:因为我这个是demo 所以我们准备两个文件
           1.原始PDF(模板PDF,需要操作的文件)   J:/test.pdf

           2.需要放到PDF种的签名(就是一张图片嘛)J:/666.png

二、使用步骤

1.引入库

代码如下(示例):

其实我们只需要用到两个包,maven引入即可(复制过去)
<!-- pdfbox -->
<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.28</version>
</dependency>
<!-- itextpdf -->
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.13.3</version>
</dependency>

2.以下是部分代码的作用

代码如下(示例):

首先我们需要读取这两个文件(路径换成你自己的服务器路径就好)File file = ResourceUtils.getFile("J:/test.pdf");
Image img = Image.getInstance("J:/ikun.jpg");

  然后我们需要提前设置需要输出的路径(就是你生成后文件放到哪儿)
PdfStamper stamper = new PdfStamper(reader, Files.newOutputStream(Paths.get("J:/abc.pdf")));

图片操作的代码块

PdfGState pdfGState = new PdfGState();
pdfGState.setFillOpacity(0.7F);
contentByte.setGState(pdfGState);
//图片的位置
img.setAbsolutePosition(430, 220);
//这是图片的尺寸
img.scaleAbsolute(100, 100);
img.setCompressionLevel(100);

文字的代码块

//设置字体大小contentByte.setFontAndSize(BaseFont.createFont(fontFile.getAbsolutePath(),BaseFont                .IDENTITY_H,BaseFont.NOT_EMBEDDED), 13f);
// 设置文字
contentByte.setColorFill(BaseColor.LIGHT_GRAY);
contentByte.showTextAligned(Element.ALIGN_CENTER, "13511111111", 450, 200, 0);
contentByte.showTextAligned(Element.ALIGN_CENTER,                 String.valueOf(LocalDate.now().getYear()), 450, 143, 0);
contentByte.showTextAligned(Element.ALIGN_CENTER,                 String.valueOf(LocalDate.now().getMonthValue()), 490, 143, 0);
contentByte.showTextAligned(Element.ALIGN_CENTER,                 String.valueOf(LocalDate.now().getDayOfMonth()), 128, 130, 0);

上面就是文件和文字的操作

3.总体的DEMO代码

package com.cm.email;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.time.LocalDate;


@Slf4j
@RestController
public class WaterMarkUtils {

    @PostMapping("/set-pdf")
    public void pdfs() throws DocumentException, IOException {
        File file = ResourceUtils.getFile("J:/test.pdf");
        Image img = Image.getInstance("J:/ikun(1).jpg");
        File fontFile = ResourceUtils.getFile("classpath:font/simfang.ttf");
        InputStream inputStream = Files.newInputStream(file.toPath());
        // 读取原始 PDF 文件
        PdfReader reader = new PdfReader(inputStream);
        PdfStamper stamper = new PdfStamper(reader, Files.newOutputStream(Paths.get("J:/abc.pdf")));
        try {
            // 获取 PDF 中的页数
            int pageCount = reader.getNumberOfPages();
            // 获取第几页pdf
            PdfContentByte contentByte = stamper.getOverContent(pageCount);
            contentByte.beginText();
            //给图片设置透明度
            PdfGState pdfGState = new PdfGState();
            pdfGState.setFillOpacity(0.7F);
            contentByte.setGState(pdfGState);
            //图片的位置
            img.setAbsolutePosition(430, 220);
            //这是图片的尺寸
            img.scaleAbsolute(100, 100);
            img.setCompressionLevel(100);
            //设置字体大小
            contentByte.setFontAndSize(BaseFont.createFont(fontFile.getAbsolutePath(),BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED), 13f);
            // 设置文字
            contentByte.setColorFill(BaseColor.LIGHT_GRAY);
            contentByte.showTextAligned(Element.ALIGN_CENTER, "13511111111", 450, 200, 0);
            contentByte.showTextAligned(Element.ALIGN_CENTER, String.valueOf(LocalDate.now().getYear()), 450, 143, 0);
            contentByte.showTextAligned(Element.ALIGN_CENTER, String.valueOf(LocalDate.now().getMonthValue()), 490, 143, 0);
            contentByte.showTextAligned(Element.ALIGN_CENTER, String.valueOf(LocalDate.now().getDayOfMonth()), 128, 130, 0);
            //添加图品结束等等
            contentByte.addImage(img);
            contentByte.endText();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            // 保存修改后的 PDF 文件并关闭文件流
            stamper.close();
            reader.close();
        }


    }

}

4.具体效果

java springboot 如何实现 在pdf 或者图片上 固定位置加文字,pdf,java,maven


总结

提示:关于字体这些东西,还有比如说文字的颜色啊,可以自己去看看,这里只是简单的演示


         以上就是今天要讲的内容,本文仅仅简单介绍了java操作PDF的使用,代理直接拿过去运行即可。文章来源地址https://www.toymoban.com/news/detail-856071.html

到了这里,关于JAVA PDF 给PDF添加文字/图片水印(指定内容),并且设置位置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于pdfbox实现的pdf添加文字水印工具

    最近有个需求需要给pdf加文字水印,于是开始搜索大法,但是发现网络上的代码基本都是将字体文件直接放在jar包里面。个人强迫症发作(手动狗头),想要像poi一样直接加载系统字体,于是研究了一下午pdfbox的源代码,发现 FontFileFinder 类可以实现这个功能。废话不多说,直

    2023年04月11日
    浏览(20)
  • 如何通过C++ 给PDF文档添加文字水印

    因PDF文档具有较好的稳定性和兼容性,现在越来越多的合同、研究论文、报告等都采用PDF格式。为了进一步保护这些重要文档内容免受未经授权的复制或使用,我们可以添加水印以表明其状态、所有权或用途。针对工作中可能出现的在 C++ 应用程序中给 PDF 文档添加文字水印的

    2024年02月05日
    浏览(30)
  • Python操作Word水印:添加文字或图片水印

    在Word文档中,可以添加半透明的图形或文字作为水印,以保护文档的原创性,防止未经授权的复制或使用。除了提供安全功能外,水印还可以展示文档创作者的信息、附加的文档信息,或者仅用于文档的装饰。本文将介绍如何使用 Spire.Doc for Python 在程序中的轻松 添加文字和

    2024年02月08日
    浏览(23)
  • Python代码学习之给图片添加文字或图片水印

    图片加水印有什么好处?在现今的数字化时代,网络上的图片泛滥,盗图现象也越来越严重。因此,在发布文章时,为了保护自己的原创作品版权,很多人选择使用水印来保护他们的图片。这样就能更好地做到: 1.版权保护:在商业用途的照片中添加水印可以帮助保护作者的

    2024年02月09日
    浏览(31)
  • Java给PDF文档添加水印信息

            在word生成pdf后,或者上传pdf文件,用户希望给pdf文档添加水印信息,具体代码如下   一. 首先pom中需要引入 核心代码如下,写在某个 service 下面 用到的实体类  方法测试

    2024年02月09日
    浏览(26)
  • React实现文本框输入文字内容动态给图片添加文字信息(多个)并生成新的图片

    收到这个需求的时候,我的内心是崩溃的,脑子里已经跑过一万匹草泥马,内心想这种事为啥不交给ps去做,哪怕是手机里图片编辑也可以做到吧,专业的事交给专业的工具去干不就好了,何必出这种XX需求。后来想想就释然了,反正拿钱干活,干啥不是干,只要给钱,再XX的

    2024年02月06日
    浏览(23)
  • java实现pdf文件添加水印,下载到浏览器

    添加itextpdf依赖 根据需求,不需要指定路径可以删除对应的输出流 效果如下:代码中的相对路径在src平级目录下,test.pdf是PdfStamper里面fileOutputStream生成的,test1.pdf是fos生成的 浏览器下载的如下: 生成的pdf内容如下(红框里面是pdf原来的内容,可以自己调整代码中注释掉的设

    2024年02月05日
    浏览(32)
  • 【批量区域识别内容重命名】批量识别图片区域文字并重命名,批量图片部分识别内容重命文件,PDF区域识别提取重命名

    我们在工作和生活中经常遇到这样的需求:比如将以下的图片区域识别进行重命名,批量识别后改成以时间和工作内容重命名,便于日后检索,快速查询 首先我们拍摄照片用到的是水印相机,这里的文字呢我们需要加个背景,这样在文字识别就很容易的被识别,准确率也非常

    2024年04月25日
    浏览(25)
  • Java实现视频与图片添加水印

    1、需要引入javacv依赖 2、代码实现

    2024年02月04日
    浏览(17)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包