Flying HTML生成PDF添加水印

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

HTML转PDF并添加水印文章来源地址https://www.toymoban.com/news/detail-815236.html

<!-- 用于生成PDF -->
<dependency>
    <groupId>org.xhtmlrenderer</groupId>
    <artifactId>flying-saucer-pdf</artifactId>
    <version>9.1.20</version>
</dependency>


import java.io.File;
import java.io.FileOutputStream;
import java.util.Random;
import org.xhtmlrenderer.pdf.ITextRenderer;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.Image;
import com.lowagie.text.Phrase;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.ColumnText;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfGState;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;

public class HtmlToPdfConverter {
     
    public static void main(String[] args) throws Exception {
        String htmlContent = "<html><head><style>body { font-family: 'SimHei', sans-serif; }</style></head><body><h1>我的标题</h1><p>测试pdf</p></body></html>";
        // 使用Flying Saucer渲染HTML到临时PDF文件
        File tempFile = File.createTempFile("temp", ".pdf");
        ITextRenderer renderer = new ITextRenderer();
        //设置字体
        File fontFile = new File("F:\\weixin\\emlsr\\src\\main\\resources\\font\\simhei.ttf");
        BaseFont baseFont = BaseFont.createFont(fontFile.getAbsolutePath(), BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
        renderer.getFontResolver().addFont(fontFile.getAbsolutePath(), baseFont.getEncoding(), BaseFont.NOT_EMBEDDED);

        //生成数据
        renderer.setDocumentFromString(htmlContent);
        renderer.layout();
        renderer.createPDF(new FileOutputStream(tempFile));
        
        // 用iText打开临时PDF文件,并添加水印
        PdfGState gs = new PdfGState();
        gs.setFillOpacity(0.5f); // 设置为 50% 的透明度
        Font font = new Font(baseFont, 30, Font.NORMAL);
        PdfReader reader = new PdfReader(tempFile.getAbsolutePath());
        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("c:\\output.pdf"));
        
        //水印图片(001)
        //Image watermarkImage = Image.getInstance("C:\\1.jpg");
        //float scale = 0.2f; // 水印图片缩放比例
        //watermarkImage.scaleAbsolute(watermarkImage.getWidth() * scale, watermarkImage.getHeight() * scale);

        
        //水印平铺(002)
        // 获取一个页面尺寸作为参考来计算水印图片的缩放比例
        //Image watermarkImage = Image.getInstance("C:\\1.jpg");
        // 设置水印图片平铺的宽度和高度(例如:将水印图片设为100x100像素)
        //float tileWidth = 100f;
        //float tileHeight = 100f;
        //watermarkImage.scaleAbsolute(tileWidth, tileHeight);

        
        //水印随机平铺3个(003)
        Image watermarkImage = Image.getInstance("C:\\1.jpg");
        // 设置水印图片平铺的宽度和高度(例如:将水印图片设为100x100像素)
        float tileWidth = 100f;
        float tileHeight = 100f;
        Random random = new Random(); // 创建一个随机数生成器

        int n = reader.getNumberOfPages();
        for (int i = 1; i <= n; i++) {
            PdfContentByte underContent = stamper.getUnderContent(i);
            underContent.setGState(gs);
            // 字体添加透明度
            ColumnText.showTextAligned(underContent, Element.ALIGN_CENTER,
                    new Phrase("水印文字",font),
                    reader.getPageSize(i).getWidth() / 2,
                    reader.getPageSize(i).getHeight() / 2,
                    45); // 角度可调整水印倾斜程度
            
            
            
            // 获取页面尺寸并计算水印位置(001)
            //Rectangle pageRect = reader.getPageSizeWithRotation(i);
            //float x = (pageRect.getWidth() - watermarkImage.getScaledWidth()) / 2;
            //float y = (pageRect.getHeight() - watermarkImage.getScaledHeight()) / 2;
            // 添加水印图片
            //underContent.addImage(watermarkImage, watermarkImage.getWidth(), 0, 0, watermarkImage.getHeight(), x, y);
            
            
            
            //水印平铺(002)满屏
            //Rectangle pageRect = reader.getPageSizeWithRotation(i);
            // 计算并添加水印图片的位置(按照平铺效果)
            //for (float x = 0; x < pageRect.getWidth(); x += tileWidth) {
            //    for (float y = 0; y < pageRect.getHeight(); y += tileHeight) {
            //        underContent.addImage(watermarkImage, tileWidth, 0, 0, tileHeight, x, y);
            //    }
            //}
            
            
            //(003)
            Rectangle pageRect = reader.getPageSizeWithRotation(i);
            // 计算并添加三个随机位置的水印图片
            for (int j = 0; j < 3; j++) {
                // 随机计算X和Y坐标
                float x = random.nextFloat() * (pageRect.getWidth() - tileWidth);
                float y = random.nextFloat() * (pageRect.getHeight() - tileHeight);
                underContent.addImage(watermarkImage, tileWidth, 0, 0, tileHeight, x, y);
            }

        }
        
        
        
        // 关闭
        stamper.close();
        reader.close();
        tempFile.delete();
        System.out.println("带有水印的PDF文件已生成至: output.pdf");
    }
}

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

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

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

相关文章

  • SpringBoot Thymeleaf企业级真实应用:使用Flying Saucer结合iText5将HTML界面数据转换为PDF输出(四) 表格中断问题

    接上一篇 SpringBoot Thymeleaf企业级真实应用:使用Flying Saucer结合iText5将HTML界面数据转换为PDF输出(三) 给pdf加水印、页眉页脚、页眉logo 设置表格的css样式

    2024年02月12日
    浏览(60)
  • itextpdf7 使用之 html转pdf,生成目录可跳转、添加页眉页脚

    最近有个需求,生成信用报告。 需求: 1、生成pdf有页眉页脚 2、生成目录 3、目录加锚点可跳转。 难点: 1、生成的目录不能实时读取页码 2、目录是后生成的,属于两份pdf拼接的,不能添加锚点跳转 思路: 1、freemaker进行html页面布局及动态变量替换 2、生成一份pdf文档,用

    2024年02月20日
    浏览(38)
  • SpringBoot+Thymeleaf 后端转html,pdf HTML生成PDF SpringBoot生成PDF Java PDF生成

    本文详细介绍了如何使用SpringBoot和Thymeleaf将后端HTML转换为PDF,包括依赖介绍、模板渲染以及PDF生成等步骤。

    2024年02月09日
    浏览(56)
  • pdf添加水印

    引入依赖 添加水印 添加字体文件到resouresFontsimsun.ttc 用到的字体文件(幼圆常规,C盘Windows/Fonts目录下 测试用例

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

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

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

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

    2024年02月13日
    浏览(37)
  • 使用PyMuPDF添加PDF水印

    使用Python添加PDF水印的博客文章。 C:pythoncodenewpdfwatermark.py 在日常工作中,我们经常需要对PDF文件进行处理。其中一项常见的需求是向PDF文件添加水印,以保护文件的版权或标识文件的来源。本文将介绍如何使用Python编程语言和PyMuPDF库在PDF文件中添加水印。 在开始之前,确

    2024年02月11日
    浏览(76)
  • Java HTML生成PDF(格式不变)

    Java是大规模和企业级应用程序最常用的编程语言之一。PDF 格式代表可移植文档格式,为人们提供了一种简单、可靠的方式来呈现和交换文档 - 无论查看文档的任何人使用何种软件、硬件或操作系统。因此,pdf 是一种广泛使用的格式,用于在软件应用程序中生成文档。 HTML 用

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

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

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

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

    2024年02月01日
    浏览(63)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包