Java实现自动化pdf打水印小项目 使用技术pdfbox、Documents4j

这篇具有很好参考价值的文章主要介绍了Java实现自动化pdf打水印小项目 使用技术pdfbox、Documents4j。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

博主介绍:✌目前全网粉丝2W+,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。

涵盖技术内容:Java后端、算法、分布式微服务、中间件、前端、运维、ROS等。

博主所有博客文件目录索引:博客目录索引(持续更新)

视频平台:b站-Coder长路


源码获取

项目源码:Gitee、Github

本篇文档的视频系列讲解:Java实现自动化pdf打水印工具 开源PDF工具PDFBoxWord、Word转PDF开源工具Documents4j


一、需求说明

背景:做默默学代理需要去给每日日日练打上水印,对于重复性操作pdf编辑统一通过程序来批量处理。

目标:实现一个自定义的pdf水印工具。

第一部分:word转pdf

第二部分:pdf编辑

页眉:咨询专转本默默学课程联系官方报名处QQ:3503851091,更多资料可加群828303961
页脚:江苏专转本公众号:专转本智慧树
水印:江苏专转本网课报名vx:mmxchanglu
	属性:旋转45°,不透明度30%
右上角图片:专转本咨询群二维码.jpg
	属性:缩小比例30%

二、 调研

pdf处理工具

开源项目-pdfbox:

  • 官方网站:https://pdfbox.apache.org/

x-easypdf:国内开发,基于pdfbox。

Stirling-PDF:一款优秀的开源PDF处理工具:Stirling-PDF(Github)

  • 引用开源工具:org.apache.pdfbox

ttf文件:

  • 阿里巴巴普惠体:https://www.iconfont.cn/fonts/

word处理工具

word相关开源工具如下:

  1. Apache POI:
    • Apache POI 是一个 Java 库,可以用于处理 Microsoft Office 文档,包括 Word 文档。您可以使用 Apache POI 来读取 Word 文档并将其转换为 PDF。需要注意的是,Apache POI 主要用于读取和编辑 Word 文档,转换为 PDF 需要额外的步骤。
  2. iText:
    • iText 是一个流行的 Java 库,用于处理 PDF 文档。它可以用于将 Word 文档转换为 PDF。请注意,iText 并不是完全开源的,它有一些限制,具体取决于您的使用情况。
  3. LibreOffice:
    • LibreOffice 是一个开源办公套件,包括一个强大的文档编辑器。您可以使用 LibreOffice 的命令行接口(soffice)来将 Word 文档转换为 PDF。LibreOffice 在许多平台上都可用,并且支持多种文档格式的转换。
  4. Pandoc:
    • Pandoc 是一个通用文档转换工具,支持多种输入和输出格式。它可以将 Word 文档转换为 PDF,同时还支持许多其他文档格式。Pandoc 使用命令行进行操作。

实际选择:Documents4j

	Documents4j 是一个开源的 Java 库,用于在 Java 应用程序中进行 Microsoft Office 文档(如 Word、Excel、PowerPoint 等)的转换。它利用 Microsoft Office 的本机 API,通过启动 Microsoft Office 进程来执行文档转换。Documents4j 提供了一种简单的方式来将 Office 文档转换为其他格式,例如将 Word 文档转换为 PDF、将 Excel 表格转换为 CSV 等。
	Documents4j 的工作原理是通过将 Microsoft Office 作为外部进程启动,并与其进行通信来执行文档转换任务。这种方法使得可以利用 Microsoft Office 的强大功能来执行文档转换,同时又能够在 Java 环境中方便地进行集成和控制。
	Documents4j 提供了一个简单的 API,使得在 Java 应用程序中执行文档转换变得简单。它支持多线程操作,并且具有一定的性能优化,使得可以高效地处理大量文档转换任务。

相关实际案例:

  1. 不要在去充VIP啦 ,Java 实现 PDF、Word 互转:公众号 WeDayDayUp ,发送 案例 即可,gitee地址,https://gitee.com/HelloWangXianLin/xiaoxiao-demo

三、技术栈选择

语言选择:Java

pdf水印、编辑开源工具:pdfbox

word转pdf:Documents4j


四、功能实现

实现效果

实现功能效果:最终得到的是已经打上广告以及水印的pdf文件

Java实现自动化pdf打水印小项目 使用技术pdfbox、Documents4j,个人开源(项目&小工具),java,自动化,pdf

代码运行效果:

Java实现自动化pdf打水印小项目 使用技术pdfbox、Documents4j,个人开源(项目&小工具),java,自动化,pdf


详细功能介绍

实现思路如下

1、给定一个目录,检索该目录下所有文件,筛选出所有的docx以及PDF文件。

2、将目录下docx文件转为pdf文件,并将docx文件统一剪切到tmp目录。

3、对所有的pdf文件来进行最定义【水印+广告】处理,将所有水印处理过的pdf文件统一输出到pdf目录。【其中文件名包含有如:高数,最终输出的名字转为 2024.2.15高数日日练及答案】

页眉:咨询专转本默默学课程联系官方报名处QQ:3503851091,更多资料可加群828303961
页脚:江苏专转本公众号:专转本智慧树
水印:江苏专转本网课报名vx:mmxchanglu
	属性:旋转45°,不透明度30%
右上角图片:专转本咨询群二维码.jpg
	属性:缩小比例30%

pdf中水印增加的效果:主要就是这四个部分

Java实现自动化pdf打水印小项目 使用技术pdfbox、Documents4j,个人开源(项目&小工具),java,自动化,pdf


详细代码实现

项目目录

Java实现自动化pdf打水印小项目 使用技术pdfbox、Documents4j,个人开源(项目&小工具),java,自动化,pdf

WordUtils:word转pdf工具类
Main:任务类
images/:水印素材图片
ttfs/:ttf字体

WordUtils

package com.changlu.utils;

import com.documents4j.api.DocumentType;
import com.documents4j.api.IConverter;
import com.documents4j.job.LocalConverter;
import java.io.*;

public class WordUtils {

    /**
     * Word转PDF
     * @param filePath 源docx文件目录及名称  示例:C:\Users\93997\Desktop\watermark tools\watermarkTools\src\main\resources\2024-2-8计算机.docx
     * @param outFilePath 输出文件目录及名称 示例:C:\Users\93997\Desktop\watermark tools\watermarkTools\src\main\resources\2024-2-8.pdf
     */
    public static void wordToPdf(String filePath, String outFilePath) {
        //源文件地址
        File inputWord = new File(filePath);
        //导出文件地址
        File outputFile = new File(outFilePath);
        InputStream doc = null;
        OutputStream outputStream = null;
        try {
            doc = new FileInputStream(inputWord);
            outputStream = new FileOutputStream(outputFile);
            IConverter converter = LocalConverter.builder().build();
            //转换docx=>pdf
            boolean flag = converter.convert(doc).as(DocumentType.DOC).to(outputStream).as(DocumentType.PDF).execute();
            if (flag) {
                converter.shutDown();
            }
            doc.close();
            outputStream.close();
            System.out.println("文件名:" + outFilePath + " 转换成功!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        String filePath = "C:\\Users\\93997\\Desktop\\watermark tools\\watermarkTools\\src\\main\\resources\\2024-2-8计算机.docx";
        String outFilePath = "C:\\Users\\93997\\Desktop\\watermark tools\\watermarkTools\\src\\main\\resources\\2024-2-8.pdf";
        //word转pdf
        WordUtils.wordToPdf(filePath, outFilePath);
    }

}

Main类实现部分:第一部分

功能描述:给定一个目录,检索该目录下所有文件,筛选出所有的docx以及PDF文件。

package com.changlu;

import com.changlu.utils.WordUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType0Font;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLDecoder;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Description:
 * @Author: changlu
 * @Date: 11:19 AM
 */
public class Main {

    //处理文件目录
    private static String directoryPath = "C:\\Users\\93997\\Desktop\\日日练";

    public static void main(String[] args) {
        //任务1:给定一个目录,检索该目录下所有文件,筛选出所有的docx以及PDF文件。
        File directory = new File(directoryPath);
        //搜集所有的docx文档
        List<String> waitWorkDocs = new ArrayList<>();
        //搜集所有的pdf名称
        List<String> waitWorkPDFs = new ArrayList<>();
        //遍历目录下所有的文件
        for (File file : directory.listFiles()) {
            //筛选不是目录
            if (!file.isDirectory()) {
                if (file.getName().endsWith(".docx")) {
                    //添加docx的文件名
                    waitWorkDocs.add(file.getName());
                }else if (file.getName().endsWith(".pdf")) {
                    waitWorkPDFs.add(file.getName());
                }
            }
        }   
    }
}

Main类实现部分:第二部分

功能描述:将目录下docx文件转为pdf文件,并将docx文件统一剪切到tmp目录。

/**
 * @Description:
 * @Author: changlu
 * @Date: 11:19 AM
 */
public class Main {

    //处理文件目录
    private static String directoryPath = "C:\\Users\\93997\\Desktop\\日日练";
    private static String docxDirectoryPath = "tmp";//docs临时存放目录

    public static void main(String[] args) {
        //任务1:xxx
        
        //任务2:将目录下docx文件转为pdf文件,并将docx文件统一剪切到tmp目录。
        System.out.println("开始执行word转pdf任务...");
        //临时存放docx文件的目录 tmp,若是不存在创建
        String targetTmpDirectory = directoryPath + File.separator + docxDirectoryPath;
        if (!Files.exists(Paths.get(targetTmpDirectory))) {
            new File(targetTmpDirectory).mkdirs();
        }
        //将所有的docx进行转换,word转pdf
        for (String docxName : waitWorkDocs) {
            String originPath = directoryPath + File.separator + docxName;
            String targetPath = originPath.replace(".docx", ".pdf");
            //docx转为pdf文件
            WordUtils.wordToPdf(originPath, targetPath);
            //将docx剪切到tmp文件
            String targetTmpPath = targetTmpDirectory + File.separator + docxName;
            try {
                Files.move(Paths.get(originPath), Paths.get(targetTmpPath));
            } catch (IOException e) {
                e.printStackTrace();
            }
            //添加pdf名称到pdf集合中
            String pdfName = targetPath.substring(targetPath.lastIndexOf(File.separator) + 1);
            waitWorkPDFs.add(pdfName);
        }
    }
}

Main类实现部分:第三部分

/**
 * @Description:
 * @Author: changlu
 * @Date: 11:19 AM
 */
public class Main {

    //处理文件目录
    private static String directoryPath = "C:\\Users\\93997\\Desktop\\日日练";
    private static String docxDirectoryPath = "tmp";//docs临时存放目录

    public static void main(String[] args) {
        //任务1:xxx
        
        //任务2:xxx
        
		//任务3:对所有的pdf文件来进行最定义【水印+广告】处理,将所有水印处理过的pdf文件统一输出到pdf目录。
        System.out.println();
        System.out.println("开始处理pdf打水印、广告任务....");
        //临时存放docx文件的目录 tmp,若是不存在创建
        String targetPDFDirectory = directoryPath + File.separator + pdfDirectoryPath;
        if (!Files.exists(Paths.get(targetPDFDirectory))) {
            new File(targetPDFDirectory).mkdirs();
        }
        //遍历所有的pdf文件来去添加水印及其他任务并输出pdf
        for (String waitWorkPDFName : waitWorkPDFs) {
            String originPDFPath = directoryPath + File.separator + waitWorkPDFName;
            String targetPDFPath = targetPDFDirectory + File.separator + fileNameTransfer(waitWorkPDFName);
            //执行真正的水印+广告任务
            try {
                work(originPDFPath, targetPDFPath);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    //根据当前文件名称来匹配相应的文件名称
    public static String fileNameTransfer(String originName) {
        for (Map.Entry<String, String> entry : subjectNamesMap.entrySet()) {
            String name = entry.getKey();
            //若是当前名称中包含有科目名称
            if (originName.contains(name)) {
                return entry.getValue();
            }
        }
        return "未知" + System.currentTimeMillis() + ".pdf";
    }

    /**
     * 实际水印处理任务
     */
    public static void work(String originPDFPath, String targetPDFPath) throws Exception{
        //读取resources目录下input.pdf文件
//        InputStream is = Main.class.getClassLoader().getResourceAsStream("input.pdf");
        InputStream is = new FileInputStream(originPDFPath);
        PDDocument pdDocument = PDDocument.load(is);

        //自定义字体 C:\Users\93997\Desktop\watermark tools\watermarkTools\target\classes\ttfs
        //URLDecoder.decode() 方法来解码 URL 编码的路径,将 %20 转换回空格
//        PDType0Font font = PDType0Font.load(pdDocument, new File("C:\\Users\\93997\\Desktop\\watermark tools\\watermarkTools\\src\\main\\resources\\ttfs\\Alibaba_PuHuiTi_2.0_65_Medium_65_Medium.ttf"));
        String fontFile = URLDecoder.decode(Main.class.getClassLoader().getResource(File.separator + "ttfs" + File.separator + "Alibaba_PuHuiTi_2.0_65_Medium_65_Medium.ttf").getFile(), "UTF-8");
        PDType0Font font = PDType0Font.load(pdDocument, new File(fontFile));
        float fontSize = 10; // 设置字体大小为12

        // 设置透明度状态对象
        PDExtendedGraphicsState graphicsState = new PDExtendedGraphicsState();
        graphicsState.setNonStrokingAlphaConstant(0.2f);
        graphicsState.setAlphaSourceFlag(true);
        graphicsState.setStrokingAlphaConstant(0.2f);

        //设置新的页眉
        String headerText = "咨询专转本默默学课程联系官方报名处QQ:3503851091,更多资料可加群828303961";
        String footerText = "江苏专转本公众号:专转本智慧树";
        String waterText = "江苏专转本网课报名vx:mmxchanglu";

        //遍历原先的pdf文档
        for (PDPage page : pdDocument.getPages()) {
            float pageWidth = page.getMediaBox().getWidth();
            float pageHeight = page.getMediaBox().getHeight();
            //计算页眉的居中位置
            float headerTextWidth = font.getStringWidth(headerText) / 1000 * fontSize;
            float headerCenteredX = (pageWidth - headerTextWidth) / 2; // 计算水平居中位置
            //计算页脚的居中位置
            float footerTextWidth = font.getStringWidth(footerText) / 1000 * fontSize;
            float footerCenteredX = (pageWidth - footerTextWidth) / 2; // 计算水平居中位置

            // 创建用于页眉的内容流
            PDPageContentStream headerContentStream = new PDPageContentStream(pdDocument, page, PDPageContentStream.AppendMode.APPEND, true, true);
            headerContentStream.beginText(); // 开始文本操作
            headerContentStream.setFont(font, fontSize); // 设置字体和字号
            headerContentStream.newLineAtOffset(headerCenteredX, page.getMediaBox().getHeight() - 30); // 设置文本起始位置
            headerContentStream.showText(headerText); // 绘制页眉内容
            headerContentStream.endText(); // 结束文本操作
            headerContentStream.close(); // 关闭内容流

            // 添加页脚
            PDPageContentStream footerContentStream = new PDPageContentStream(pdDocument, page, PDPageContentStream.AppendMode.APPEND, true, true);
            footerContentStream.beginText(); // 开始文本操作
            footerContentStream.setFont(font, fontSize); // 设置字体和字号
            footerContentStream.newLineAtOffset(footerCenteredX, 30); // 设置文本起始位置
            footerContentStream.showText(footerText); // 绘制页脚内容
            footerContentStream.endText(); // 结束文本操作
            footerContentStream.close(); // 关闭内容流

            //添加水印   要求:旋转45°,不透明度30%
            float waterTextWidth = font.getStringWidth(waterText) / 1000 * 30;
            float waterCenteredX = (pageWidth - waterTextWidth) / 2;
            float waterCenteredY = pageHeight / 2;
            //创建一个水印内容流
            PDPageContentStream waterContentStream = new PDPageContentStream(pdDocument, page, PDPageContentStream.AppendMode.APPEND, true, true);
            waterContentStream.beginText();
            waterContentStream.setFont(font, 30);
            // 设置不透明度
            waterContentStream.setNonStrokingColor(0, 0, 0); // black color
            waterContentStream.setStrokingColor(0, 0, 0); // black color
            waterContentStream.setGraphicsStateParameters(graphicsState);//设置透明度
            //设置旋转文本 45° 对于tx、ty是以左下角为偏移位置中心来进行旋转角度
            waterContentStream.setTextRotation(Math.toRadians(45), 400, -50);
            //设置文本
            waterContentStream.newLineAtOffset(waterCenteredX, waterCenteredY);
            waterContentStream.showText(waterText);
            waterContentStream.endText();
            waterContentStream.close();

            //添加图片水印
            //创建一个水印内容流
            PDPageContentStream imageContentStream = new PDPageContentStream(pdDocument, page, PDPageContentStream.AppendMode.APPEND, true, true);
            // 创建图像对象
//            PDImageXObject image = PDImageXObject.createFromFile("C:\\Users\\93997\\Desktop\\watermark tools\\watermarkTools\\src\\main\\resources\\images\\ConsultationGroupQRCode.jpg", pdDocument);
            String pictureFile = URLDecoder.decode(Main.class.getClassLoader().getResource(File.separator + "images" + File.separator + "ConsultationGroupQRCode.jpg").getFile(), "UTF-8");
            PDImageXObject image = PDImageXObject.createFromFile(pictureFile, pdDocument);
            // 计算图像的宽度和高度(缩小比例为0.3)
            float imageWidth = (float) (image.getWidth() * 0.25);
            float imageHeight = (float) (image.getHeight() * 0.25);
            //具体图片位置
            float imageX = pageWidth - imageWidth - 10;
            float imageY = pageHeight - imageHeight - 10;

            // 在指定位置绘制图像
            imageContentStream.drawImage(image, imageX, imageY, imageWidth, imageHeight);
            imageContentStream.close();
        }

        //目标目录
//        File outputFile = new File("C:\\Users\\93997\\Desktop\\watermark tools\\watermarkTools\\src\\main\\resources\\output.pdf");
        File outputFile = new File(targetPDFPath);
        // 若是文件存在先进行删除
        Files.deleteIfExists(Paths.get(outputFile.toURI()));
        // 保存修改后的文档
        pdDocument.save(outputFile);
        System.out.println("转换任务:" + originPDFPath + "=>" + targetPDFPath + " 成功!");
        // 关闭文档
        pdDocument.close(); // 关闭文档
    }
}

资料获取

大家点赞、收藏、关注、评论啦~

精彩专栏推荐订阅:在下方专栏👇🏻

  • 长路-文章目录汇总(算法、后端Java、前端、运维技术导航):博主所有博客导航索引汇总
  • 开源项目Studio-Vue—校园工作室管理系统(含前后台,SpringBoot+Vue):博主个人独立项目,包含详细部署上线视频,已开源
  • 学习与生活-专栏:可以了解博主的学习历程
  • 算法专栏:算法收录

更多博客与资料可查看👇🏻获取联系方式👇🏻,🍅文末获取开发资源及更多资源博客获取🍅


整理者:长路 时间:2024.2.16文章来源地址https://www.toymoban.com/news/detail-829959.html

到了这里,关于Java实现自动化pdf打水印小项目 使用技术pdfbox、Documents4j的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【Linux】项目自动化构建工具-make和Makefile 的使用和进度条的实现

    什么是makefile 在我们以后的工作环境中,一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作 Linux中提供了自动化

    2024年02月07日
    浏览(68)
  • 【办公自动化】使用Python一键提取PDF中的表格到Excel

      🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 一、Python处理Excel 二、提取PDF表格到excel 三、往期推荐 文末推荐  文末福利   Pyth

    2024年02月13日
    浏览(58)
  • 从0开始搭建前端项目:使用ChatGPT实现高自动化完成率,提高开发效率并掌握最新前端技术

    大家好,我是老李,我很高兴向您介绍我即将发布的一系列关于前端项目开发的文章。在这个系列中,我将借用 ChatGPT 的帮助,从零开始搭建一个前端项目,并尝试达到 70% 以上的自动化完成率。 这个系列的文章将带您从搭建项目的基础开始,一步步实现一个完整的前端项目

    2024年02月06日
    浏览(82)
  • 【办公自动化】使用Python一键提取PDF中的表格到Excel(文末送书5本)

      🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 一、Python处理Excel 二、提取PDF表格到excel 三、往期推荐 文末推荐  文末福利   Pyth

    2024年02月14日
    浏览(58)
  • 哪些测试项目可以使用自动化测试?

    通常,软件测试v的测试方式分为人工测试和自动化测试,人工测试是由测试人员编写并执行测试用例,然后观察测试结果与预期结果是否一致的过程;自动化测试是通过测试工具来代替或辅助人工去验证系统功能是否有问题的过程。   采用自动化测试需要满足以下3个条件。

    2024年02月07日
    浏览(40)
  • 你不知道的自动化?使用自动化测试在项目中创造高业务价值...

    脱离数据支撑谈价值多少有点底气不足,但脱离自动化的初衷和背景谈质量数据度量,也有些南辕北辙。 Python自动化测试:https://www.bilibili.com/video/BV16G411x76E/ 自动化测试的价值体现? 基于团队内部,从解决问题角度出发的技术落地实践和数据度量; 基于跨团队合作,从KPI

    2024年02月03日
    浏览(44)
  • Jenkins+Docker 实现一键自动化部署项目

    1.安装Jenkins 注:因为Jenkins容器里的用户是Jenkins,而主机用户不是Jenkins,就算是root也一样会报错:/var/jenkins_home/copy_reference_file.log: Permission denied,这个时候就需要在主机上面给主机地址赋予访问Jenkins容器的权限,Jenkins内部用的是uid 1000的user。 -privileged=true让容器具有root权限

    2024年02月16日
    浏览(51)
  • Jenkins + Gitlab 实现项目自动化构建及部署

      通俗来讲就是本地项目 push 到 gitlab 后, Jenkins 能够识别到项目的更新并自动构建部署;  本文以实际操作的方式来表述详细配置过程及避开配置 Jenkins 时的坑. 默认电脑已经安装了虚拟机, 默认gitlab 上已经有了你想要部署的项目, 部署了 maven 和 jdk 并配置了环境变量!!! 1 执行

    2024年02月16日
    浏览(58)
  • uniapp:HbuildeX项目实现jenkins自动化打包上传

    前序: 基于HBuilderX创建的项目。 配置uniapp 指令式打包APP、微信小程序、H5。 ubuntu系统上的jenkins部署基础指令,发送给windows服务器上,windows服务器使用HBuilderX软件的cli.exe执行相关cli命令打包,然后jenkins再调用接口下载打包后的文件。 可实现多线程同时打包。 大致流程:

    2024年02月16日
    浏览(63)
  • 接口自动化测试框架(Java 实现)

    需求点 需求分析 通过 yaml 配置接口操作和用例 后续新增接口和测试用例只需要编写 yaml 文件即可实现。 可以支持接口间的参数传递 具有参数依赖的接口可以进行变量的抽取和参数赋值。 支持全局、用例维度的变量存储 比如时间截命名法中要用到的时间截后缀。 支持用例

    2024年01月18日
    浏览(55)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包