java实现pdf文件添加水印,下载到浏览器

这篇具有很好参考价值的文章主要介绍了java实现pdf文件添加水印,下载到浏览器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

java实现pdf文件添加水印,下载到浏览器

添加itextpdf依赖

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.8</version>
</dependency>

文件下载到浏览器和指定路径

根据需求,不需要指定路径可以删除对应的输出流

public void addPDFImageWaterMark(MultipartFile srcFile, MultipartFile imagePath, HttpServletResponse response) {
    String fileName = "test.pdf";
    PdfReader reader = null;
    PdfStamper stamper = null;
    FileInputStream fileInputStream = null;
  	//这个输出流要放入PdfStamper构造方法中,这里也会下载一个文件,不需要的话可以在finally中删除
 		FileOutputStream fileOutputStream = null;
  	//下载到你指定的路径,try里面new的路径,不需要下载到指定路径可以删除
    FileOutputStream fos = null;
    // 设置响应头,指定内容类型和文件名,准备下载到浏览器,下载到指定位置,不需要下载到浏览器可以删除这个输出流
    ServletOutputStream outputStream = null;
    response.setContentType("application/pdf");
    response.setHeader("Content-Disposition", "attachment; filename=" + srcFile.getOriginalFilename());
    try {
        outputStream = response.getOutputStream();
        //如果是路径的话可以使用另一个构造方法reader = new PdfReader(srcPath);
        reader = new PdfReader(srcFile.getBytes());
        fileOutputStream = new FileOutputStream(fileName);
        stamper = new PdfStamper(reader, fileOutputStream);
        //加载图片
        //如果是路径的话可以使用另一个构造方法Image image =Image.getInstance(imagePath);
        Image image = Image.getInstance(imagePath.getBytes());
        //将图片控制大小,适配这个大小
        image.scaleToFit(200, 100);

        PdfGState gs = new PdfGState();
        //gs.setFillOpacity(0.2f);//图片水印透明度
        //gs.setStrokeOpacity(0.4f);//设置笔触字体不透明度
        PdfContentByte content = null;

        int total = reader.getNumberOfPages();//pdf文件页数
        for (int i = 0; i < total; i++) {
            float x = reader.getPageSize(i + 1).getWidth();//页宽度
            float y = reader.getPageSize(i + 1).getHeight();//页高度
            content = stamper.getOverContent(i + 1);
            content.setGState(gs);
            content.beginText();//开始写入

            //每页7行,一行3个
            for (int j=0; j<3; j++) {
                for (int k=0; k<7; k++) {
                    //setAbsolutePosition 方法的参数(输出水印X轴位置,Y轴位置)
                    image.setAbsolutePosition(x/3*j-30, y/7*k-20);
                    content.addImage(image);
                }
            }
            content.endText();//结束写入
        }
        //要先关闭流才能将生成的文件写到指定地方!!!
        stamper.close();
        reader.close();
        //指定这个文件(这里我用的相对路径)
        fileInputStream = new FileInputStream(fileName);
        //创建输出流,下载到指定路径
        fos = new FileOutputStream("test1.pdf");
        byte[] buffer = new byte[1024];
        int bytesRead = 0;
        while ((bytesRead = fileInputStream.read(buffer)) != -1) {
            // 浏览器下载
            outputStream.write(buffer, 0, bytesRead);
            //下载到指定路径
            fos.write(buffer, 0, bytesRead);
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            //关闭流
            if (stamper != null) {
                stamper.close();
            }
            if (reader != null) {
                reader.close();
            }
            if (fos != null) {
                fos.close();
            }
            if (fileInputStream != null) {
                fileInputStream.close();
            }
            if (fileOutputStream != null) {
                fileOutputStream.close();
            }
            if (outputStream != null) {
                outputStream.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

效果如下:代码中的相对路径在src平级目录下,test.pdf是PdfStamper里面fileOutputStream生成的,test1.pdf是fos生成的

java实现pdf文件添加水印,下载到浏览器,java基础,java

浏览器下载的如下:

java实现pdf文件添加水印,下载到浏览器,java基础,java

生成的pdf内容如下(红框里面是pdf原来的内容,可以自己调整代码中注释掉的设置水印透明度来调整)

java实现pdf文件添加水印,下载到浏览器,java基础,java

提供的前端代码自行测试文章来源地址https://www.toymoban.com/news/detail-743022.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

    <h2>测试PDF添加水印</h2>
    <form method="post" action="http://localhost:8080/addPDFImageWaterMark" enctype="multipart/form-data">
        <label for="srcFile">选择PDF文件:</label>
        <input type="file" name="srcFile" id="srcFile" accept=".pdf" required>
        <br>
        <label for="imagePath">选择水印图片:</label>
        <input type="file" name="imagePath" id="imagePath" accept=".jpg, .png" required>
        <br>
        <button type="submit">添加水印并下载</button>
    </form>

</body>
</html>

到了这里,关于java实现pdf文件添加水印,下载到浏览器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 微信公众号 - 实现 H5 网页在微信内置浏览器中下载文件,可预览和下载 office 文件(doc / xls / ppt / pdf 等)适用于任何前端技术栈网站,兼容安卓和苹果系统!

    网上的教程都是让你写页面 “引导” 右上角三个点里,让用户自己去浏览器打开,其实这样用户体验并不好。 本文实现了 最新微信公众号 H5 网页(微信内置浏览器中),预览下载 office 文件,安卓和苹果全都支持! 您可以直接复制代码,移植到自己项目中去, 任何前端项

    2024年01月21日
    浏览(73)
  • Vue3实现PDF文件预览 (低版本浏览器兼容)

    前言:         最近和小伙伴们一起合作完成一个企业级知识库项目,其中一个功能就是后端把所有格式的文件转换为PDF,前端实现渲染PDF文件从而实现预览,干了整整一周(考虑到低版本浏览器的兼容),试用了几种方案(iframe预览已被废弃,不适用本项目,想了解的同学

    2024年01月20日
    浏览(43)
  • Java pdf添加文字水印

    最近在开发一个项目,其中就有导出的功能,而甲方提了一个需求,要对导出的pdf加文字水印,所以我就加班了整整10分钟肝出了这个功能,既然做出来了就和大家分享一下吧,拿走不谢!!! 总共就三步,非常简单 1.导入maven依赖 2.PDF增加水印工具类 3.运行工具类下面的m

    2024年02月12日
    浏览(58)
  • Aspose.Pdf使用教程:在PDF文件中添加水印

    Aspose.PDF  是一款高级PDF处理API,可以在跨平台应用程序中轻松生成,修改,转换,呈现,保护和打印文档。无需使用Adobe Acrobat。此外,API提供压缩选项,表创建和处理,图形和图像功能,广泛的超链接功能,图章和水印任务,扩展的安全控件和自定义字体处理。本文将为你

    2024年02月01日
    浏览(63)
  • Vue实现下载文件而非浏览器直接打开

    对于一个txt文本、图片、视频、音频等浏览器可以直接使用浏览器进行预览的文件, 使用传统的a标签加download属性进行下载是行不通的,会在浏览器直接打开,因此需要搞一个新的方式进行下载。 实现思路 这里使用Vue自定义指令,对文件链接进行处理,将链接转化为blob进行

    2023年04月16日
    浏览(44)
  • Java给PDF文档添加水印信息

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

    2024年02月09日
    浏览(47)
  • SpringBoot 实现 PDF 添加水印

    PDF(Portable Document Format,便携式文档格式)是一种流行的文件格式,它可以在多个操作系统和应用程序中进行查看和打印。在某些情况下,我们需要对 PDF 文件添加水印,以使其更具有辨识度或者保护其版权。本文将介绍如何使用 Spring Boot 来实现 PDF 添加水印的方式。 PDFBox

    2024年02月09日
    浏览(108)
  • SpringBoot实现pdf添加水印

    在某些情况下,我们需要对 PDF 文件添加水印,以使其更具有辨识度或者保护其版权。本文将介绍几种方案来实现PDF添加水印。 git地址:https://gitee.com/ninesuntec/pdf-add-watermark PDFBox 是一个流行的、免费的、用 Java 编写的库,它可以用来创建、修改和提取 PDF 内容。PDFBox 提供了许

    2024年02月13日
    浏览(36)
  • SpringBoot 实现 PDF 添加水印方案

    PDF(Portable Document Format,便携式文档格式)是一种流行的文件格式,它可以在多个操作系统和应用程序中进行查看和打印。在某些情况下,我们需要对 PDF 文件添加水印,以使其更具有辨识度或者保护其版权。本文将介绍如何使用 Spring Boot 来实现 PDF 添加水印的方式。 PDFBox

    2024年02月13日
    浏览(39)
  • JAVA PDF 给PDF添加文字/图片水印(指定内容),并且设置位置

    提示:看完这个简单的demo 后就知道怎样去操作一个PDF了 文章目录 前言 一、前提准备 二、使用步骤 1.引入库 2.以下是部分代码的作用 总结 提示:操作PDF其实是一件很简单的事情,比一般的CRUD都简单 例如:我们拿到了一个需求,我需要给这个PDF设置一个 电子签名 ( 就是一

    2024年04月23日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包