当前位置: 首页 > news >正文

使用poi+itextpdf把word转成pdf

使用 Apache POI 和 iTextPDF 将 Word 转换为 PDF 需要分两步操作:先用 POI 读取 Word 内容,再用 iText 生成 PDF。

apache poi官方文档:Apache POI™ - Javadocs

以下是详细的代码实现示例:


环境准备

在 pom.xml 中添加依赖:

<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>${poi.version}</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>${poi.version}</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>${poi.version}</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>html2pdf</artifactId><version>3.0.2</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.6</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency>

完整代码示例

1.入口类
package org.example;import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.PdfWriter;
import org.apache.poi.xwpf.usermodel.IBodyElement;
import org.apache.poi.xwpf.usermodel.XWPFDocument;import java.io.*;
import java.util.List;/*** 用poi和itextpdf实现docx转pdf方法** @author lyl* @version v1.0* @since 2025/4/11*/
public class Main {public static void main(String[] args) throws IOException {// 打开 docx 文件FileInputStream fis = new FileInputStream("D:\\testaa\\11.docx");XWPFDocument doc=new XWPFDocument(fis);//处理bodyList<IBodyElement> bodyElementList=doc.getBodyElements();Document pdfDoc = createPdf("D:\\testaa\\22.pdf");try {BodyElementUtil.createBody(bodyElementList,pdfDoc);} catch (DocumentException e) {throw new RuntimeException(e);}doc.close();fis.close();}/*** 生成pdf文档** @param pdfFilePath* @return*/public static Document createPdf(String pdfFilePath) {try {// 创建 PDF 文档Document pdfDoc = new Document();File htmlFile = new File(pdfFilePath);if (!htmlFile.exists()) {String dic = htmlFile.getParent();if (!new File(dic).exists()) {new File(dic).mkdirs();}htmlFile.createNewFile();}PdfWriter.getInstance(pdfDoc, new FileOutputStream(pdfFilePath));pdfDoc.open();return pdfDoc;} catch (Exception e) {e.printStackTrace();}return null;}
}
2.处理body元素的工具类
package org.example;import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import org.apache.poi.xwpf.usermodel.IBodyElement;import org.apache.poi.xwpf.usermodel.XWPFTable;import java.util.List;/*** 处理body元素的工具类** @author lyl* @version v1.0* @since 2025/4/11*/
public class BodyElementUtil {/*** 转换成itextpdf的格式** @param bodyElementList*/public static void createBody(List<IBodyElement> bodyElementList, Document pdfDoc) throws DocumentException {for (IBodyElement bodyElement : bodyElementList) {System.out.println(bodyElement.getElementType().name());switch (bodyElement.getElementType()) {case PARAGRAPH:List<Paragraph> paragraphs = ParagraphUtil.createParagraph(bodyElement);for (Paragraph paragraph : paragraphs) {pdfDoc.add(paragraph);}break;case TABLE:List<XWPFTable> tables =   bodyElement.getBody().getTables();PdfPTable allTable=new PdfPTable(1);for(XWPFTable doctable:tables) {PdfPTable pdfTable = TableUtil.createTable(doctable);PdfPCell cell = new PdfPCell(pdfTable);cell.setBorder(0);allTable.addCell(cell);}pdfDoc.add(allTable);break;default:break;}}pdfDoc.close();System.out.println("结束:");}}
3.处理段落,读取文字大小,字体类型转换成pdf的字体,文字大小
package org.example;import com.itextpdf.text.*;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcBorders;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;/*** 段落文本处理类** @author lyl* @version v1.0* @since 2025/4/11*/
public class ParagraphUtil {public static List<Paragraph> createParagraph(IBodyElement bodyElement) {System.out.println("创建段落");List<XWPFParagraph> paragraphs = bodyElement.getBody().getParagraphs();List<Paragraph> paragraphsList = new ArrayList<>();for (int i = 0; i < paragraphs.size(); i++) {Paragraph p = new Paragraph();XWPFParagraph paragraph = paragraphs.get(i);System.out.println("段落内容:" + paragraph.getText());System.out.println("part:" + paragraph.getPart().getPackagePart().getContentType());System.out.println("part name:" + paragraph.getPart().getPackagePart().getPartName());ParagraphAlignment alignment = paragraph.getAlignment();System.out.println("段落对齐方式 name:" + alignment.name());System.out.println("段落对齐方式 value:" + alignment.getValue());System.out.println("style" + paragraph.getStyle());System.out.println("文字对齐方式" + paragraph.getFontAlignment());paragraphsList.add(getPhase(paragraph));}return paragraphsList;}/*** 单元格解析** @param paragraph* @return*/private static Paragraph getPhase(XWPFParagraph paragraph) {Paragraph pa = new Paragraph();// 获取段落对齐方式ParagraphAlignment alignment = paragraph.getAlignment();// 遍历段落中的所有文本for (XWPFRun run : paragraph.getRuns()) {if (null == run) {continue;}//设置图片List<Image> images = setPicture(run);if (null != images) {for (Image image : images) {pa.add(image);}}if (null == run.getText(0)) {return null;}Chunk chunk = new Chunk(run.getText(0), setFont(run));pa.add(chunk);}if (alignment.getValue() == ParagraphAlignment.CENTER.getValue()) {pa.setAlignment(Element.ALIGN_CENTER);} else if (alignment.getValue() == ParagraphAlignment.RIGHT.getValue()) {pa.setAlignment(Element.ALIGN_RIGHT);} else if (alignment.getValue() == ParagraphAlignment.LEFT.getValue()) {pa.setAlignment(Element.ALIGN_LEFT);}return pa;}/*** 设置图片** @param run*/private static List<Image> setPicture(XWPFRun run) {if (null != run.getEmbeddedPictures() && run.getEmbeddedPictures().size() > 0) {List<Image> imagelist = new ArrayList<>();for (XWPFPicture pic : run.getEmbeddedPictures()) {try {
//                    Paragraph p = new Paragraph();
//                    p.add(getimage(pic.getPictureData()));
//                    p.setAlignment(Element.ALIGN_CENTER);Image image = getimage(pic.getPictureData());imagelist.add(image);} catch (BadElementException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}}return imagelist;}return null;}/*** 设置字体** @param run* @return*/private static Font setFont(XWPFRun run) {try {BaseFont bf = null;bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);Font font = null;if (run.isBold()) {font = new Font(bf, run.getFontSize(), Font.BOLD, BaseColor.BLACK);} else {font = new Font(bf, run.getFontSize(), Font.NORMAL, BaseColor.BLACK);if (null != run.getFontFamily() && run.getFontFamily().equals("黑体")) {//设置为黑体font = new Font(bf, run.getFontSize(), Font.BOLD, BaseColor.BLACK);}}return font;} catch (DocumentException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}}/*** 读取图片** @param picdata* @return* @throws BadElementException* @throws IOException*/private static Image getimage(XWPFPictureData picdata) throws BadElementException, IOException {byte[] bytepic = picdata.getData();Image imag = Image.getInstance(bytepic);return imag;}}

4.处理表格,包含行合并,列合并,以及表格里有图片

package org.example;import com.itextpdf.text.*;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcBorders;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;import java.io.IOException;
import java.util.HashSet;
import java.util.Set;/*** 表格文本处理类** @author lyl* @version v1.0* @since 2025/4/11*/
public class TableUtil {public static PdfPTable createTable(XWPFTable doctable) {// 获取表格的列数int cols = doctable.getRow(0).getTableCells().size();PdfPTable allTable=new PdfPTable(1);for (int i = 0; i < doctable.getRows().size(); i++) {XWPFTableRow row = doctable.getRows().get(i);//如果这一行都没有边框样式,则合并单元格int noBorder = 0;Set<PdfPCell> cells = new HashSet<>();for (XWPFTableCell cell : row.getTableCells()) {// 获取单元格背景颜色CTTcPr cellPr = cell.getCTTc().getTcPr();CTTcBorders cellBorders = null;if (null != cellPr) {// 获取单元格边框cellBorders = cellPr.getTcBorders();}PdfPCell  pdfCell = getPhase(cell);if (null == pdfCell) {pdfCell = new PdfPCell(new Paragraph(cell.getText()));}if (cellBorders != null) {pdfCell = setBorder(pdfCell, cellBorders);} else {pdfCell.setBorder(0);}if (cellBorders == null) {noBorder++;}cells.add(pdfCell);}PdfPTable ptable = new PdfPTable(cells.size());//检 查是否需要合并if (noBorder == cells.size()) {//从第一格开始合并单元格int number=0;for (PdfPCell cell : cells) {if(number==0){//合并列格cell.setColspan(cols);//合并行//cell.setRowspan(2);}ptable.addCell(cell);}} else {for (PdfPCell cell : cells) {ptable.addCell(cell);}}PdfPCell lastCell= new PdfPCell(ptable);lastCell.setBorder(0);allTable.addCell(lastCell);}return allTable;}/*** 单元格解析** @param cell* @return*/private static PdfPCell getPhase(XWPFTableCell cell) {PdfPCell cell1 = new PdfPCell();// 遍历单元格中的所有段落for (XWPFParagraph paragraph : cell.getParagraphs()) {Paragraph pdfParaghs = new Paragraph(paragraph.getText());// 获取段落对齐方式ParagraphAlignment alignment = paragraph.getAlignment();if (alignment.getValue() == ParagraphAlignment.CENTER.getValue()) {pdfParaghs.setAlignment(Element.ALIGN_CENTER);} else if (alignment.getValue() == ParagraphAlignment.RIGHT.getValue()) {pdfParaghs.setAlignment(Element.ALIGN_RIGHT);} else if (alignment.getValue() == ParagraphAlignment.LEFT.getValue()) {pdfParaghs.setAlignment(Element.ALIGN_LEFT);}// 遍历段落中的所有文本for (XWPFRun run : paragraph.getRuns()) {if (null == run) {continue;}//设置图片Set<Image> images = setPicture(run);if (null != images) {for (Image image : images) {cell1.addElement(image);}} else if (null == run.getText(0)) {// pdfParaghs.add(new Paragraph(""));cell1.addElement(new Paragraph(""));} else {Chunk chunk = new Chunk(run.getText(0), setFont(run));// pdfParaghs.add(chunk);cell1.addElement(chunk);}}}return cell1;}/*** 设置字体样式连框** @param cellBorders* @return* @throws DocumentException* @throws IOException*/private static PdfPCell setBorder(PdfPCell cell1, CTTcBorders cellBorders) {if (null == cell1) {cell1 = new PdfPCell();}cell1.setBorder(0);if (null == cellBorders) {return cell1;}//System.out.println("text:::"+text);//printCellBorder(  cellBorders);if (null != cellBorders.getBottom()) {cell1.setBorderColorBottom(BaseColor.BLACK);cell1.setBorderWidthBottom(1);}if (null != cellBorders.getTop()) {cell1.setBorderColorTop(BaseColor.BLACK);cell1.setBorderWidthTop(1);}if (null != cellBorders.getLeft()) {cell1.setBorderColorLeft(BaseColor.BLACK);cell1.setBorderWidthLeft(1);}if (null != cellBorders.getRight()) {cell1.setBorderWidthRight(1);cell1.setBorderColorRight(BaseColor.BLACK);}return cell1;}/*** 设置图片** @param run*/private static Set<Image> setPicture(XWPFRun run) {if (null != run.getEmbeddedPictures() && run.getEmbeddedPictures().size() > 0) {Set<Image> images = new HashSet<>();for (XWPFPicture pic : run.getEmbeddedPictures()) {try {
//                    Paragraph p = new Paragraph();
//                    p.add(getimage(pic.getPictureData()));
//                    p.setAlignment(Element.ALIGN_CENTER);images.add(getimage(pic.getPictureData()));} catch (BadElementException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}}return images;}return null;}/*** 设置字体** @param run* @return*/private static Font setFont(XWPFRun run) {try {BaseFont bf = null;bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);Font font = null;if (run.isBold()) {font = new Font(bf, run.getFontSize(), Font.BOLD, BaseColor.BLACK);} else {font = new Font(bf, run.getFontSize(), Font.NORMAL, BaseColor.BLACK);if (null != run.getFontFamily() && run.getFontFamily().equals("黑体")) {//设置为黑体font = new Font(bf, run.getFontSize(), Font.BOLD, BaseColor.BLACK);}}return font;} catch (DocumentException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}}/*** 读取图片** @param picdata* @return* @throws BadElementException* @throws IOException*/private static Image getimage(XWPFPictureData picdata) throws BadElementException, IOException {byte[] bytepic = picdata.getData();Image imag = Image.getInstance(bytepic);return imag;}
}

相关文章:

使用poi+itextpdf把word转成pdf

使用 Apache POI 和 iTextPDF 将 Word 转换为 PDF 需要分两步操作&#xff1a;先用 POI 读取 Word 内容&#xff0c;再用 iText 生成 PDF。 apache poi官方文档:Apache POI™ - Javadocs 以下是详细的代码实现示例&#xff1a; 环境准备 在 pom.xml 中添加依赖&#xff1a; …...

民安智库:开启零售行业客户满意度提升新征程​

在当今这个瞬息万变的商业世界中&#xff0c;零售市场的竞争愈发激烈&#xff0c;犹如一场没有硝烟的战争。各大零售企业为了抢占市场份额&#xff0c;纷纷使出浑身解数&#xff0c;从商品种类的丰富到店铺环境的优化&#xff0c;从价格策略的调整到服务质量的提升&#xff0c;…...

自行搭建一个Git仓库托管平台

1.安装Git sudo apt install git 2.Git本地仓库创建&#xff08;自己选择一个文件夹&#xff09; git init 这里我在 /home/test 下面初始化了代码仓库 1. 首先在仓库中新建一个txt文件&#xff0c;并输入一些内容 2. 将文件添加到仓库 git add test.txt 执行之后没有任何输…...

无锡无人机超视距驾驶证怎么考?

无锡无人机超视距驾驶证怎么考&#xff1f;在近年来&#xff0c;无人机技术的迅猛发展使得无人机的应用场景变得愈发广泛&#xff0c;其不仅在环境监测、农业喷洒、快递配送等领域展现出真金白银的价值&#xff0c;同时也推动了无人机驾驶证的需求。尤其是在无锡&#xff0c;随…...

pyautogui是什么:自动化鼠标和键盘操作

pyautogui是什么:自动化鼠标和键盘操作 目录 pyautogui是什么:自动化鼠标和键盘操作安装方法主要功能及使用示例1. 鼠标操作2. 键盘操作3. 获取屏幕信息应用场景注意事项pyautogui 是一个用于自动化鼠标和键盘操作的 Python 第三方库,它允许开发者通过编写 Python 代码来模拟…...

小白学习java第12天:IO流之缓冲流

1.IO缓冲流&#xff1a; 之前我们学习的都是原始流&#xff08;FileInputStream字节输入流、FileOutputStream字节输出流、FIleReader字符输入流、FIleWriter字符输出流&#xff09;其实我们可以知道对于这些其实性能都不是很好&#xff0c;要么太慢一个一个&#xff0c;要么就…...

智能导诊系统方案:人体画像导诊实现从症状到科室推荐及院内导航链路拆解(python示范 TensorFlow Embedding 层源码)

本文面向医院信息科负责人、医疗AI开发者、医院管理者&#xff0c;解决传统分诊依赖人工经验&#xff0c;效率低且易出错&#xff1b;患者跨科室就诊路径不清晰等痛点问题&#xff0c;实现症状到科室的精准推荐及动态导航链路优化。 如需获取智慧医院导航导诊系统解决方案请前往…...

声学测温度原理解释

已知声速&#xff0c;就可以得到温度。 不同温度下的胜诉不同。 25度的声速大约346m/s 绝对温度-273度 不同温度下的声速。 FPGA 通过测距雷达测温度&#xff0c;固定测量距离&#xff0c;或者可以测出当前距离。已知距离&#xff0c;然后雷达发出声波到接收到回波的时间&a…...

30天学Java第九天——线程

并行与并发的区别 并行是多核 CPU 上的多任务处理&#xff0c;多个任务在同一时间真正的同时执行并发是单核 CPU 上的多任务处理&#xff0c;多个任务在同一时间段内交替执行&#xff0c;通过时间片轮转实现交替执行&#xff0c;用于解决 IO 密集型任务的瓶颈 线程的创建方式…...

SaaS微服务架构的智慧工地源码,基于Spring Cloud +UniApp +MySql开发

基于微服务架构JavaSpring Cloud UniApp MySql技术开发&#xff0c;saas模式的一套智慧工地云平台源码&#xff0c;支持多端展示&#xff1a;PC端、大屏端、手机端、平板端。包含项目人员管理、视频监控管理、危大工程监管、绿色施工管理、现场物料管理、安全隐患排查等功能。 …...

Qt学习笔记——TableWidget的一些学习东西

TableWidget的一些学习东西 使用QtDesigner绘制表格&#xff0c;但是表格出现很多问题&#xff0c;烦死了&#xff0c;整理了一些内容。 在使用 Qt Designer 设置 QTableWidget 时&#xff0c;涉及大量属性选项&#xff0c;尤其是在初学阶段常常因为属性设置不当而导致表格显…...

《Uniapp-Vue 3-TS 实战开发》Pinia 及 Pinia 持久化

前言: 正文: 一、Pinia 基础用法 1. 安装与初始化 bash npm install pinia # 或 yarn add pinia 在 main.js/ts 中初始化: import { createApp } from vue import { createPinia } from pinia import App from ./App.vue const app = createApp(App) app.use(createPinia()…...

JAVA:SpringBoot 实现图片防盗链的技术指南

1、简述 防盗链(Hotlink Protection)是一种保护网站资源不被其他网站直接引用的技术,特别是在图片、视频等静态资源方面。防盗链的核心思想是检查请求的来源(Referer),只允许来自指定域名的请求访问资源。 在 Spring Boot 中,我们可以通过拦截器(Interceptor)或过滤…...

量子指纹识别

场景设定 某金融机构部署量子指纹认证系统&#xff0c;要求用户通过手机&#xff08;传感器A&#xff09;注册指纹&#xff0c;并在ATM机&#xff08;传感器B&#xff09;完成量子安全认证。系统需满足&#xff1a; 抗模板泄露&#xff1a;即使数据库被攻破&#xff0c;攻击者…...

图像变换方式区别对比(Opencv)

1. 变换示例 import cv2 import matplotlib.pyplot as plotimg cv2.imread(url) img_cut img[100:200, 200:300] img_rsize cv2.resize(img, (50, 50)) (hight,width) img.shape[:2] rotate_matrix cv2.getRotationMatrix2D((hight//2, width//2), 50, 1) img_wa cv2.wa…...

快速上手Linux联网管理

RHEL9版本特点 在RHEL7版本中&#xff0c;同时支持network.service和NetworkManager.service&#xff08;简称NM&#xff09;。在RHEL8上默认只能通过NM进行网络配置&#xff0c;包括动态ip和静态ip,若不开启NM&#xff0c;否则无法使用网络RHEL8依然支持network.service&…...

加速度计芯片的主要参数定义、计算、测试方法

加速度计的主要参数包括量程、分辨率、灵敏度、输出数据速率、接口类型、功耗、噪声等。量程决定了加速度的测量范围&#xff0c;比如2g到16g&#xff0c;不同的应用需要不同的量程。分辨率关系到能检测到的最小变化&#xff0c;通常用位数表示&#xff0c;比如12位或16位。灵敏…...

FFMPEG大文件视频分割传输教程,微信不支持1G文件以上

如下是一个2.77g的文件分割教程 . 前言 FFmpeg 是一个用于处理视频、音频等多媒体文件的开源工具包。它支持几乎所有的多媒体格式转换、剪辑和编辑&#xff0c;是开发者和多媒体工作者必备的工具。本文详细讲解如何在 Windows 系统上安装 FFmpeg 并进行基本配置。 2. 下载 FF…...

interfaceResidue:一款用于分析蛋白复合物“接触界面残基”的pymol插件

当我们使用AF3或其他结构预测工具获得蛋白复合物后&#xff0c;逃不掉的一步就是分析接触界面的残基互作&#xff0c;而分析互作的前提是要准确地识别出接触界面上的残基有哪些&#xff0c;如果手动找则太耗费精力而且也容易遗漏。本期向大家安利的这样一款pymol插件&#xff0…...

【Qt】常用控件【按钮类】

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Qt 目录 一&#xff1a;&#x1f525; 前言 二&#xff1a;&#x1f525; 按钮类控件 &#x1f98b; Push Button 按钮&#x1f380; 带有图标的按钮 -- 纯代码实现&#x1f380; 带有快捷键的按钮…...

996引擎-源码学习:PureMVC Lua 中的系统启动,初始化并注册 Mediator

996引擎-源码学习:PureMVC Lua 中的系统启动,初始化并注册 Mediator 一、PureMVC 核心架构二、系统启动流程系统启动注册 StartUp 通知发送 StartUp 通知,开始初始化三、Mediator 初始化1. gameStateInit.lua2. LoadingBeginCommand.lua3. RegisterWorldMediatorCommand.lua…...

SDP(一)

SDP(Session Description Protocol)会话描述协议相关参数 Session Description Protocol Version (v): 0 --说明&#xff1a;SDP当前版本号 Owner/Creator, Session Id (o): - 20045 20045 IN IP4 192.168.0.0 --说明&#xff1a;发起者/创建者 会话ID&#xff0c;那么该I…...

深入理解Apache Kafka

引言 在现代分布式系统架构中&#xff0c;中间件扮演着至关重要的角色&#xff0c;它作为系统各组件之间的桥梁&#xff0c;负责处理数据传递、消息通信、负载均衡等关键任务。在众多中间件解决方案中&#xff0c;Apache Kafka凭借其高吞吐量、低延迟和可扩展性&#xff0c;已…...

【AI News | 20250411】每日AI进展

AI Repos 1、docext docext是一款无需OCR的本地化文档信息提取工具&#xff0c;利用视觉语言模型&#xff08;VLM&#xff09;从发票、护照等文档图像中高效提取结构化字段和表格数据。其支持自定义字段或预置模板&#xff0c;提供置信度评分、多页处理及REST API集成&#xf…...

风暴之眼:在AI重构的数字世界重绘职业坐标系

硅谷的某个深夜&#xff0c;GitHub Copilot在程序员的注视下自动生成出完美代码&#xff0c;这个场景正在全球数百万开发者的屏幕上同步上演。当AI生成的代码通过图灵测试&#xff0c;当机器学习模型开始理解业务需求&#xff0c;一个根本性命题浮出水面&#xff1a;在人类亲手…...

关于深度学习局部视野与全局视野的一些思考

关于深度学习局部视野与全局视野的一些思考 最近&#xff0c;我在学习一个基于Transformer的网络模型时&#xff0c;注意到了一些局部特征和全局特征的概念。引发了一些疑问: 为什么说CNN只能看到局部区域&#xff0c;而transformer能看到全局区域?什么是token? 对于图像中…...

Asp.NET Core WebApi 配置文件

在 ASP.NET Core Web API 中&#xff0c;配置文件&#xff08;如 appsettings.json&#xff09;是管理应用程序设置的核心部分。ASP.NET Core 提供了一套灵活的配置系统&#xff0c;允许开发者从多种来源加载配置数据&#xff0c;并根据需要使用这些配置。 以下是关于如何在 A…...

免费的AI原创文章批量生成工具,站长内容更新工具推荐

说到AI生成文章&#xff0c;现在已经不是什么热门话题了&#xff0c;因为国内有很多的AI模型现在也越来越成熟了&#xff0c;那么科技工具的出现就是为人民服务的&#xff0c;我们要合理的用好它。 今天给大家推荐的是一款很厉害的站长网站内容更新工具&#xff0c;它可以利用…...

在ASP.NET Core 中实现幂等API和WinForms客户端防重提交实践

前言 大家好&#xff0c;欢迎关注dotnet研习社。今天&#xff0c;我想和大家聊聊在 ASP.NET Core 中如何实现幂等 API&#xff0c;这是我们在实际项目开发中非常重要、但又常常被忽略的一个话题。 什么是幂等性&#xff1f; 幂等性&#xff08;Idempotency&#xff09;指的是…...

Vue如何利用Postman和Axios制作小米商城购物车

小编最近太忙了&#xff0c;没来得及更新博客&#xff01;上一条博客我们写了小米商城购物车的简版&#xff0c;今天我们就在简版的基础之上来增加一些功能&#xff0c;写一下数量的加减、总价、删除&#xff08;批量删除&#xff09;、全选取消全选等功能。如果上一条博客没有…...

使用Windows工具进行内存取证(不进行完全内存转储)

内存取证是分析易失性内存以发现恶意活动、恶意软件行为或系统异常的强大技术。一般情况下调查员会转储全部物理内存&#xff0c;并使用Volatility等工具对其进行分析。然而在许多实际场景中&#xff0c;由于系统限制、安全策略或紧迫性等原因&#xff0c;完全转储可能并不可行…...

大厂文章阅读

1.异步任务处理系统&#xff0c;如何解决业务长耗时、高并发难题&#xff1f; 1)任务失败如何处理(CAS失败也可用)&#xff1a;1.指数退避,匹配下游任务执行系统的处理能力。比如收到下游任务执行系统的流控错误&#xff0c;或者感知到任务执行成为瓶颈&#xff0c;需要指数退…...

ubuntu 服务器版本常见问题

一、系统安装与初始化 1. 安装过程中断或失败 原因:镜像损坏、硬件兼容性、磁盘分区错误。 解决: 验证 ISO 文件的完整性(计算 SHA256 校验和)。 检查 BIOS/UEFI 设置(禁用 Secure Boot)。 使用手动分区模式,确保根分区(/)和 EFI 分区(如有)正确配置。 2. 系…...

第十五届蓝桥杯大赛软件赛省赛Python 大学 B 组试做(下)【本期题单: 缴纳过路费, 纯职业小组】

本期题单&#xff1a;缴纳过路费&#xff0c;纯职业小队 文章目录 缴纳过路费题目思路分析代码 纯职业小组题目思路分析 感谢大伙观看&#xff0c;别忘了三连支持一下大家也可以关注一下我的其它专栏&#xff0c;同样精彩喔~下期见咯~ 缴纳过路费 题目 题目链接&#xff1a;缴…...

【Hadoop入门】Hadoop生态之Oozie简介

1 什么是Oozie&#xff1f; Oozie是Apache基金会下的一个开源工作流调度系统&#xff0c;专门设计用于管理Hadoop作业。作为一个基于工作流的调度服务器&#xff0c;它能够在复杂的任务依赖关系中协调Hadoop MapReduce、Pig、Hive等任务的执行&#xff0c;是大数据平台中任务编…...

【Amazon EC2】为何基于浏览器的EC2 Instance Connect 客户端连接不上EC2实例

文章目录 前言&#x1f4d6;一、报错先知❌二、问题复现&#x1f62f;三、解决办法&#x1f3b2;四、验证结果&#x1f44d;五、参考链接&#x1f517; 前言&#x1f4d6; 这篇文章将讲述我在 Amazon EC2 上使用 RHEL9 AMI 时无法连接到 EC2 实例时所遇到的麻烦&#x1f616; …...

【大模型系列篇】最强检索增强技术GraphRAG基本原理详解

GraphRAG是一种结合了知识图谱&#xff08;Knowledge Graph&#xff09;和大型语言模型&#xff08;Large Language Model, LLM&#xff09;的检索增强生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;技术。它通过引入图结构化的知识表示和处理方法&#xff…...

【高阶数据结构】第二弹---图的深度解析:从基本概念到邻接矩阵的存储与操作

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【高阶数据结构】 目录 1、图的基本概念 2、图的存储结构 2.1、邻接矩阵 2.1.1、基本结构 2.1.2、图的创建 2.1.3、获取顶点下标…...

【Java实战】——手撕斐波那契数列

&#x1f381;个人主页&#xff1a;User_芊芊君子 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 &#x1f50d;系列专栏&#xff1a;【Java】内容概括 这里写目录标题 1.什么是斐波那契数列&#xff1f;2.代码实现2.1 递归实现2.2 迭代实现 3.执行结果 …...

Python数据可视化-第7章-绘制3D图表和统计地图

环境 开发工具 VSCode库的版本 numpy1.26.4 matplotlib3.10.1 ipympl0.9.7教材 本书为《Python数据可视化》一书的配套内容&#xff0c;本章为第7章 绘制3D图表和统计地图 本章首先介绍了使用mplot3d工具包绘制3D图表&#xff0c;然后介绍了使用animation模块制作动画&#…...

操作系统 4.2-键盘

键盘中断初始化和处理 提取的代码如下&#xff1a; // con_init 函数&#xff0c;初始化控制台&#xff08;包括键盘&#xff09;的中断 void con_init(void) {set_trap_gate(0x21, &keyboard_interrupt); } ​ // 键盘中断处理函数 .globl _keyboard_interrupt _keyboard…...

24.0.2 双系统ubuntu 安装显卡驱动黑屏,系统启动界面键盘失灵

问题描述&#xff1a;通过run文件在ubuntu 界面版安装nvidia 驱动后&#xff0c;忽然黑屏&#xff0c;再次启动时&#xff0c;键盘鼠标失灵无法选择系统&#xff0c;只能进入ubuntu界面。第二个问题是ubuntu 也无法用户登录&#xff0c;左上角光标闪烁。 查询方案&#xff0c;…...

探索多领域免费API资源库:打造数据查询利器

在当今信息爆炸的时代&#xff0c;获取各种领域的数据已成为许多人的需求。而免费API资源库的出现为我们提供了便捷的途径&#xff0c;让我们可以轻松地获取所需数据。本文将介绍涵盖20领域的免费API资源库&#xff0c;通过代码示例展示其功能&#xff0c;帮助读者更好地理解和…...

jenkins项目发布-安装k8s(rancher)客户端kubectl

找一台Linux 上安装 kubectl 以下是通过国内镜像源快速安装 kubectl 的方法&#xff0c;适合国内网络环境。 1. 下载 kubectl 通过国内镜像源下载指定版本的 kubectl&#xff1a; 使用阿里云镜像源下载&#xff1a; curl -LO "https://dl.k8s.io/release/$(curl -L -…...

【2025年认证杯数学中国数学建模网络挑战赛】C题 数据预处理与问题一二求解

目录 2025认证杯网络挑战赛A题 数据预处理与问题一求解三、数据预处理及分析3.1 数据可视化3.2 滑动窗口相关系数统计与动态置信区间耦合分析模型3.3 耦合关系分析结果 四、问题一代码数据预处理问题一 2025认证杯网络挑战赛 A题 数据预处理与问题一求解 三、数据预处理及分析…...

天玑AI开发套件2.0模型库数量激增3.3倍,让AI开发选择更自由

AI终端能力的升级&#xff0c;从不止步于硬件性能的提升&#xff0c;更有赖于软硬一体的系统化能力建设。在MDDC 2025大会上&#xff0c;联发科整合发布AI游戏两大核心场景下的开发平台&#xff1a;Neuron Studio打通模型开发全流程&#xff1b;Dimensity Profiler从多个维度提…...

edge 更新到135后,Clash 打开后,正常网页也会自动跳转

发现了一个有意思的问题&#xff1a;edge 更新135后&#xff0c;以前正常使用的clash出现了打开deepseek也会自动跳转&#xff1a; Search Resultshttps://zurefy.com/zu1.php#gsc.tab0&gsc.qdeepseek &#xff0c;也就是不需要梯子的网站打不开了&#xff0c;需要的一直正…...

Socket多路复用网络编程应用总结

Socket多路复用网络编程应用总结 概述 • 传统I/O模型的局限性&#xff1a;传统阻塞式I/O模型每次仅在一个文件描述符&#xff08;File Descriptor, FD&#xff09;上执行I/O操作&#xff0c;导致程序需等待单个操作完成&#xff0c;无法高效处理多连接场景&#xff08;如高并…...

APT攻击阶段划分,每个阶段分区方法

根据现有资料&#xff0c;APT&#xff08;高级持续性威胁&#xff09;攻击的阶段划分主要基于两种主流模型&#xff1a;洛克希德-马丁的杀伤链模型和生命周期模型。以下是分阶段详解及分区依据&#xff1a; 一、洛克希德-马丁杀伤链模型&#xff08;7阶段&#xff09; 核心逻辑…...

图像颜色空间对比(Opencv)

1. 颜色转换 import cv2 import matplotlib.pyplot as plotimg cv2.imread("tmp.jpg") img_r cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img_g cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) img_h cv2.cvtColor(img, cv2.COLOR_BGR2HSV) img_l cv2.cvtColor(img, cv2.C…...