吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 42078|回复: 1092
收起左侧

[原创工具] 【2024.5.27更新】【坤Tools】一个支持WORD/PDF/EXCEL/PDF等格式的转换软件

    [复制链接]
jidesheng6 发表于 2024-4-4 17:11
本帖最后由 jidesheng6 于 2024-6-5 19:29 编辑

零、前言

由于去年坤Tools的帖子已到锁定时间,所以开了新贴更新,原帖地址:点击前往
请风大核实。

本贴中部分跳转链接引用的是原帖地址,建议使用右键打开新标签页打开链接地址,防止当前页面被覆盖加载。

一、基本信息

工具名称:坤Tools

是否完全离线:是

开发框架和语言:.netFrameWork4.8框架+C#8.0

主要控件:Aspose.Words、Aspose.Cells、Aspose.Barcode、Aspose.Slides等

当前版本:V0.4.3

开发目的:主要目的是希望通过一个软件将多个用途场景融合在一个软件中,避免频繁切换软件;小部分功能是以前自用的整合到一起了

当前版本界面预览

0.4.2版本

下载地址(后续更新都是三个地方,网盘分享的是目录):

视频教程:点击前往

Windows7操作系统使用教程(主要是安装.netframework4.8):点击前往

关于使用管理员身份后,无法拖放文件的解决方案:点击前往

二、支持功能

  • WORD转PDF
  • WORD转EXCEL
  • WORD转EPUB
  • PDF转WORD
  • PDF转EXCEL
  • PDF转PPT
  • PDF版本转换
  • EXCEL转PDF
  • EXCEL转WORD
  • PDF转EXCEL
  • EPUB转WORD
  • EPUB转PDF
  • HTML转PDF(需配置chromium)点击查看配置教程
  • 简易二维码生成 点击查看二维码功能使用说明
  • 图片转PDF
  • 压缩PDF
  • 压缩图片
  • 移除PDF水印
  • 合并PDF
  • 合并WORD
  • 拆分PDF
  • 拆分WORD
  • 拆分PPT
  • 添加PDF水印
  • 移除PDF水印
  • 文档转图片
  • 姓名横排转竖
  • WORD内容批量替换
  • EXCEL内容批量替换
  • Twain设备调试
  • WEBP图片格式转换
  • 文件副本生成
  • 网卡设置
  • 单人表生成
  • 考评报表修改
  • 选举结果报告单生成

三、目前已知问题

1、WORDSNET-26247 无法为中文语言环境生成精确的布局(Aspose.Words控件,影响Word相关功能)

2、WORDSNET-26254 当系统语言环境为中文时,Aspose.Words 不支持 Microsoft Word 执行的字体替换(Aspose.Words控件,影响Word相关功能)

3、WORDSNET-26259 不允许设置用 SimSun 替换 FangSong_GB2312 和 KaiTi_GB2312(Aspose.Words控件,影响Word相关功能)

4、WORDSNET-26308 文档到图片的转换有差距(Aspose.Words控件,影响Word相关功能)

5、PDFNET-56072 PDF转换指定分辨率图片模糊(Aspose.PDF控件,影响PDF相关功能)

四、更新日志

  • 2024年4月3日:

    • 修复: Excel内容批量替换保存文件提示无法打开的问题

    • 新增:Word转Pdf新增支持使用本机Office转换Pdf,布局准确率为100%,需要本机安装Office;本功能需要管理员身份运行;支持调用WPS

    • 修复:合并word中存在域代码可能会更新的问题

    • 调整:Twain扫描调试功能的初始化Twain代码逻辑,已更改为在点击标签卡时进行初始化,而不是在程序启动时就进行初始化

    • 调整:恢复Excel转Word的功能

    • 修复:修复了勾选保存到源目录时还会弹出选择目录窗口的问题

    • 新增:姓名横转竖列功能新增支持文本去重功能,可对文本/姓名进行去重操作

    • 修复:WORDSNET-26420 文档合并后,部分形状丢失

    • 修复:WORDSNET-26421 文档合并后,通过空格控制的对齐方式丢失

    • 修复:Word转Excel的时候,遇到多页Word,不会自行创建sheet进行分页的问题

    • 修复:Excel内容批量替换,只能替换文本格式单元格的问题

    • 新增:考评报表修改模块支持批量对某行/某列的X-X行/列进行参数的批量调整,本功能比较复杂,无论是代码还是使用层面都是如此,所以应该不会考虑进一步优化

    • 优化:大幅优化代码结构,提升运行效率

    • 调整:调整部分窗口的控件摆放和执行逻辑

    • 调整:关于页面中添加了科比布莱恩特纪念馆

  • 2024年5月27日:

    • 调整:身份号码验证部分的区域选择触发事件,更改为selectedindexchange事件触发

    • 调整:身份号码验证部分生成人员逻辑,动态生成,取代了之前的后台生成完毕后统一装载到编辑框内

    • 调整:文件列表中的排序方式,使用win32api中的StrCompLogicalW函数进行自然排序,和Windows保持一致

    • 修复:内存信息显示部分添加了异常处理,防止负载过大时导致报错

    • 新增:序号生成功能添加支持了设置前后缀功能

    • 新增:新增功能 考评图片二维码分类功能 支持子目录、自定义多线程,注:该功能建议使用X64程序,自动模式的线程负载会最大化利用电脑性能,内存占用可能会很高,如果不放心可设置为1,单线程执行,压力会小一点

    • 调整:将 文件副本生成 功能修改为 补充功能

    • 新增:新增了公告信息,公告信息不会主动推送,托管于飞书上,主要用于:发出某个版本后,可能有些小修改需要重新发布,但是又不至于变更版本号的情况下来通知重新下载,也可能会用于其他信息通知

    • 调整:压缩图片 功能支持svg格式图片,未提供压缩选项,暂时作为格式转换支持;压缩图片部分同步支持不执行压缩选项,可实现图片格式简单转换需求

    • 新增:word内容批量替换和excel内容批量替换功能支持设置多个查找替换内容,可自由增减需要替换内容数量,实现一次修改多处内容

    • 调整:调整了特殊二维码校验功能部分树形列表的项目直接大小,从14增加为20

    • 调整:Excel转PDF支持设置导出页面设置,比如设置缩放比例,类似excel中的打印缩放功能

    • 调整:姓名横转竖列功能中的的导出内容到文本的写出方式更改为Lines模式,输出换行符号

    • 调整:将TwainDsm(Twain数据源管理器)集成到程序内部

    • 修复:压缩图片 功能部分的选择不使用源后缀保存的点击逻辑问题

    • 调整:压缩图片 功能名称更改;压缩图片 功能添加支持目标格式:tif格式(注:tif格式默认配置为8位灰度图像,自用于特殊用途)

    • 将内部使用的第三方控件全部升级到最新版本

五、软件使用技巧

  • 软件分为X86和X64位的版本,主要区别为:

    • X86版本:因为X86的特性,程序的可用内存只有4GB左右,扣除系统占用的,实际可用内存应该在2GB左右,对于部分功能来说,占用内存比较高,程序整体占用接近1.8GB的时候软件就会闪退,不管你的物理内存有多大,32G或64G都会出现这个问题

    • X64版:和X86版本相反,就是可以使用电脑的全部物理内存,没有什么特殊限制,个人也是推荐使用X64版本

    • 分为两个版本原因主要是为了兼容Twain协议扫描仪,因为有些较老型号的扫描仪,是没有X64位驱动的(有些写着X64,实际上驱动释放并没有把ds源正确写入),X64程序就无法正确读取出来,所以需要使用X86程序来调用;对于不需要本功能的来说,只保留X64程序的就足够了

  • PDF添加水印部分,水印内容中填入了文字,则不插入图片水印;插入图片水印,先选择图片水印,确保水印内容编辑框内无内容,开始处理即可。图片水印支持设置参数:对齐方式、角度、不透明度、图片宽高。

  • 软件本身启动主动连接网络检测软件更新信息,对于内网环境的机器,虽然软件有检查更新功能,但是没有网络的情况下,是一直显示为最新版本的

  • 软件支持拖放和手动选择文件添加到列表,拖放支持子目录递归查找,手动选择目录只支持选择文件,推荐使用拖放方式添加文件;由于程序有些功能需要使用管理员身份运行,但是管理员身份运行后,拖放功能失效,如果想要两者共存,可参考本方法关闭批准模式:点击前往

  • 文件支持手动调整顺序;支持单个移除列表文件或清空整个列表文件

  • 文件支持右键打开源目录和转换后文件功能;右键还可查询所选文件的详细信息

  • Word转PDF功能中的本机Office转换功能,需要本机安装任意版本的Office或者Wps;如果转换过程中出现任何报错,可点击界面提供的下载链接下载WPS进行修复

六、软件截图(功能太多,只展示部分功能截图)

  • WORD转PDF
    WORD转PDF

  • PDF转WORD
    PDF转WORD

  • 拆分WORD
    拆分WORD

  • 拆分PDF
    拆分WORD

  • 文档转图片
    文档转图片

  • 图片转PDF
    图片转PDF

  • HTML转PDF 点击查看配置教程
    HTML转PDF

  • 简易二维码生成
    HTML转PDF

  • 姓名横转竖列
    姓名横转竖列

  • Twain扫描仪调试
    Twain扫描仪调试

  • 系统工具
    系统工具

  • 单人表生成(本功能可用于插入各种类型图片到WORD指定位置)
    单人表生成

  • 文件副本生成(主要用于快速复制需要数量的文件副本,自动递增序号,自定义副本后缀)
    文件副本生成

  • 网卡设置
    网卡设置

  • 关于软件
    关于软件

  • 软件设置
    软件设置

七、常见问题解答

1、软件是免费的吗,后续有收费计划吗?

  • 坤Tools从2023年4月3日到现在,中途没有进行过任何收费,以后也不会进行收费。

2、软件需要联网吗,我是内网用户,会不会用不了?

  • 坤Tools确实有联网行为,主要是软件开启的时候会检测软件的更新状态,及时更新到最新版本;对于没有外网的内网用户,软件也是可以使用的,只不过检测不到最新版本,软件会一直显示为最新版本;至于能不能打开和使用,主要是看内网电脑对外部软件的限制要求严不严格,以及电脑系统基础环境是否正常

3、软件对文档的处理是在本机还是云端进行处理的,会有数据泄露风险吗?

  • 坤Tools的更新都是依靠Gitee的托管仓库来实现的,所有的更新信息都在上面,可手动在界面点击访问;作者是没有能力购买高昂服务器来免费维护的,程序所有的处理都是在本地完成的,没有任何依靠云端API处理文档的过程,对于安全方面有研究的网友,欢迎进行抓包分析、上传沙箱进行检测

4、为什么PDF转WORD功能,转换出来的是图片而不是文字?

  • PDF文件有多种形式,简单说下扫描件和使用WORD转PDF的正常PDF文件的区别:

    • 扫描件:其实就可以理解为用扫描仪扫描出来的PDF,这种PDF和用手机拍照以后把图片放到WORD里面再转为PDF是没有区别的,软件只是反向还原这个过程,所以转换的WORD里面也是图片

    • 正常PDF文件:正常从WORD转过来的PDF文件,在浏览器中打开,文字是可复制的,这是因为PDF中存在了文本、段落信息,所以使用PDF转WORD功能,是可以正常完美还原的

    • 可能有的人会说,对于扫描件可以用OCR,为什么不开发OCR呢?

      • OCR的功能以前写过,但是并不能保证识别率,而且OCR在本地来做是比较吃资源的,如果用过ABBYY的应该知道,OCR识别的时候,电脑占用特别高,而且有些库是只能用64位程序的,比如著名的飞浆PP;最主要的一点是,如果只是单纯的将PDF里面的文字识别存放在TXT里面,我觉得没有什么意义,真正的对扫描件进行PDF转WORD,应该是去分析文档结构,然后按照文档结构去还原文字和其他信息,并且保证在原来的位置上,但是这个难度是比较大的,金山等一些技术大厂应该是可以做到的,我只是个业余爱好者,并没有这样的技术能力去实现这个东西,所以没办法给大家开发这种功能。

5、为什么软件的UI这么丑?可以做的好看一点吗?

  • 首先说声抱歉;因为当初开发的时候最开始是给自己用的,界面上比较随意,认为达到功能就足够了,后期忙于功能的增添,没有考虑太多,坤Tools发展到今天,不算Winform自动生成的代码量,大概在1.2w行左右,这个代码量如果我更换框架,等于重写项目了,这个工作量是比较大的,个人有点无能为力,目前版本的界面,是能做到最优解了,更换框架意味着很多控件需要更换,代码也要重写很多,对于我自己来说,并不是特别划算。

6、有没有考虑过开源呢?让大家一起参与进来?

  • 第5个问题里面提到的,其实可以开源去解决,但是主要有两个原因我不愿意开源:

    • 当初代码写的很乱,现在问题就是只有我可以明白各个地方的调用,优化又有点力不从心,开源我怕被喷。

    • 因为Aspose是商业组件,如果开源的话,必定要移除一点东西,但是这样大家开发出来的就带水印了,这样的项目开源出去也没有意义;如果我不移除,我便担心有人作为收费软件对外销售,这样的话,项目存活不了太久。

7、软件会一直维护更新吗?如果不维护了,软件会有一天无法使用吗?

  • 坤Tools除了检测更新部分,其他的功能全都是完全离线本地执行的,软件是不存在某一天就无法使用这种情况的;维护更新主要还是看情况,因为不一定有时间,如果需求合理,BUG可以正常复现,可以解决的情况下,是可以尽力维护的;不过目前坤Tools的情况,算是比较稳定的了,将来更新也只有在第三方库的一些更新。

8、软件为什么我的电脑会直接打不开?什么都没显示,也没有报错?

  • 坤Tools依赖.netframework4.8环境,如果无法打开,请确定系统不是精简版系统后,点击重新安装.netframework4.8

  • 如果还是无效,可能需要重新安装系统,大概率是你的组件真的坏掉了

  • 对于Windows7用户,可参考此链接进行安装修复:点击前往

八、作者的话

首先,非常感谢从2023年4月3日以来在使用坤Tools的网友们,你们提供建议、反馈让我改进坤Tools,也感谢很多做公众号等平台的媒体网友推荐我的软件,我的想法很简单,大家都是打工人,如果我写的软件能让更多打工人受益,那便是值得的;坤Tools的界面不是很好看,功能可能还有欠缺,但是我还是希望能有人被坤Tools帮助到,希望大家能够使用坤Tools从繁琐重复的工作中解脱出来,节省时间,提升效率,坤Tools不希望您节省的时间是为了干更多的活,而是希望您能有更多的事情陪陪您的家人。

因为坤Tools在过去一年里附件下载已经很多了,所以本文章不再采用附件方式存放链接地址,感谢各位网友耐心看完这边比较长的文章。

九、链接附录

  • 字体文件(WORD转PDF或者其他功能出现类似 口口口 乱码使用):点击前往

  • WPS专业版安装包(修复本机Office转换报错):点击前往

  • Windows7安装.netframework4.8工具包(提取码:6666):点击前往

  • AccessEngine(考评软件报表等相关功能需要本组件):点击前往

  • 软件下载地址(123盘)(提取码:6666):点击前往

  • 软件下载地址(百度网盘)(提取码:6666):点击前往

免费评分

参与人数 295吾爱币 +292 热心值 +271 收起 理由
正锋啊 + 1 + 1 我很赞同!
Shaoyw + 1 + 1 鼓励转贴优秀软件安全工具和文档!
fengxichou + 1 + 1 我正准备自己写一个呢,就发现了这个宝藏,感谢作者
yutianlian + 1 鼓励转贴优秀软件安全工具和文档!
odinchu + 1 + 1 谢谢@Thanks!
badpanyu + 1 + 1 谢谢@Thanks!
maple52 + 1 + 1 谢谢@Thanks!
zzk101001 + 1 + 1 谢谢@Thanks!
xinc + 1 谢谢@Thanks!
李某龙 + 1 + 1 谢谢@Thanks!
999CWCR999 + 1 + 1 谢谢@Thanks!
V1O + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zhangli3729 + 1 + 1 谢谢@Thanks!
xbb + 1 谢谢@Thanks!
轻轻的风 + 1 + 1 谢谢@Thanks!
Phaestus + 1 + 1 从其他平台看到转而找来,功能强大,适合上班办公搬砖之用
nitianyaoxiang + 1 谢谢@Thanks!
yihan01 + 1 + 1 我很赞同!
12308241 + 1 + 1 谢谢@Thanks!
dswuying + 1 谢谢@Thanks!
fdtw + 1 + 1 谢谢@Thanks!
徐太尉府 + 1 + 1 我很赞同!
hengchangde6 + 1 谢谢@Thanks!
telunsusu + 1 谢谢@Thanks!
shiqianwei + 1 + 1 用心讨论,共获提升!
做风一样的男子 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
TaeErika° + 1 + 1 我很赞同!
lijie0100 + 1 谢谢@Thanks!
lixiaoyao666 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
冬天冷了多穿点 + 1 + 1 我很赞同!
之八十 + 1 + 1 我很赞同!
caihuachaorou87 + 1 + 1 谢谢@Thanks!
YYxx8866 + 1 + 1 这个软件太好了,太实用了
Haolinfei + 1 谢谢@Thanks!
Anyeyouxia + 1 + 1 谢谢@Thanks!
ring20000 + 1 用心讨论,共获提升!
lzc110 + 1 + 1 谢谢@Thanks!
淡雅香 + 1 + 1 我很赞同!
luoyi437 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
compressor + 1 谢谢@Thanks!
琪彩数码 + 1 + 1 用心讨论,共获提升!
林释 + 1 + 1 谢谢@Thanks!
橙色天空的冰雪 + 1 + 1 我很赞同!
binqshy + 1 + 1 我很赞同!
dong889 + 1 + 1 谢谢@Thanks!
oldcolor + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
colaya + 1 + 1 我很赞同!
Blueyes + 1 + 1 我很赞同!
Lizip + 1 + 1 谢谢@Thanks!
zhang593345 + 1 用心讨论,共获提升!
zhbzhboy + 1 + 1 谢谢@Thanks!
ForeverAng + 1 + 1 我很赞同!
rockmanii + 1 + 1 谢谢@Thanks!
feifeilove + 1 + 1 谢谢分享
onlyclxy + 3 + 1 感谢热心大佬的点评帮助!在此跪谢!!
zhangxuok2099 + 1 + 1 谢谢@Thanks!
uyilig + 1 + 1 我很赞同!
lsbdx + 1 + 1 谢谢@Thanks!
Miyanoleo + 1 + 1 谢谢@Thanks!
buggy + 1 + 1 谢谢@Thanks!
Starck1988 + 1 + 1 我很赞同!
lpwhd + 1 + 1 谢谢@Thanks!
就叫这个 + 1 + 1 热心回复!
magneto8 + 1 + 1 我很赞同!
S.K + 1 + 1 谢谢@Thanks!
mhzhe + 1 + 1 感谢 楼主了,能否增加一个PDF压缩功能。
tough95 + 1 + 1 我很赞同!
zr2019 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
hushxh + 1 + 1 热心回复!
童話ゼ影子 + 1 谢谢@Thanks!
happyzss + 1 + 1 谢谢@Thanks!
迎旭 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
jun139708 + 1 + 1 谢谢@Thanks!
okij12589 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
多么哇塞的少年 + 1 谢谢@Thanks!
getString + 1 + 1 谢谢@Thanks!开庭时记得带上你的工具箱【狗头】
pccyxh + 1 + 1 热心回复!
陈小刀 + 1 + 1 热心回复!
lingyan + 1 我很赞同!
yunzj + 1 谢谢@Thanks!
anxun1999 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Black小衰 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Allen0916 + 1 + 1 用心讨论,共获提升!
damon7609 + 1 + 1 大佬,123、bai、gitee分别下载了Kun_Tools_正式版 V0.4.3,但是都无法解压.
yangsi + 1 谢谢@Thanks!
limtterland + 1 + 1 用心讨论,共获提升!
yy19917 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Sink13 + 1 + 1 感谢您的无私分享!
tutu02016 + 1 + 1 谢谢@Thanks!
ZXY2018 + 1 + 1 用心讨论,共获提升!
laogang19880819 + 1 + 1 谢谢@Thanks!
373161977 + 1 + 1 我很赞同!
vip209323 + 1 + 1 我很赞同!
俗尘 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
jzgaxb + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
qudengxia + 1 + 1 我很赞同!
孤单的雨 + 1 + 1 谢谢@Thanks!
erqie + 1 + 1 谢谢@Thanks!
sivion + 1 + 1 谢谢@Thanks!
wpknight + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| jidesheng6 发表于 2024-4-7 19:17
各位,有很多坛友建议我重构UI,但是原因我也讲过了,一个人搞不来。

所以在这里征集一下各位坛友的意见,是否需要开源给各位坛友进行二次开发重构,如果有能力重构的,可前往Gitee发布页提交Issue给我,但是为了避免律师函,我将会移除Aspose相关的特殊文件;不过这样编译出来的程序在进行各种转换的时候会添加上Aspose官方的试用红色水印。

免费评分

参与人数 3吾爱币 +4 热心值 +2 收起 理由
do2020 + 2 + 1 非常好用的PDF组件.功能齐全!
饕餮居士 + 1 + 1 大佬千万别开源,一开淘宝咸鱼就开卖
skywolf + 1 尽量别开源,避免不法分子卖钱

查看全部评分

 楼主| jidesheng6 发表于 2024-4-12 17:48
wensi1117 发表于 2024-4-11 20:27
带佬太强了,爱你呦,顺便想看看源码,单纯想学习一下代码。

我给你提供一个最主要的入口点方法,这个是所有转换操作都会进入的一个函数,不是不想开源,只是开源要把代码什么的整理清晰,这个很累。

        /// <summary>
        /// 转换文件通用方法
        /// </summary>
        /// <param name="ListViewControl">转换文件所在的listview控件名称</param>
        /// <param name="StatusLabelControl">用于表示进度状态的标签控件</param>
        /// <param name="ConverType">转换的目标类型</param>
        /// <param name="ExtensionString">保存文件的后缀名称</param>
        public static void ConvertStart(
            ListView ListViewControl,
            Label StatusLabelControl,
            ConvertFileType ConverType,
            string ExtensionString,
            bool UseSourcePath = false,
            Button CallButton = null)
        {
            if (ListViewControl.Items.Count > 0)
            {
                string TempSaveDocxPathString = string.Empty;
                string SelectSavePathstring = "A";
                if (!UseSourcePath)
                {
                    IEnumerable<string> ISelectSavePathstring = Util.ShowSelectDialog(
                        false,
                        true,
                        string.Empty,
                        string.Empty);//调用文件选择窗口,获取文件夹名称
                    SelectSavePathstring = ISelectSavePathstring.FirstOrDefault();
                }

                if (string.Compare(SelectSavePathstring, default, StringComparison.Ordinal) != 0 &&
                    SelectSavePathstring != string.Empty &&
                    SelectSavePathstring != null)
                {
                    CallButton.Enabled = false;
                    for (int TempIndex = 0; TempIndex < ListViewControl.Items.Count; TempIndex++)
                    {
                        string ListViewFirstColumnText = ListViewControl.Items[TempIndex].Text;
                        string FileNameWithOutExtension = Path.GetFileNameWithoutExtension(ListViewFirstColumnText);//不带后缀的文件名
                        string FileNameSourcePath = Path.GetDirectoryName(ListViewFirstColumnText);//所选文件列表中文件的源目录
                        if (UseSourcePath)
                        {
                            SelectSavePathstring = FileNameSourcePath;
                        }
                        string ConvertedFileName = Path.Combine(
                            SelectSavePathstring,
                            $"{FileNameWithOutExtension}{ExtensionString}");
                        StatusLabelControl.Text = $"正在处理第{TempIndex + 1}个文件";

                        //根据不同类型调用不同的函数
                        switch (ConverType)
                        {
                            //word转pdf
                            case ConvertFileType.Word2Pdf:
                                TempSaveDocxPathString = Path.Combine(SelectSavePathstring, "TempDocx");
                                Directory.CreateDirectory(TempSaveDocxPathString);

                                object SelectedPdfCompliance = Enum.Parse(
                                    typeof(Aspose.Words.Saving.PdfCompliance),
                                    BodyForm.MainForm.PDFComplianceBox.SelectedItem.ToString());

                                Util.ConvertWord2Pdf(
                                    ListViewFirstColumnText,
                                    ConvertedFileName,
                                    TempSaveDocxPathString,
                                    (Aspose.Words.Saving.PdfCompliance)SelectedPdfCompliance,
                                    (Aspose.Words.Settings.MsWordVersion)Enum.Parse(
                                        typeof(Aspose.Words.Settings.MsWordVersion),
                                        BodyForm.MainForm.Word2PDFOptimizCombox.SelectedItem.ToString()),
                                    BodyForm.MainForm.word2pdf_need_update_fields.Checked,
                                    (Aspose.Words.Saving.ColorMode)Enum.Parse(
                                        typeof(Aspose.Words.Saving.ColorMode),
                                        BodyForm.MainForm.word2pdf_colorMode.SelectedValue.ToString()),
                                    BodyForm.MainForm.EmbedFonts.Checked,
                                    BodyForm.MainForm.WORD2PDF_LoadPassword.Text,
                                    BodyForm.MainForm.UseLocalOffice.Checked);
                                break;
                            //pdf转word
                            case ConvertFileType.Pdf2Word:
                                Util.ConvertPdf2Word(
                                    ListViewFirstColumnText,
                                    ConvertedFileName,
                                    BodyForm.MainForm.PDF2WORD_UseBullet.Checked,
                                    BodyForm.MainForm.PDF2WORD_UseSUbOcr.Checked,
                                    (Aspose.Pdf.DocSaveOptions.RecognitionMode)Enum.Parse(
                                        typeof(Aspose.Pdf.DocSaveOptions.RecognitionMode),
                                        BodyForm.MainForm.PDF2WORD_Mode.SelectedValue.ToString()),
                                    BodyForm.MainForm.PDF2WORD_LoadPassword.Text);
                                break;
                            //excel转pdf
                            case ConvertFileType.Excel2Pdf:
                                Util.ConvertExcel2Pdf(
                                    ListViewFirstColumnText,
                                    ConvertedFileName,
                                    BodyForm.MainForm.ExportEachSheet.Checked);
                                break;
                            //word转图片
                            case ConvertFileType.Word2Image:
                                Util.ConvertWord2Image(
                                    ListViewFirstColumnText,
                                    ConvertedFileName,
                                    ExtensionString,
                                    BodyForm.MainForm.SetGrayCheckBox.Checked,
                                    BodyForm.MainForm.PageExportCheck.Checked,
                                    Convert.ToInt32(BodyForm.MainForm.DpiItemList.SelectedValue));
                                break;
                            //pdf转excel
                            case ConvertFileType.Pdf2Excel:
                                Util.ConvertPdf2Excel(
                                    ListViewFirstColumnText,
                                    ConvertedFileName,
                                    BodyForm.MainForm.ExcelSheelMode.Checked);
                                break;
                            //批量替换word内容
                            case ConvertFileType.WordReplace:
                                if (BodyForm.MainForm.WordReplaceFindTextBox.Text != string.Empty)
                                {
                                    Util.ReplaceDocumentContent(
                                        ListViewFirstColumnText,
                                        ConvertedFileName,
                                        "WORD",
                                        BodyForm.MainForm.WordReplaceFindTextBox.Text,
                                        BodyForm.MainForm.WordReplaceTextBox.Text,
                                        BodyForm.MainForm.IgnoreFootContent.Checked,
                                        BodyForm.MainForm.IgnoreCase.Checked,
                                        false,
                                        -1,
                                        -1,
                                        false,
                                        ReplaceWordFontSetting.FontName,
                                        ReplaceWordFontSetting.FontSize,
                                        BodyForm.MainForm.UseNewStyle.Checked);
                                }
                                break;
                            //批量替换Excel内容
                            case ConvertFileType.ExcelReplace:
                                Util.ReplaceDocumentContent(
                                    ListViewFirstColumnText,
                                    ConvertedFileName,
                                    "EXCEL",
                                    BodyForm.MainForm.ExcelFindTextBox.Text,
                                    BodyForm.MainForm.ExcelReplaceBox.Text,
                                    false,
                                    BodyForm.MainForm.ExcelNoIgnoreCase.Checked,
                                    BodyForm.MainForm.RemoveRows.Checked,
                                    Convert.ToInt32(BodyForm.MainForm.ExcelStartRow.Text),
                                    Convert.ToInt32(BodyForm.MainForm.ExcelEndRow.Text),
                                    BodyForm.MainForm.UseRegex.Checked);
                                break;
                            // 批量图片转为ICO
                            case ConvertFileType.Image2Ico:
                                Util.ConvertImage2Ico(
                                    ListViewFirstColumnText,
                                    ConvertedFileName,
                                    Convert.ToInt32(BodyForm.MainForm.IcoSizeDrop.SelectedValue));
                                break;

                            // Word批量转换为Excel
                            case ConvertFileType.Word2Excel:
                                Util.ConvertWord2Excel(ListViewFirstColumnText, ConvertedFileName);
                                break;
                            // Excel批量转换为Word
                            case ConvertFileType.Excel2Word:
                                Util.ConvertExcel2Word(ListViewFirstColumnText, ConvertedFileName);
                                break;
                            // pdf拆分
                            case ConvertFileType.SplitPdf:
                                Util.SplitPdf(
                                    ListViewFirstColumnText,
                                    SelectSavePathstring,
                                    BodyForm.MainForm.SplitPdf_Range.Checked,
                                    BodyForm.MainForm.SplitPdfRange_Start.Text.Trim(),
                                    BodyForm.MainForm.SplitPdfRange_End.Text.Trim(),
                                    int.Parse(BodyForm.MainForm.SplitPdf_PerPageCount.Value.ToString()),
                                    BodyForm.MainForm.SplitPdf_ByBookMark.Checked,
                                    BodyForm.MainForm.SplitPdf_Single.Checked);
                                break;
                            // pdf添加水印
                            case ConvertFileType.AddWaterMarkPdf:
                                Util.AddWaterMark2Pdf(
                                    ListViewFirstColumnText,
                                    ConvertedFileName,
                                    BodyForm.MainForm.PdfWaterMarkText.Text,
                                    float.Parse(BodyForm.MainForm.PdfWaterMarkOpcityNumber.Text.ToString()),
                                    BodyForm.MainForm.PdfWaterMarkRotateDegNumber.Text,
                                    BodyForm.MainForm.PdfWaterMarkHorSetting.SelectedIndex,
                                    BodyForm.MainForm.PDFWaterMarkVerSetting.SelectedIndex,
                                    PrivateFontSetting.FontColor,
                                    PrivateFontSetting.FontName,
                                    PrivateFontSetting.FontSize,
                                    BodyForm.MainForm.AddWaterMarkBackGroundImageFileName,
                                    BodyForm.MainForm.WaterMarkImageHeight.Text,
                                    BodyForm.MainForm.WaterMarkImageWidth.Text);
                                break;
                            // pdf移除水印
                            case ConvertFileType.RemovePdfWaterMark:
                                Util.RemovePdfWaterMark(ListViewFirstColumnText, ConvertedFileName);
                                break;
                            // ppt转pdf
                            case ConvertFileType.PPT2PDF:
                                object SelectCommentPostion = Enum.Parse(
                                    typeof(Aspose.Slides.Export.NotesPositions),
                                    BodyForm.MainForm.ExportNotePageCombox.SelectedValue.ToString());
                                Util.ConvertPPT2PDF(
                                    ListViewFirstColumnText,
                                    ConvertedFileName,
                                    BodyForm.MainForm.DrawBlackLine.Checked,
                                    BodyForm.MainForm.ConvertPPT2PDFPassword.Text.Trim(),
                                    BodyForm.MainForm.ExportHiddenPage.Checked,
                                    (Aspose.Slides.Export.NotesPositions)SelectCommentPostion);
                                break;
                            // pdf转ppt
                            case ConvertFileType.PDF2PPT:
                                Util.ConvertPDF2PPT(
                                    ListViewFirstColumnText,
                                    ConvertedFileName,
                                    BodyForm.MainForm.ExtraOcrBox.Checked,
                                    BodyForm.MainForm.SplitShapeBox.Checked,
                                    BodyForm.MainForm.RenderImageBox.Checked);
                                break;
                            // pdf版本转换
                            case ConvertFileType.ConvertPdfCompliance:
                                object SelectPdfCompliance = Enum.Parse(
                                    typeof(Aspose.Pdf.PdfFormat),
                                    BodyForm.MainForm.ConvertPdfComplianceVersion.SelectedItem.ToString());
                                Util.ConvertPdfCompliance(
                                    ListViewFirstColumnText,
                                    ConvertedFileName,
                                    (Aspose.Pdf.PdfFormat)SelectPdfCompliance);
                                break;
                            // 压缩PDF
                            case ConvertFileType.CompressPDF:
                                Util.CompressPDF(
                                    ListViewFirstColumnText,
                                    ConvertedFileName,
                                    BodyForm.MainForm.CompressPDF_WEB.Checked,
                                    BodyForm.MainForm.CompressPDF_CompressImage.Checked,
                                    int.Parse(BodyForm.MainForm.CompressPDF_ImageQuailty.SelectedItem.ToString()),
                                    int.Parse(BodyForm.MainForm.CompressPDF_ImageResoution.SelectedItem.ToString()),
                                    (Aspose.Pdf.Optimization.ImageCompressionVersion)Enum.Parse(
                                        typeof(Aspose.Pdf.Optimization.ImageCompressionVersion),
                                        BodyForm.MainForm.CompressPDF_ImageCompressVersion.SelectedValue.ToString()),
                                    BodyForm.MainForm.CompressPDF_CompressImageFlate.Checked,
                                    BodyForm.MainForm.CompressPDF_RemoveUnuseStream.Checked,
                                    BodyForm.MainForm.CompressPDF_LinkSameStream.Checked,
                                    BodyForm.MainForm.CompressPDF_CancelEmbedFont.Checked,
                                    BodyForm.MainForm.CompressPDF_RemoveForms.Checked,
                                    BodyForm.MainForm.CompressPDF_RemoveUnuseObject.Checked);
                                break;
                            // 压缩图片
                            case ConvertFileType.CompressImage:
                                bool UseSelfExt = BodyForm.MainForm.CompressImage_NotUseSelfExt.Checked;//是否不使用源文件后缀名
                                string SavedFileName = string.Empty;
                                if (UseSelfExt)
                                {
                                    SavedFileName = ConvertedFileName;
                                }
                                else
                                {
                                    string ImageFileExtenString = Path.GetExtension(ListViewFirstColumnText);

                                    SavedFileName = Path.Combine(
                                        SelectSavePathstring,
                                        $"{FileNameWithOutExtension}{ImageFileExtenString}");
                                }

                                Util.CompressImage(
                                    ListViewFirstColumnText,
                                    SavedFileName,
                                    (Aspose.Imaging.FileFormats.Jpeg.JpegCompressionMode)Enum.Parse(
                                        typeof(Aspose.Imaging.FileFormats.Jpeg.JpegCompressionMode),
                                        BodyForm.MainForm.CompressJpegMode_Combox.SelectedItem.ToString()),
                                    (Aspose.Imaging.FileFormats.Jpeg.JpegCompressionColorMode)Enum.Parse(
                                        typeof(Aspose.Imaging.FileFormats.Jpeg.JpegCompressionColorMode),
                                        BodyForm.MainForm.CompressJpegColorMode_Combox.SelectedItem.ToString()),
                                    int.Parse(BodyForm.MainForm.CompressJpegQuailty_Combox.SelectedItem.ToString()),
                                    int.Parse(BodyForm.MainForm.CompressPngLevel_Combox.SelectedItem.ToString()),
                                    (Aspose.Imaging.FileFormats.Png.PngColorType)Enum.Parse(
                                        typeof(Aspose.Imaging.FileFormats.Png.PngColorType),
                                        BodyForm.MainForm.CompressPngColorMode_Combox.SelectedItem.ToString()),
                                    (Aspose.Imaging.FileFormats.Bmp.BitmapCompression)Enum.Parse(
                                        typeof(Aspose.Imaging.FileFormats.Bmp.BitmapCompression),
                                        BodyForm.MainForm.CompressBmpMode_Combox.SelectedItem.ToString()),
                                    int.Parse(BodyForm.MainForm.CompressBmpPixeBits_Combox.SelectedItem.ToString()));
                                break;
                            case ConvertFileType.Html2PDF:
                                Util.ConvertHtml2PDFAsync(
                                    ListViewFirstColumnText,
                                    ConvertedFileName,
                                    BodyForm.MainForm.html2pdf_textbox_chromepath.Text,
                                    BodyForm.MainForm.html2pdf_combox_pagesize.SelectedIndex,
                                    bool.Parse(BodyForm.MainForm.html2pdf_combox_pagedirect.SelectedValue.ToString()),
                                    BodyForm.MainForm.html2pdf_checkbox_usecss.Checked,
                                    BodyForm.MainForm.html2pdf_textbox_margin_top.Text,
                                    BodyForm.MainForm.html2pdf_textbox_margin_left.Text,
                                    BodyForm.MainForm.html2pdf_textbox_margin_bottom.Text,
                                    BodyForm.MainForm.html2pdf_textbox_margin_right.Text,
                                    BodyForm.MainForm.html2pdf_timeout.Value,
                                    BodyForm.MainForm.html2pdf_wait_timeout.Value,
                                    BodyForm.MainForm.html2pdf_wait_all_resource.Checked);
                                //Util.ConvertHtml2Pdf(ListViewFirstColumnText, ConvertedFileName);
                                break;
                            case ConvertFileType.Word2EPUB:
                                int TempImageDpiValue = 100;
                                if (BodyForm.MainForm.CoverImageDpi.Text != string.Empty)
                                {
                                    TempImageDpiValue = int.Parse(BodyForm.MainForm.CoverImageDpi.Text);
                                }
                                Util.ConvertWord2EPUB(
                                    ListViewFirstColumnText,
                                    ConvertedFileName,
                                    BodyForm.MainForm.Word2EpubAuthorName.Text,
                                    BodyForm.MainForm.Word2EpubConverImage.Text,
                                    TempImageDpiValue);
                                break;
                            case ConvertFileType.EPUB2Word:
                                Util.ConvertEPUB2Word(ListViewFirstColumnText, ConvertedFileName);
                                break;
                            case ConvertFileType.EPUB2Pdf:
                                Util.ConvertEPUB2Pdf(ListViewFirstColumnText, ConvertedFileName);
                                break;
                            case ConvertFileType.SplitWord:
                                Util.SplitWord(
                                    ListViewFirstColumnText,
                                    SelectSavePathstring,
                                    BodyForm.MainForm.SplitWord_Single.Checked,
                                    BodyForm.MainForm.SplitWord_Range_Start.Text.Trim(),
                                    BodyForm.MainForm.SplitWord_Range_End.Text.Trim(),
                                    int.Parse(BodyForm.MainForm.SplitWord_PageCount.Value.ToString()),
                                    BodyForm.MainForm.SplitWordReUpdatePageNumber.Checked);
                                break;
                            case ConvertFileType.WeBp2Image:
                                Util.ConvertWeBp2Image(ListViewFirstColumnText, ConvertedFileName);
                                break;
                            case ConvertFileType.SplitPPT:
                                Util.SplitPPT(
                                    ListViewFirstColumnText,
                                    SelectSavePathstring,
                                    BodyForm.MainForm.SplitPPT_SignleExport.Checked,
                                    BodyForm.MainForm.SplitPPT_RangeExport_Start.Text,
                                    BodyForm.MainForm.SplitPPT_RangeExport_End.Text,
                                    (Aspose.Slides.SlideSizeType)Enum.Parse(
                                        typeof(Aspose.Slides.SlideSizeType),
                                        BodyForm.MainForm.SplitPdfSizeCombox.SelectedItem.ToString()),
                                    (Aspose.Slides.SlideSizeScaleType)Enum.Parse(
                                        typeof(Aspose.Slides.SlideSizeScaleType),
                                        BodyForm.MainForm.SplitPdfScaleCombox.SelectedValue.ToString()));
                                break;
                            default:
                                break;
                        }
                        ListViewControl.Items[TempIndex].SubItems.Add(ConvertedFileName);
                        ListViewControl.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);

                        if (File.Exists(ConvertedFileName))
                        {
                            FileInfo ConverdFileInfo = new FileInfo(ConvertedFileName);

                            //获取转换后的文件大小
                            ListViewControl.Items[TempIndex].SubItems
                                .Add(Util.GetFileSizeDisplayString(ConverdFileInfo.Length));
                            ListViewControl.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
                        }

                        ListViewControl.BeginInvoke(
                            new Action(
                                () =>
                                {
                                    ListViewControl.Items[TempIndex - 1].Selected = true;
                                    ListViewControl.EnsureVisible(TempIndex - 1);
                                    ListViewControl.Focus();
                                }));
                    }
                    StatusLabelControl.Text = "处理完毕";
                    CallButton.Enabled = true;

                    //处理完毕后需要做的事情
                    switch (ConverType)
                    {
                        case ConvertFileType.Word2Pdf:
                            if (BodyForm.MainForm.OpenPdfOptions.Checked)
                            {
                                Task<List<string>> TempPdfFileNames = GetListViewLastItemContentAsync(
                                    BodyForm.MainForm.WordFileListView);
                                TempPdfFileNames.Result
                                    .ForEach(
                                        (pdfFileName) =>
                                        {
                                            Process.Start(pdfFileName);
                                        });
                            }

                            if (BodyForm.MainForm.RemoveTempDocx.Checked)
                            {
                                if (TempSaveDocxPathString != string.Empty)
                                {
                                    Directory.Delete(TempSaveDocxPathString, true);
                                }
                            }
                            break;
                        default:
                            break;
                    }

                    BodyForm.MainForm
                        .BeginInvoke(
                            new Action(
                                () =>
                                {
                                    if (string.Compare(
                                            BodyForm.MainForm.ShowOpenTargetDialog,
                                            "on",
                                            StringComparison.Ordinal) ==
                                        0)
                                    {
                                        DialogResult MessageBoxResult = MessageBox.Show(
                                            "处理完毕,是否需要打开转换后目录?",
                                            "提示",
                                            MessageBoxButtons.YesNo,
                                            MessageBoxIcon.Question);
                                        if (MessageBoxResult == DialogResult.Yes)
                                        {
                                            Process.Start(SelectSavePathstring);
                                        }
                                    }
                                }));
                }
            }
        }
yimenghan 发表于 2024-4-4 19:31
感谢楼主无私的奉献。大佬牛擦擦,另外请问一下有没有那种指定文件名,比如aaaaa20000s55312.txt,a2aaasd5000aafaf.txt像这种很长的文件名,从左往右第几个字符位置开始到第几个位置进行批量替换。因为酷狗加载到本地的歌词名,特别长,然后用的那个本地音乐软件是根据音乐文件名匹配歌词的,所以歌曲多的话几百首歌,要进行歌词文件名称替换,就会很麻烦很麻烦,得一个一个重命名替换,费时费时还容易出错,比如:AZ珍珍 - 时光不染曾经-55f5c7b08dcce56737ce7007dde78ecf-156803003-00000000.krc    我只需要:AZ珍珍 - 时光不染曾经.krc 就行,有没有什么方法能进行批量替换,这个需要的就跟Excel里面那个函数取内容差不多的批量替换
 楼主| jidesheng6 发表于 2024-7-20 22:44
long66688 发表于 2024-7-20 13:58
楼主,还想问一下这个去shuiyin功能是去哪些水印,我看有的水印可以有的不行,楼主这个用的是哪个库啊{:301 ...

aspose.pdf库,水印有两种,一种是图章stamp类型水印,另一种是附件水印,如果是图片类型的水印(在aspose里面这种叫做stamp水印),是无法去除的,这种相当于和原稿融合在了一起,常规附件水印和文档本身是分开的,这种是可以去除的,但是目前估计大多数都用stamp水印,就是防止被去除

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
long66688 + 1 + 1 用心讨论,共获提升!

查看全部评分

dhwl9899 发表于 2024-4-4 17:15
谢谢大侠分享,收藏备用。
dhwl9899 发表于 2024-4-4 17:17
字体文件(WORD转PDF或者其他功能出现类似 口口口 乱码使用:期盼百度盘,谢谢。
 楼主| jidesheng6 发表于 2024-4-4 17:22
dhwl9899 发表于 2024-4-4 17:17
字体文件(WORD转PDF或者其他功能出现类似 口口口 乱码使用:期盼百度盘,谢谢。

链接: https://pan.baidu.com/s/1kMNJLcoU7nx7uvBkvULxAg?pwd=xy1q 提取码: xy1q

单独给你分享个,这个在百度盘的分享软件目录里面应该也是有了的

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
dhwl9899 + 1 + 1 谢谢@Thanks!

查看全部评分

dhwl9899 发表于 2024-4-4 17:24
谢谢@jidesheng6兄台厚爱。
tingyucloud 发表于 2024-4-4 17:26
感谢您的无私分享
ajue777 发表于 2024-4-4 17:29
真的是强啊
gaoxiaoao 发表于 2024-4-4 17:32
大佬技术,格局令人仰慕啊
binqi 发表于 2024-4-4 17:38
谢谢楼主分享  
Owenpojie 发表于 2024-4-4 17:39
很强大啊,谢谢分享!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-22 21:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表