开源PDF工具 Apache PDFBox 认识及使用(知识点+案例)
文章目录
- 前言
- 源码获取
- 一、认识PDFBox
- 二、导入依赖
- 三、基础功能
- demo1:读取pdf所有内容
- demo2:读取所有页内容(分页)
- demo3:添加页眉、页脚
- demo4:添加居中45°文字水印
- demo5:添加图片到右上角
- 参考文章
- 资料获取
前言
博主介绍:✌目前全网粉丝2W+,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。
涵盖技术内容:Java后端、算法、分布式微服务、中间件、前端、运维、ROS等。
博主所有博客文件目录索引:博客目录索引(持续更新)
视频平台:b站-Coder长路
源码获取
项目源码:Gitee、Github
本篇文档的视频系列讲解:Java实现自动化pdf打水印工具 开源PDF工具PDFBoxWord、Word转PDF开源工具Documents4j
一、认识PDFBox
Apache PDFBox库是一个开源的Java工具,专门用于处理PDF文档。它允许用户创建全新的PDF文件,编辑现有的PDF文档,以及从PDF文件中提取内容。
功能:创建、渲染、打印、合并、拆分、加密、解密、签名等多种操作PDF文件的功能,包括一个命令行工具,可以用于执行各种PDF处理任务。支持文本提取和搜索,以及将PDF转换为其他格式,如图片和文本。
应用场景:广泛应用于企业和开发者构建PDF处理相关的应用程序和工具。
Apache PDFBox具备以下主要功能:
- 从PDF文件中提取Unicode文本。
- 将单个PDF文件拆分成多个文件,或将多个PDF文件合并成一个。
- 从PDF表单中提取数据,或填写PDF表单。
- 验证PDF文件是否符合PDF/A-1b标准。
- 使用标准的Java打印API打印PDF文件。
- 将PDF文件另存为图像格式,如PNG或JPEG。
- 从零开始创建PDF文件,包括嵌入字体和图像。
- 对PDF文件进行数字签名。
二、导入依赖
<dependencies><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.28</version></dependency>
</dependencies>
三、基础功能
demo1:读取pdf所有内容
package com.changlu.demos;import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;import java.io.File;
import java.net.URLDecoder;/*** @Description:* @Author: changlu* @Date: 1:28 PM*/
public class Demo1 {public static void main(String[] args) throws Exception{//读取resources目录下input.pdf文件String inputFile = URLDecoder.decode(Demo1.class.getClassLoader().getResource("input.pdf").getFile(), "UTF-8");PDDocument pdDocument = PDDocument.load(new File(inputFile));PDFTextStripper pdfTextStripper = new PDFTextStripper();//读取pdf中所有的文件String fullText = pdfTextStripper.getText(pdDocument);System.out.println(fullText);}
}
demo2:读取所有页内容(分页)
package com.changlu;import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;import java.io.InputStream;/*** @Description:* @Author: changlu* @Date: 11:19 AM*/
public class Main {public static void main(String[] args) throws Exception{//读取resources目录下input.pdf文件InputStream is = Main.class.getClassLoader().getResourceAsStream("input.pdf");PDDocument pdDocument = PDDocument.load(is);PDFTextStripper pdfTextStripper = new PDFTextStripper();//读取所有的分页for (int i = 1; i <= pdDocument.getNumberOfPages(); i++) {//设置起始-结束页 这里设置指定某页pdfTextStripper.setStartPage(i);pdfTextStripper.setEndPage(i);//读取每一页String pageText = pdfTextStripper.getText(pdDocument);System.out.println(String.format("第%s页读取内容:", i));System.out.println(pageText);}}
}
demo3:添加页眉、页脚
要求:页眉页脚居中显示。
package com.changlu.demos;import com.changlu.Main;
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.InputStream;
import java.net.URLDecoder;
import java.nio.file.Files;
import java.nio.file.Paths;/*** @Description: 添加页眉、页脚* @Author: changlu* @Date: 1:38 PM*/
public class Demo3 {public static void main(String[] args) throws Exception{//读取resources目录下input.pdf文件InputStream is = Main.class.getClassLoader().getResourceAsStream("input.pdf");PDDocument pdDocument = PDDocument.load(is);//自定义字体 C:\Users\93997\Desktop\watermark tools\watermarkTools\target\classes\ttfs//URLDecoder.decode() 方法来解码 URL 编码的路径,将 %20 转换回空格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 = "江苏专转本公众号:专转本智慧树";//遍历原先的pdf文档for (PDPage page : pdDocument.getPages()) {float pageWidth = page.getMediaBox().getWidth();//计算页眉的居中位置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(); // 关闭内容流}//目标目录 Thread.currentThread().getContextClassLoader().getResource("").getPath() 当前工程目录路径//String targetPDFPath = URLDecoder.decode(Demo3.class.getClassLoader().getResource("resources").getPath() + File.separator + "output.pdf", "UTF-8");
// String targetPDFPath = URLDecoder.decode(Main.class.getClassLoader().getResource("output.pdf").getFile(), "UTF-8");String targetPDFPath = "F:\\00核心知识、成果、视频产出区\\技术视频\\2024.2.15 自制默默学打水印工具 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("转换任务:" + targetPDFPath + " 成功!");// 关闭文档pdDocument.close(); // 关闭文档}
}
效果:
demo4:添加居中45°文字水印
要求:对pdf每页都添加上旋转45°水印,透明度为20%。
package com.changlu.demos;import com.changlu.Main;
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.InputStream;
import java.net.URLDecoder;
import java.nio.file.Files;
import java.nio.file.Paths;/*** @Description: Apache PDFBox案例:对pdf每页都添加上旋转45°水印。* @Author: changlu* @Date: 1:38 PM*/
public class Demo4 {public static void main(String[] args) throws Exception{//读取resources目录下input.pdf文件InputStream is = Main.class.getClassLoader().getResourceAsStream("input.pdf");PDDocument pdDocument = PDDocument.load(is);//自定义字体 C:\Users\93997\Desktop\watermark tools\watermarkTools\target\classes\ttfs//URLDecoder.decode() 方法来解码 URL 编码的路径,将 %20 转换回空格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));// 设置透明度状态对象PDExtendedGraphicsState graphicsState = new PDExtendedGraphicsState();graphicsState.setNonStrokingAlphaConstant(0.2f);graphicsState.setAlphaSourceFlag(true);graphicsState.setStrokingAlphaConstant(0.2f);//设置水印名String waterText = "江苏专转本网课报名vx:mmxchanglu";//遍历原先的pdf文档for (PDPage page : pdDocument.getPages()) {float pageWidth = page.getMediaBox().getWidth();float pageHeight = page.getMediaBox().getHeight();//添加水印 要求:旋转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 colorwaterContentStream.setStrokingColor(0, 0, 0); // black colorwaterContentStream.setGraphicsStateParameters(graphicsState);//设置透明度//设置旋转文本 45° 对于tx、ty是以左下角为偏移位置中心来进行旋转角度waterContentStream.setTextRotation(Math.toRadians(45), 400, -50);//设置文本waterContentStream.newLineAtOffset(waterCenteredX, waterCenteredY);waterContentStream.showText(waterText);waterContentStream.endText();waterContentStream.close();}//目标目录 Thread.currentThread().getContextClassLoader().getResource("").getPath() 当前工程目录路径String targetPDFPath = "F:\\00核心知识、成果、视频产出区\\技术视频\\2024.2.15 自制默默学打水印工具 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("转换任务:" + targetPDFPath + " 成功!");// 关闭文档pdDocument.close(); // 关闭文档}
}
效果:
demo5:添加图片到右上角
要求:将图片缩小25%后插入到右上角。
package com.changlu.demos;import com.changlu.Main;
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.InputStream;
import java.net.URLDecoder;
import java.nio.file.Files;
import java.nio.file.Paths;/*** @Description: Apache PDFBox案例:将图片缩小25%后插入到右上角。* @Author: changlu* @Date: 1:38 PM*/
public class Demo5 {public static void main(String[] args) throws Exception{//读取resources目录下input.pdf文件InputStream is = Main.class.getClassLoader().getResourceAsStream("input.pdf");PDDocument pdDocument = PDDocument.load(is);//自定义字体 C:\Users\93997\Desktop\watermark tools\watermarkTools\target\classes\ttfs//URLDecoder.decode() 方法来解码 URL 编码的路径,将 %20 转换回空格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));//遍历原先的pdf文档for (PDPage page : pdDocument.getPages()) {float pageWidth = page.getMediaBox().getWidth();float pageHeight = page.getMediaBox().getHeight();//添加图片水印//创建一个水印内容流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();}//目标目录 Thread.currentThread().getContextClassLoader().getResource("").getPath() 当前工程目录路径String targetPDFPath = "F:\\00核心知识、成果、视频产出区\\技术视频\\2024.2.15 自制默默学打水印工具 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("转换任务:" + targetPDFPath + " 成功!");// 关闭文档pdDocument.close(); // 关闭文档}
}
效果:
参考文章
[1]. 使用 Apache PDFBox 操作PDF文件
[2]. Java使用pdfbox将已有的pdf添加页眉
[3]. 基于pdfbox实现的pdf添加文字水印工具
资料获取
大家点赞、收藏、关注、评论啦~
精彩专栏推荐订阅:在下方专栏👇🏻
- 长路-文章目录汇总(算法、后端Java、前端、运维技术导航):博主所有博客导航索引汇总
- 开源项目Studio-Vue—校园工作室管理系统(含前后台,SpringBoot+Vue):博主个人独立项目,包含详细部署上线视频,已开源
- 学习与生活-专栏:可以了解博主的学习历程
- 算法专栏:算法收录
更多博客与资料可查看👇🏻获取联系方式👇🏻,🍅文末获取开发资源及更多资源博客获取🍅
相关文章:

开源PDF工具 Apache PDFBox 认识及使用(知识点+案例)
文章目录 前言源码获取一、认识PDFBox二、导入依赖三、基础功能demo1:读取pdf所有内容demo2:读取所有页内容(分页)demo3:添加页眉、页脚demo4:添加居中45文字水印demo5:添加图片到右上角 参考文…...

微软.NET6开发的C#特性——委托和事件
我是荔园微风,作为一名在IT界整整25年的老兵,看到不少初学者在学习编程语言的过程中如此的痛苦,我决定做点什么,下面我就重点讲讲微软.NET6开发人员需要知道的C#特性,然后比较其他各种语言进行认识。 C#经历了多年发展…...

卷积神经网络的基本结构
卷积神经网络的基本结构 与传统的全连接神经网络一样,卷积神经网络依然是一个层级网络,只不过层的功能和形式发生了变化。 典型的CNN结构包括: 数据输入层(Input Layer)卷积层(Convolutional Layer&#x…...
python:使用GDAL库读取遥感影像指定行列数/经纬度坐标的像素值
作者:CSDN @ _养乐多_ 本文将介绍如何使用GDAL库来读取单波段遥感影像数据,如何获取指定行列位置的像素的经纬度坐标,并根据像素行列数或者经纬度坐标获取像素值。代码由python实现。 文章目录 一、读取影像二、获取指定行列位置的像素坐标三、根据地理坐标获取像素值四、根…...

Redis篇----第一篇
系列文章目录 文章目录 系列文章目录前言一、什么是 Redis?二、Redis 与其他 key-value 存储有什么不同?三、Redis 的数据类型?四、使用 Redis 有哪些好处?五、Redis 相比 Memcached 有哪些优势?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住…...

C语言-----用二维数组解决菱形的打印问题
1.打印菱形,多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和正斜线的长度。 #include <stdio.h>int main() {int n0;while(scanf("%d",&n)! EOF){int i0;int j0;f…...

.NET Core WebAPI中使用swagger版本控制,添加注释
一、效果 二、实现步骤 在代码中添加注释 在项目属性中生成API文档 在Program中注册Swagger服务并配置文档信息 // 添加swagger注释 builder.Services.AddSwaggerGen(x > {x.SwaggerDoc("v1", new OpenApiInfo { Title "Swagger标题", Version "…...

css篇---移动端适配的方案有哪几种
移动端适配 移动端适配是指同一个页面可以在不同的移动端设备上都有合理的布局。主流实现的方案有 响应式布局通过rem或者vw,vh 等实现不同设备有相同的比例而实现适配 首先需要了解viewport 【视口】 视口代表了一个可看见的多边形区域(通常来说是矩形࿰…...

一、部署Oracle
部署Oracle 一、Docker部署1.Oracle11g1.1 测试环境1.1.1 拉取镜像1.1.2 启动容器1.1.3 配置容器环境变量1.1.4 修改sys、system用户密码1.1.5 创建表空间1.1.6 创建用户并授权1.1.5 使用DBeaver测试连接 二、安装包部署 一、Docker部署 1.Oracle11g 1.1 测试环境 当前只能用…...
11-编写自动化测试
上一篇: 10-通用类型、特质和生命周期 Edsger W. Dijkstra 在 1972 年发表的文章《The Humble Programmer》中说:"程序测试可以非常有效地显示错误的存在,但对于显示错误的不存在却无能为力。这并不意味着我们不应该尽可能多地进行测试&…...

爱上JVM——常见问题(一):JVM组成
1 JVM组成 1.1 JVM由那些部分组成,运行流程是什么? 难易程度:☆☆☆ 出现频率:☆☆☆☆ JVM是什么 Java Virtual Machine Java程序的运行环境(java二进制字节码的运行环境) 好处: 一次编写&…...
C#系列-EF扩展框架AutoMapper应用实例(40)
AutoMapper是一个对象到对象的映射器,它用于将一个对象的属性映射到另一个对象的属性。它主要用于在应用程序的不同层之间传输数据时,自动将数据传输对象(DTOs)映射到领域模型,或者将领域模型映射到视图模型等。 下面…...

DataX源码分析-插件机制
系列文章目录 一、DataX详解和架构介绍 二、DataX源码分析 JobContainer 三、DataX源码分析 TaskGroupContainer 四、DataX源码分析 TaskExecutor 五、DataX源码分析 reader 六、DataX源码分析 writer 七、DataX源码分析 Channel 八、DataX源码分析-插件机制 文章目录 系列文章…...
容器高级知识: 适配器模式与 Sidecar 模式的区别
适配器模式与 Sidecar 模式的区别 在 Kubernetes 中,适配器模式和 Sidecar 模式都是扩展您的主应用程序容器功能的方法,但它们具有不同的目的和功能: Sidecar 模式: 通用目的: 为主应用程序提供 补充功能࿰…...
使用Xdisplay将ipad作为扩展显示器Agent闪退问题
1. 正常流程贴子挺多,可以参考这几篇 https://blog.csdn.net/Shi_Xueqing/article/details/129744496 如何将ipad作为win10的扩展屏(使用USB线连接)_ipad win usb 上网-CSDN博客 2.在进行pc端软件设置的时候发生闪退 解决方法:…...

DVXplorer事件相机入门
DV官方文档:Get Started DV (inivation.gitlab.io) DV事件相机的ROS包:https://github.com/uzh-rpg/rpg_dvs_ros 事件相机的资源汇总:https://github.com/uzh-rpg/event-based_vision_resources 1.DV事件相机ROS包驱动程序安装 注意&#x…...

ubuntu屏幕小的解决办法
1. 安装vmware tools , 再点自适应客户机 执行里面的vmware-install.pl这个文件 :sudo ./vmware-install.pl 执行不了可以放到家目录,我放在了/home/book 里面 最后点这个自适应客户机 然后我这里点不了是因为我点了控制台视图和拉伸客户机,…...

黑群晖一键修复:root、AME、DTS、转码、CPU型号等
食用方法:SSH连接群晖使用临时root权限执行 AME3.x激活补丁 只适用于x86_64的:DSM7.x Advanced Media Extensions (AME)版本3.0.1-2004、3.1.0-3005 激活过程需要下载官方的解码包,过程较慢,耐心等待。。。 DSM7.1和7.2的AME版…...

Repo命令使用实例(三十八)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...
2024年华为OD机试真题-分披萨-Python-OD统一考试(C卷)
题目描述: “吃货”和“馋嘴”两人到披萨店点了一份铁盘(圆形)披萨,并嘱咐店员将披萨按放射状切成大小相同的偶数扇形小块。但是粗心服务员将披萨切成了每块大小都完全不同奇数块,且肉眼能分辨出大小。 由于两人都想吃到最多的披萨,他们商量了一个他们认为公平的分法:从…...

数据库系统概论(十七)超详细讲解数据库规范化与五大范式(从函数依赖到多值依赖,再到五大范式,附带例题,表格,知识图谱对比带你一步步掌握)
数据库系统概论(十七)超详细讲解数据库规范化与五大范式(从函数依赖到多值依赖,再到五大范式,附带例题,表格,知识图谱对比带你一步步掌握) 前言一、为什么需要规范化1. 我们先想一个…...

YOLOv8n行人检测实战:从数据集准备到模型训练
YOLOv8n行人检测实战:从数据集准备到模型训练 一、为什么选择YOLOv8?二、环境准备2.1 环境配置解析 三、安装Ultralytics框架四、数据集准备与理解4.1 数据集下载4.2 数据集结构4.3 YOLO标签格式解析 五、数据集可视化:理解标注数据5.1 可视化…...
【HarmonyOS 5】教育开发实践详解以及详细代码案例
以下是基于 HarmonyOS 5 的教育应用开发实践详解及核心代码案例,结合分布式能力与教育场景需求设计: 一、教育应用核心开发技术 ArkTS声明式UI 使用 State 管理学习进度状态,LocalStorageProp 实现跨页面数据同步(如课程…...

深度学习环境配置指南:基于Anaconda与PyCharm的全流程操作
一、环境搭建前的准备 1. 查看基础环境位置 conda env list 操作说明:通过该命令确认Anaconda默认环境(base)所在磁盘路径(如D盘),后续操作需跳转至该磁盘根目录。 二、创建与激活独立虚拟环境 1. 创…...

Cursor快速梳理ipynb文件Prompt
1. 整体鸟瞰 请在不运行代码的前提下,总结 <文件名.ipynb> 的主要目的、核心逻辑流程和输出结果。阅读整个项目目录,列出每个 .ipynb / .py 文件的角色,以及它们之间的数据依赖关系(输入→处理→输出)。2. 结构…...

art-pi2 上手记录(二)
功能比较庞杂,写得不好,抛砖引玉 预备知识 stm32 默认从主闪存0x08000000启动 art-pi2的psram 映射0x90000000 art-pi2的8线ospi flash 映射0x70000000 stm32h7比较灵活,通过修改选项字节,可以实现从 0x0000 0000 到 0x3FFF 0…...
如何通过外网访问内网?哪个方案比较好用?跨网远程连接网络知识早知道
广域网(英语:Wide Area Network,缩写为 WAN),又称外网、公网。是连接不同地区局域网或城域网计算机通信的远程网。 局域网(LAN),全称为Local Area Network,指在较小的地理区域内,通…...
wordpress+woocommerce电商平台搭建方案的优势分析
以下是WordPress WooCommerce电商平台搭建方案的优势分析: 技术架构与功能扩展优势 强大的插件生态系统:WordPress拥有超过58000个插件,WooCommerce作为其中最受欢迎的电商插件,提供了丰富的功能扩展选项,如支持超过…...
阿里140 补环境日志
所有属性值是 __cheng________ 都是我做的防止套代理 非140环境检测代码 这个日志绝大多数 是做和浏览器tostring结果 处理一致 方法: toString 函数: ...... 结果: ..... 当前代码补了事件和dom 实际手补 比这少些 下方为环境日志: VM526 vm.js:…...
ES6——对象扩展之Set对象
在ES6(ECMAScript 2015)中,Set 对象允许存储任何类型的唯一值,无论是原始值还是对象引用。Set 对象有一些有用的方法,可以操作集合中的数据。以下是一些常用的 Set 对象方法: 方法描述 add 向 Set 对象添加…...