首页 > 编程语言 >OFD添加图片水印-JAVA

OFD添加图片水印-JAVA

时间:2023-11-02 17:05:24浏览次数:43  
标签:JAVA OFD img 水印 getWidth 3.5 org import ofdrw

写出了一个ofd文件加图片水印的工具类,分享给大家参考。

1、引入ofdrw

<!--junit-->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>provided</scope>
</dependency>
 
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
    <scope>provided</scope>
</dependency>
 
<!-- ofdrw -->
<dependency>
    <groupId>org.ofdrw</groupId>
    <artifactId>ofdrw-full</artifactId>
    <version>1.6.4</version>
</dependency>

2、工具类编写

import java.nio.file.Path;
import ch.qos.logback.core.net.SyslogOutputStream;
import com.itextpdf.text.BadElementException;
import org.ofdrw.core.annotation.pageannot.AnnotType;
import org.ofdrw.core.basicType.ST_Box;
import org.ofdrw.font.FontName;
import org.ofdrw.layout.OFDDoc;
import org.ofdrw.layout.edit.Annotation;
import org.ofdrw.layout.element.canvas.FontSetting;
import org.ofdrw.reader.OFDReader;
import com.itextpdf.text.Image;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
 
public class OfdUtil {
    /**
     * @param inputFile  输入路径
     * @param outputFile 输出路径
     * @param imgPath    图片路径
     * @param dhzwz      加章位置: 1左上角、0中间、2右上角
     */
    public static String waterMark(String inputFile, String outputFile,String imgPath,String dhzwz) throws IOException, BadElementException {
        Path srcP = Paths.get(inputFile);
        Path outP = Paths.get(outputFile);
        //Image img = null;
 
        Image  img = Image.getInstance(imgPath);
         Path imgPath1 = Paths.get(imgPath);
        try (OFDReader reader = new OFDReader(srcP);
             OFDDoc ofdDoc = new OFDDoc(reader, outP)) {
 
            Double width = ofdDoc.getPageLayout().getWidth();
            Double height = ofdDoc.getPageLayout().getHeight();
            Annotation annotation = new Annotation(new ST_Box(0d, 0d, width, height), AnnotType.Watermark, ctx -> {
                FontSetting setting = new FontSetting(8, FontName.SimSun.font());
 
                ctx.setFillColor(170, 160, 165)
                        .setFont(setting)
                        .setGlobalAlpha(0.4);
 
                // 图片水印
                if(dhzwz.equals("1")) {//左上角
                    ctx.drawImage(imgPath1, 0, 5, img.getWidth()/3.5, img.getHeight()/3.5);
                }else if (dhzwz.equals("0")) {//居中
                    ctx.drawImage(imgPath1, width/2-img.getWidth()/3.5/2, 5, img.getWidth()/3.5, img.getHeight()/3.5);
                }else if (dhzwz.equals("2")) {//右上角
                    ctx.drawImage(imgPath1, width-img.getWidth()/3.5, 5, img.getWidth()/3.5, img.getHeight()/3.5);
                }else {//默认居中
                    ctx.drawImage(imgPath1, width/2-img.getWidth()/3.5/2, 5, img.getWidth()/3.5, img.getHeight()/3.5);
                }
 
 
            });
            int Pages = reader.getNumberOfPages()+1;
            //循环添加图片
            for (int i = 0; i < Pages; i++) {
                ofdDoc.addAnnotation(i, annotation);
            }
        }
        System.out.println("ofd加章新位置:" + outP.toAbsolutePath().toString());
        return outP.toAbsolutePath().toString();
    }
 
    public static void main(String[] args) throws BadElementException, IOException {
      String outP = waterMark("D:/xiazai/txt_1.ofd","D:/xiazai/txt_3.ofd","D:/tomcat-guanshi/apache-tomcat-7.0.86-rizhao/webapps/water/1604043783722.jpg","2");
        System.out.println("main生成文档位置:" +outP);
    }
}

3、效果示例

OFD添加图片水印-JAVA_水印

标签:JAVA,OFD,img,水印,getWidth,3.5,org,import,ofdrw
From: https://blog.51cto.com/u_16338568/8150850

相关文章

  • 掌握JavaScript中数组遍历的7种方法
    作为JavaScript开发人员,熟悉数组的遍历和操作是非常重要的。数组遍历是处理和操作数组元素的基本需求之一。本文将介绍JavaScript中的10种常见数组遍历方法,帮助你成为数组操作的达人。数组的遍历for循环forEach方法for...of循环map方法reduce方法for...in循环filter方法for循环or循......
  • jdk环境变量JAVA_HOME修改不生效问题
    近段因一个软件问题,软件需要使用jdk1.7的环境,我现在使用的是1.8,所以下载了jdk1.7,然后将环境变量JAVA_HOME改为了1.7的路径信息然后查看jdk版本还是1.8版本,就很奇怪,为什么修改了环境变量没生效呢?解决方式一:将系统变量path中JAVA_HOME中这一项移动到最上面解决方式二:当使用安装版本......
  • 秦疆的Java课程笔记:09-12 预科 下
    09预科软件及软件开发软件可以使计算机按照事先预定好的顺序完成特定的功能。大概分为两类:系统软件,应用软件。系统软件:DOS操作系统,DiskOperatingSystem磁盘操作系统Windows,家用视窗操作系统Linux,服务器端用的比较多的UnixMac,苹果电脑AndroidIOS……应用软件......
  • Java数组_01静态初始化数组
    1、初始化  2、访问数组数据 3、遍历数组 ......
  • Spring Boot 实现 PDF 水印,实战来了!
    来源:cnblogs.com/hushaojun/p/16285486.html简介PDF(PortableDocumentFormat,便携式文档格式)是一种流行的文件格式,它可以在多个操作系统和应用程序中进行查看和打印。在某些情况下,我们需要对PDF文件添加水印,以使其更具有辨识度或者保护其版权。本文将介绍如何使用SpringBoot......
  • BigDecimal java.lang.ArithmeticException: / by zero问题
    BigDecimalbigDecimal=newBigDecimal("0.0");BigDecimalbigDecimal1=newBigDecimal(0);//一定要用compareTo去比较被除数是否为0,不能用equalsif(BigDecimal.ZERO.compareTo(bigDecimal)==0||bigDecimal==null){System.out.println("true1111");}......
  • Java拾贝第十四天——集合之Set
    SetSet是Collection的子接口,其定义如下:publicinterfaceSet<E>extendsCollection<E>与List相同,此接口也使用了泛型,使用时必须指定具体的类型。Set常见的实现子类:HashSet、TreeSetHashSetHashSet是Set的子类,其类定义如下:publicclassHashSet<E>extendsAbstractSe......
  • 详解Java LinkedList
    LinkedList简介LinkedList是List接口的实现类,基于双向链表实现,继承自AbstractSequentialList类,同时也实现了Cloneable、Serializable接口。此外还实现了Queue和Deque接口,可以作为队列或双端队列使用。LinkedList的插入删除时间复杂度:在头部或尾部插入删除元素,只需要修改头节......
  • javaapi、spark、flink 创建Iceberg表,hive 和impala无法正常读取解决
    spark、flink创建Iceberg表中,元数据存储在hive的meta_store,发现hive或者impala无法正常读取报错。事实上解决方案是在spark、flink的SQL中执行语句:addiceberg相关引擎的runntime的jar;ALTERTABLEtSETTBLPROPERTIES('storage_handler'='org.apache.iceberg.mr.hive......
  • js/javaScript实现金额千分位
    作为前端开发,我们都知道,在实际的需求开发中,难免会遇到需要将接口返回的金额进行千分位格式化的场景。千分位后的金额便于阅读,提升用户体验。金额千分位可以由前端来处理,也可以后端处理后返回给前端展示。下边就来贴一下前端的两种实现方式:方法一:constcheckNaN=(value,cb)=......