【PDFBox】PDFBox操作PDF文档之添加本地图片、添加网络图片、图片宽高自适应、图片水平垂直居中对齐

news2024/11/18 15:41:14

这篇文章,主要介绍PDFBox操作PDF文档之添加本地图片、添加网络图片、图片宽高自适应、图片水平垂直居中对齐。

目录

一、PDFBox操作图片

1.1、添加本地图片

(1)案例代码

(2)运行效果

(3)方法介绍

1.2、添加网络图片

(1)案例代码

(2)运行效果

1.3、图片宽高自适应(图片缩放)

(1)图片缩放代码

(2)运行效果

1.4、读取图片

(1)案例代码

(2)运行效果


一、PDFBox操作图片

PDFBox可以向PDF文档中添加图片对象,使用PDImageXObject表示一个图片对象,对PDF文档的内容进行操作,都需要借助于PDPageContentStream页面内容流对象来完成,PDFBox将每一个PDF页面中的所有文本、图片、表单等内容看作一个流,通过流的方式来完成内容的添加、删除、修改等操作。这里首先介绍如何使用PDFBox添加图片对象到PDF文档里面。

1.1、添加本地图片

(1)案例代码

添加本地图片,也就是读取当前磁盘中的图片,然后将这个图片写入到PDPageContentStream页面内容流里面,案例代码如下:

package pdfbox.demo.image;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;

/**
 * @version 1.0.0
 * @Date: 2023/7/15 14:51
 * @Author ZhuYouBin
 * @Description: PDFBox操作图片
 */
public class PDFBoxImageUtil {

    /**
     * 将给定路径的图片,保存到pdf文件里面
     * @param imgPath 图片路径
     * @param destPdf 生成的pdf文件路径
     * @return 返回生成的pdf文件路径
     */
    public static String generateImageToPdf(String imgPath, String destPdf) {
        try {
            // 1、创建PDF文档对象
            PDDocument doc = new PDDocument();
            // 2、创建Page页面对象
            PDPage page = new PDPage(PDRectangle.A4);
            // 3、创建图片对象
            PDImageXObject image = PDImageXObject.createFromFile(imgPath, doc);
            // 4、创建页面内容流,指定操作哪个文档中的哪个页面
            PDPageContentStream stream = new PDPageContentStream(doc, page);
            stream.drawImage(image, 10, 10); // 绘制图片到PDF页面里面
            stream.close(); // 关闭页面内容流
            doc.addPage(page); // 添加页面到PDF文档
            doc.save(destPdf); // 保存PDF文档
            doc.close(); // 关闭PDF文档
        } catch (Exception e) {
            e.printStackTrace();
        }
        return destPdf;
    }

    public static void main(String[] args) {
        String imgPath = "E:\\demo\\001.jpg";
        String destPdf = "E:\\demo\\img.pdf";
        generateImageToPdf(imgPath, destPdf);
    }
}

(2)运行效果

(3)方法介绍

PDImageXObject类中提个了一些静态方法,常见的有下面这些:

  • createFromFile(imagePath,doc)方法:采用File文件的方式读取本地磁盘中的图片。
    • imagePath参数:图片的路径。
    • doc参数:PDF文档对象。
  • getImage()方法:返回BufferedImage图片对象。
  • getSuffix()方法:返回图片的后缀类型,例如:jpg、png等。

1.2、添加网络图片

PDFBox中是没有提供读取网络图片的方法,但是可以采用下面这种方式实现读取网络图片的功能,思路如下:

  • 第一步:使用URL对象将网络图片下载到本地磁盘上。
  • 第二步:使用createFromFile()方法从本地磁盘读取刚刚下载的网络图片。

(1)案例代码

package pdfbox.demo.image;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.UUID;

/**
 * @version 1.0.0
 * @Date: 2023/7/15 15:01
 * @Author ZhuYouBin
 * @Description: PDFBox操作图片,添加网络图片到PDF文档
 */
public class PDFBoxImageUtil {

    /**
     * 将给定路径的图片,保存到pdf文件里面
     * @param imgPath 图片路径
     * @param destPdf 生成的pdf文件路径
     * @return 是否生成成功
     */
    public static String generateImageToPdf(String imgPath, String destPdf) {
        try {
            // 1、创建PDF文档对象
            PDDocument doc = new PDDocument();
            // 2、创建Page页面对象
            PDPage page = new PDPage(PDRectangle.A4);
            // 3、创建图片对象
            PDImageXObject image;
            boolean isTemp = false;
            String tempPath = null;
            if (imgPath.startsWith("http://") || imgPath.startsWith("https://")) {
                isTemp = true;
                tempPath = downloadImage(imgPath, null);
                image = PDImageXObject.createFromFile(tempPath, doc);
            } else {
                image = PDImageXObject.createFromFile(imgPath, doc);
            }
            // 4、创建页面内容流,指定操作哪个文档中的哪个页面
            PDPageContentStream stream = new PDPageContentStream(doc, page);
            stream.drawImage(image, 10, 10); // 绘制图片到PDF页面里面
            stream.close(); // 关闭页面内容流
            doc.addPage(page); // 添加页面到PDF文档
            doc.save(destPdf); // 保存PDF文档
            doc.close(); // 关闭PDF文档
            // 图片添加成功之后需要删除本地临时文件
            if (isTemp) {
                new File(tempPath).delete();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return destPdf;
    }

    /**
     * 下载网络图片到本地
     * @param imgPath 网络图片地址
     * @param fileName 文件名称
     * @return 返回本地图片的临时路径
     */
    public static String downloadImage(String imgPath, String fileName) {
        try {
            URLConnection conn = new URL(imgPath).openConnection();
            String contentType = conn.getContentType();
            System.out.println(contentType);
            // 创建临时文件目录保存图片
            File file = new File("temp");
            if (!file.exists() && !file.mkdirs()) {
                throw new RuntimeException("临时目录创建失败");
            }
            if (fileName == null || fileName.trim().equals("")) {
                fileName = UUID.randomUUID().toString();
            }
            InputStream is = conn.getInputStream();
            byte[] data = new byte[1024];
            int len;
            // 下载文件到本地临时目录
            switch (contentType) {
                case "image/jpeg":fileName += ".jpeg"; break;
                case "image/gif": fileName += ".gif"; break;
                case "image/webp":
                case "image/png": fileName += ".png"; break;
            }
            fileName = file.getAbsolutePath() + File.separator + fileName;
            FileOutputStream fos = new FileOutputStream(fileName);
            while ((len = is.read(data)) != -1) {
                fos.write(data, 0, len);
            }
            fos.close();
            is.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return fileName;
    }

    public static void main(String[] args) {
        String imgPath = "https://www.toopic.cn/public/uploads/small/1658043938262165804393852.jpg";
        String destPdf = "E:\\demo\\img.pdf";
        generateImageToPdf(imgPath, destPdf);
    }
}

(2)运行效果

1.3、图片宽高自适应(图片缩放)

前面已经能够将图片添加到PDF文档中了,但是可以发现,我们添加的图片尺寸太大的时候,超过PDF文档部分就会被遮挡,如何解决这个问题呢???对于这个问题,可以采用缩放图片的方式来解决,思路如下所示:

  • 第一步:获取图片的实际宽度、高度(JDK中获取到的图片宽高单位是【px】,需要将【px】转换成【pt】单位,转换规则:1pt = 3/4 px)。
  • 第二步:获取到PDF文档的宽度、高度(PDFBox中获取到的宽度、高度是采用【pt】作为单位的)。
  • 第三步:图片的实际宽高和PDF文档的宽高进行比较,计算缩放比例。

(1)图片缩放代码

package pdfbox.demo.image;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.UUID;

/**
 * @version 1.0.0
 * @Date: 2023/7/15 15:11
 * @Author ZhuYouBin
 * @Description: PDFBox操作图片,图片宽高自动缩放
 */
public class PDFBoxImageUtil {

    /**
     * 将给定路径的图片,保存到pdf文件里面
     *
     * @param imgPath 图片路径
     * @param destPdf 生成的pdf文件路径
     * @return 返回生成的pdf文件路径
     */
    public static boolean generateImageToPdf(String imgPath, String destPdf) {
        try {
            // 1、创建PDF文档对象
            PDDocument doc = new PDDocument();
            // 2、创建Page页面对象
            PDPage page = new PDPage(PDRectangle.A4);
            // 3、创建图片对象
            PDImageXObject image;
            if (imgPath.startsWith("http://") || imgPath.startsWith("https://")) {
                String tempPath = downloadImage(imgPath, null);
                image = PDImageXObject.createFromFile(tempPath, doc);
                imgPath = tempPath;
            } else {
                image = PDImageXObject.createFromFile(imgPath, doc);
            }
            // 4、创建页面内容流,指定操作哪个文档中的哪个页面
            PDPageContentStream stream = new PDPageContentStream(doc, page);
            // 获取图片的宽高
            float[] imageWH = getImageWH(imgPath, page.getMediaBox());
            stream.drawImage(image, imageWH[0], imageWH[1], imageWH[2], imageWH[3]); // 绘制图片到PDF页面里面
            stream.close(); // 关闭页面内容流
            doc.addPage(page); // 添加页面到PDF文档
            doc.save(destPdf); // 保存PDF文档
            doc.close(); // 关闭PDF文档
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 获取图片的宽度、高度,单位是【pt】
     *
     * @param imgPath 图片路径
     * @param box     PDF文档页面矩形区域对象,可以获取到矩形区域的宽高
     * @return 返回缩放之后的图片宽高
     */
    public static float[] getImageWH(String imgPath, PDRectangle box) {
        try {
            File file = new File(imgPath);
            InputStream is = new FileInputStream(file);
            // 判断是不是网络上的图片
            if (imgPath.startsWith("http://") || imgPath.startsWith("https://")) {
                is = new URL(imgPath).openStream();
            }
            BufferedImage bi = ImageIO.read(is);
            // px 转换成 pt 单位
            float xAxis;
            float yAxis;
            int w = bi.getWidth();
            int h = bi.getHeight();
            float width = (float) (w * 3.0 / 4); // 这里是因为 1pt = 3/4 px,pt和px单位转换
            float height = (float) (h * 3.0 / 4);
            float pw = box.getWidth() - 60; // 这里减不减60没啥关系,只是设置一下空白间距
            float ph = box.getHeight() - 60; // 这里减不减60没啥关系,只是设置一下空白间距
            if (width > pw) {
                float scale = pw / width;  // 缩放比列
                width = pw; // 宽度等于页面宽度
                height = height * scale; // 高度自动缩放
            } else {
                float scale = ph / height;  // 缩放比列
                height = ph; // 高度等于页面高度
                width = width * scale;  // 宽度自动缩放
            }
            // 计算图片在X、Y轴上的显示位置
            xAxis = (box.getWidth() - width) / 2; // X轴居中对齐
//            yAxis = box.getHeight() - height - 10; // 距离页面顶部10个pt
            yAxis = (box.getHeight() - height) / 2; // Y轴垂直居中对齐
            return new float[]{xAxis, yAxis, width, height};
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new float[]{0, 0, 0, 0};
    }

    /**
     * 下载网络图片到本地
     * @param imgPath 网络图片地址
     * @param fileName 文件名称
     * @return 返回本地图片的临时路径
     */
    public static String downloadImage(String imgPath, String fileName) {
        try {
            URLConnection conn = new URL(imgPath).openConnection();
            String contentType = conn.getContentType();
            // 创建临时文件目录保存图片
            File file = new File("temp");
            if (!file.exists() && !file.mkdirs()) {
                throw new RuntimeException("临时目录创建失败");
            }
            if (fileName == null || fileName.trim().equals("")) {
                fileName = UUID.randomUUID().toString().replaceAll("-", "");
            }
            InputStream is = conn.getInputStream();
            byte[] data = new byte[1024];
            int len;
            // 下载文件到本地临时目录
            switch (contentType) {
                case "image/jpeg":fileName += ".jpeg"; break;
                case "image/gif": fileName += ".gif"; break;
                case "image/webp":
                case "image/png": fileName += ".png"; break;
            }
            fileName = file.getAbsolutePath() + File.separator + fileName;
            FileOutputStream fos = new FileOutputStream(fileName);
            while ((len = is.read(data)) != -1) {
                fos.write(data, 0, len);
            }
            fos.close();
            is.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return fileName;
    }

    public static void main(String[] args) {
        String imgPath = "https://www.toopic.cn/public/uploads/small/1658043938262165804393852.jpg";
        String destPdf = "E:\\demo\\img.pdf";
        generateImageToPdf(imgPath, destPdf);
    }
}

(2)运行效果

1.4、读取图片

PDFBox也可以从PDF文档中读取图片,然后将其保存到本地磁盘中,保存图片可以使用JDK中提供的ImageIO类,这个类中提供了一个write()方法,可以将图片对象写入到File文件里面。

(1)案例代码

package pdfbox.demo.image;

import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.graphics.PDXObject;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;

/**
 * @version 1.0.0
 * @Date: 2023/7/15 15:11
 * @Author ZhuYouBin
 * @Description: PDFBox操作图片,从PDF文档中【读取图片】,并且保存到本地
 */
public class PDFBoxImageUtil {

    /**
     * 从给定的pdf文档里面,获取指定页面中的所有图片,并且保存到本地目录下
     * <p>
     *     pdf文档中的图片都是BASE64编码,我们能够获取到的也就只能是图片对应的BASE64字符串。
     *     所以,还需要将图片的BASE64字符串编码转换成对应的图片文件
     * </p>
     * @param pdfPath PDF文档路径
     * @param imagePath 生成的图片路径以及名称
     * @param pageNum 获取第几页的图片
     * @return 返回提取的图片本地路径
     */
    public static String readerImageFromPdf(String pdfPath, String imagePath, int pageNum) {
        try {
            // 1、加载PDF文档
            PDDocument doc = PDDocument.load(new File(pdfPath));
            // 2、遍历所有Page页面,找到指定的page页面获取图片
            int pages = doc.getNumberOfPages();
            for (int i = 0; i < pages; i++) {
                if (i != pageNum) {
                    continue;
                }
                // 获取当前Page页面
                PDPage page = doc.getPage(i);
                // 获取对应页面的资源对象
                PDResources resources = page.getResources();
                // 遍历当前页面所有内容,找出图片对象
                for (COSName cosName : resources.getXObjectNames()) {
                    PDXObject pdxObject = resources.getXObject(cosName);
                    // 判断是不是图片对象
                    if (pdxObject instanceof PDImageXObject) {
                        // 获取图片对象
                        BufferedImage image = ((PDImageXObject) pdxObject).getImage();
                        // 保存到本地磁盘里面
                        ImageIO.write(image, "JPEG", new File(imagePath));
                    }
                }
            }
            doc.close(); // 关闭PDF文档
        } catch (Exception e) {
            e.printStackTrace();
        }
        return imagePath;
    }

    public static void main(String[] args) {
        String imgPath = "E:\\img\\002.jpg";
        String destPdf = "E:\\demo\\img.pdf";
        readerImageFromPdf(destPdf, imgPath, 0);
    }
}

(2)运行效果

到此,PDFBox操作图片就介绍完啦。

综上,这篇文章结束了,主要介绍PDFBox操作PDF文档之添加本地图片、添加网络图片、图片宽高自适应、图片水平垂直居中对齐。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/756516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android手写占位式插件化框架之Activity通信、Service通信和BroadcastReceiver通信

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 前言&#xff1a; 1、什么是插件化&#xff1f; 能运行的宿主APP去加载没有下载的APK文件…

pdf转word文档怎么转?这三个实用方法给你。

PDF (Portable Document Format) 是一种广泛应用于电子文档分发的文件格式&#xff0c;它可以跨平台和保持文档格式的一致性。然而&#xff0c;有时我们需要对PDF文档进行编辑和修改&#xff0c;这时将其转换为可编辑的Word文档就变得至关重要。转换PDF为Word文档可以让我们轻松…

[Halcon3D] 3D手眼标定理论与示例解析

&#x1f4e2;博客主页&#xff1a;https://loewen.blog.csdn.net&#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;本文由 丶布布原创&#xff0c;首发于 CSDN&#xff0c;转载注明出处&#x1f649;&#x1f4e2;现…

NSSCTF刷web(2)

[NISACTF 2022]bingdundun~ bingdundun处感觉像文件包含,改upload为index 发现确实,猜测会补一个后缀.php 那常规文件包含都不行了,这里还有一个文件上传的功能,考虑phar协议 <?php$phar new Phar("test.phar"); $phar->startBuffering(); $phar->setStu…

第十一章:GCN——图卷积神经网络:全面回顾

0.摘要 图在许多应用领域中自然出现&#xff0c;包括社交分析、生物信息学和计算机视觉。图的独特能力使其能够捕捉数据之间的结构关系&#xff0c;从而可以比单独分析数据获得更多的见解。然而&#xff0c;在图上解决学习问题往往非常具有挑战性&#xff0c;因为 (1)许多类型的…

1、Java入门教程【基础】

1、环境搭建 首先java的产品叫JDK&#xff0c;必须安装JDK才能使用Java。 Java的发展史&#xff1a; 其中&#xff0c;LTS是比较稳定的版本&#xff0c;推荐比较新的LTS17版本。 JDK下载&#xff1a;JDK Development Kit 17.0.7 downloads 下载完成后&#xff0c;我们双击安…

第十一章:MULTI-SCALE CONTEXT AGGREGATION BY DILATED CONVOLUTIONS——通过膨胀卷积的多尺度上下文聚合

0.摘要 目前用于语义分割的先进模型是基于最初设计用于图像分类的卷积网络的改进。然而&#xff0c;像语义分割这样的密集预测问题在结构上与图像分类不同。在这项工作中&#xff0c;我们开发了一个专门为密集预测设计的新的卷积网络模块。所提出的模块使用膨胀卷积来系统地聚合…

【深度学习 | 计算机视觉】Focal Loss原理及其实践(含源代码)

参考文献&#xff1a; https://www.jianshu.com/p/437ce8ed0413文章目录 一、导读二、Focal Loss 原理三、实验对比3.1 使用交叉熵损失函数3.2 使用Focal Loss 损失函数3.3 总结 一、导读 Focal Loss 是一个在交叉熵&#xff08;CE&#xff09;基础上改进的损失函数&#xff…

Java正则表达式MatchResult的接口、Pattern类、Matcher类

Java正则表达式MatchResult的接口 java.util.regex.MatchResult接口表示匹配操作的结果。 此接口包含用于确定与正则表达式匹配的结果的查询方法。可以看到匹配边界&#xff0c;组和组边界&#xff0c;但不能通过MatchResult进行修改。 接口声明 以下是java.util.regex.Matc…

spring复习:(34)配置文件的方式创建ProxyFactoryBean

一、配置文件 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:c"http://www.springframework.org/s…

vscode 无法格式化python代码、无法格式化C++代码(vscode格式化失效)另一种解决办法:用外部工具yapf格式化(yapf工具)

文章目录 我真的解决方法&#xff1a;用yapfyapf工具使用方法示例格式化单个文件&#xff08;格式化前先用-d参数预先查看格式化更改内容&#xff0c;以决定是否要更改&#xff09;格式化某个目录递归格式化某个目录 我真的 神马情况&#xff0c;我的vscode死活不能格式化pyth…

路径规划算法:基于减法平均优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于减法平均优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于减法平均优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

用Python自动化处理Excel表格详解

Excel表格基础知识 Excel表格可以帮助用户创建、编辑、格式化和计算数据&#xff0c;并生成各种图表和报表。Excel表格通常用于商业、金融、科学、教育等领域。 Excel表格的常用操作 Excel表格的常用操作包括插入、删除、移动、复制、粘贴、排序和筛选、图表等。这些操作可以…

node操作MySQL数据库

本文节选自我的博客&#xff1a;node 操作 MySQL 数据库 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是MilesChen&#xff0c;偏前端的全栈开发者。&#x1f4dd; CSDN主页&#xff1a;爱吃糖的猫&#x1f525;&#x1f4e3; 我的博客&#xff1a;爱吃糖的猫&…

集群基础4——haproxy负载均衡mariadb

文章目录 一、环境说明二、安装配置mariadb三、安装配置haproxy四、验证 一、环境说明 使用haproxy对mysql多机单节点进行负载均衡。 主机IP角色安装服务192.168.161.131后端服务器1mariadb&#xff0c;3306端口192.168.161.132后端服务器2mariadb&#xff0c;3306端口192.168.…

【2023 年第二届钉钉杯大学生大数据挑战赛初赛】 初赛 A:智能手机用户监测数据分析 问题一Python代码分析

2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A&#xff1a;智能手机用户监测数据分析 问题一Python代码分析 1 题目 2023 年第二届钉钉杯大学生大数据挑战赛初赛题目 初赛 A&#xff1a;智能手机用户监测数据分析 一、问题背景 近年来&#xff0c;随着智能手机的产生&a…

STM32F10x外部中断/事件控制器(EXTI)应用

往期文章&#xff1a; STM32F1x固件库函数学习笔记&#xff08;一&#xff09; 文章目录 一、EXTI简介二、EXTI初始化结构体详解三、外部中断&#xff08;EXTI&#xff09;编程要点及例程参考文献 一、EXTI简介 外部中断/事件控制器&#xff0c;简称&#xff1a;EXTI&#x…

Jenkins打包、发布、部署

目录 前言 一、安装jdk 二、安装maven 三、安装git 四、安装jenkins 五、访问jenkins 六、创建用户 七、配置jenkins 八、执行 总结 前言 服务器&#xff1a;CentOS 7.9 64位 jdk&#xff1a;1.8 maven&#xff1a;3.9.1 git&#xff1a;git version 1.8.3.1 jenkins&a…

计算机中的数制与编码(二进制转换)

一、进制表示 1. 十进制表示 使用&#xff08;0&#xff0c;1&#xff0c;2&#xff0c;…&#xff0c;9&#xff09;十位数字表示&#xff0c;十进制运算时逢十进一。 2. 二进制表示 使用(0&#xff0c;1)两个数字表示&#xff0c;二进制运算时逢二进一。 3. 十六进制表示…

AIGC文生图:stable-diffusion-webui部署及使用

1 stable-diffusion-webui介绍 Stable Diffusion Web UI 是一个基于 Stable Diffusion 的基础应用&#xff0c;利用 gradio 模块搭建出交互程序&#xff0c;可以在低代码 GUI 中立即访问 Stable Diffusion Stable Diffusion 是一个画像生成 AI&#xff0c;能够模拟和重建几乎…