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

electron-vite 配合python

要实现的功能

  1. pdf转化和doc
  2. doc转换为pdf
  3. pdf的合并

Q:为什么不直接使用node?

 只想尝试electron是否能和其他的程序相互配合
  1. 构建工具 yarn | npm 不要选择pnpm
  2. electron框架选择 electron-vite
  3. 转换功能选择 python库
  from pdf2docx import Converterimport docx2pdffrom PyPDF2 import  PdfMerger

electron-vite要怎么嵌入python

可看csdn这篇文章

项目结构

在这里插入图片描述
所有的python代码都要放到resources文件夹下面

注意点1

import pdf2docPathAddress from '../../resources/pythonCode/pdf2doc.py?asset'
import pythonPathAddress from '../../resources/python/python-3.13.5-embed-amd64/python.exe?asset'
import pdfMergePathAddress from '../../resources/pythonCode/PdfFileMerger.py?asset'
上述代码导入的时候一定要写?asset,让electron-vite知道这是静态文件,
否则打包的时候会将python代码位置放错

这是在主进程中所作的事情

注意点2

const scriptPath = is.dev? pdf2docPathAddress: pdf2docPathAddress.replace('app.asar', 'app.asar.unpacked')const pythonPath = is.dev? pythonPathAddress: pythonPathAddress.replace('app.asar', 'app.asar.unpacked')const pdfMergePath = is.dev? pdfMergePathAddress: pdfMergePathAddress.replace('app.asar', 'app.asar.unpacked')
 必须这么做,打包之后静态文件,也就是python代码会在app.asar.unpacked文件下面! 如果不更改那么在使用spawn的时候,不能找到python.exe

为什么静态文件会放到resources下面?

asarUnpack:- resources/**
因为electron-builder.yml中配置,你可自己手动更改,但不建议

贴出所有pdf转换为doc代码剩余都类似

ipcMain.handle('convert-pdf-to-docx', async (_, pdfPath) => {const docxPath = pdfPath.replace(/\.pdf$/, '.docx')return new Promise((resolve, reject) => {const py = spawn(pythonPath, [scriptPath, pdfPath, docxPath, 'convert-pdf-to-docx'])py.on('close', (code) => {if (code === 0) {resolve(docxPath)// 系统弹窗dialog.showMessageBox({type: 'info',title: '转换成功',message: '文件已成功转换为 DOCX 格式'}).then(() => {// 打开文件所在目录shell.showItemInFolder(docxPath)// 打开文件shell.openPath(docxPath)})} else {// 系统弹窗dialog.showMessageBox({type: 'error',title: '转换失败',message: `转换失败,退出码: ${code}`}).then(() => {reject(new Error(`转换失败,退出码: ${code}`))})}})py.on('error', (error) => {reject(new Error(`启动 Python 失败: ${error.message}`))})})
})
import sys
import os# pdf和world相互转换# 自动注入嵌入式 python site-packages 路径
def inject_site_packages():base_dir = os.path.dirname(os.path.abspath(__file__))# 适配你的嵌入式目录结构(根据实际路径调整)python_lib = os.path.abspath(os.path.join(base_dir, '..', 'python', 'python-3.13.5-embed-amd64', 'Lib', 'site-packages'))if python_lib not in sys.path:sys.path.insert(0, python_lib)
inject_site_packages()from pdf2docx import Converter
import docx2pdf
from pathlib import Pathdef pdf_to_docx(pdf: Path, docx: Path):try:cv = Converter(str(pdf))cv.convert(str(docx), start=0, end=None)cv.close()print(f"文件 {pdf} 已成功转换为 {docx}")return Trueexcept Exception as e:print(f"转换过程中出错: {e}")raisedef docx_to_pdf(docx: Path, pdf: Path):try:# 确保目标目录存在out_dir = pdf.parentout_dir.mkdir(parents=True, exist_ok=True)docx2pdf.convert(str(docx), str(pdf))print(f"文件 {docx} 已成功转换为 {pdf}")return Trueexcept Exception as e:print(f"docx 转 pdf 过程中出错: {e}")return Falseif __name__ == '__main__':pdf_path = sys.argv[1]docx_path = sys.argv[2]action = sys.argv[3]if action == 'convert-pdf-to-docx':pdf = Path(pdf_path)docx = Path(docx_path)pdf_to_docx(pdf, docx)elif action == 'convert-docx-to-pdf':docx = Path(docx_path)pdf = Path(pdf_path)docx_to_pdf(docx, pdf)

页面展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

http://www.dtcms.com/a/357184.html

相关文章:

  • AI驱动万物智联:IOTE 2025深圳展呈现无线通信×智能传感×AI主控技术融合
  • 软件系统的部署方式:单机、主备(冷主备、热主备)、集群
  • LeetCode100-54螺旋矩阵
  • Verilog 硬件描述语言自学——重温数电之组合逻辑电路
  • 高性能 JSON:System.Text.Json Source Generator vs 手写 Span(Utf8JsonReader/Writer)
  • 并发编程——06 JUC并发同步工具类的应用实战
  • 如何高效批量完成修改文件名的工作?
  • NullPointerException 空指针异常,为什么老是遇到?
  • 嵌入式Ubuntu22.04安装过程详解实现
  • Oracle SQL性能调优之魂:深入理解索引原理与优化实践
  • 智能接听,破局高峰占线:云蝠AI客服重塑企业服务新范式
  • 【Spring底层分析】Spring AOP补充以及@Transactional注解的底层原理分析
  • 球型摄像机实现360°无死角
  • 【前端教程】从基础到专业:诗哩诗哩网HTML视频页面重构解析
  • 技术干货|Prometheus告警及告警规则
  • APM32芯得 EP.31 | APM32F402 HC-SR04超声测距经典操作:波形输出与滤波
  • 微算法科技(NASDAQ:MLGO)一种基于FPGA的Grover搜索优化算法技术引领量子计算
  • PCIe 6.0配置与地址空间架构:深入解析设备初始化的核心机制
  • C#实现OPC客户端
  • 《Password Guessing Using Random Forest》论文解读
  • system论文阅读--HPCA25
  • Excel Word Pdf 格式转换
  • ubuntu 安装 vllm
  • 电平移位器的原理
  • 群核科技--SpatialGen
  • pytest使用allure测试报告
  • Pytest 插件方法:pytest_runtest_makereport
  • 多方调研赋能AI+智慧消防 豪越科技人工智能创新获认可
  • 【网络安全领域】边界安全是什么?目前的发展及应用场景
  • java基本类型关键字