利用Jacob将 lrc 文件转换为 docx 文件并整理格式

Java 使用jacob ppt文件转pptx,doc转docx;word 转html、pdf等 Java 使用jacob ppt文件转pptx,doc转docx 阅读详情
  • 问题描述
    • 最近听SVOA,很多单词不认识,想拿对应的 lrc 文件打印下来,无奈 lrc 文件格式太乱,直接打印耗费纸张不说,看着实在不爽;手动整理吧,量太大,400多个文件
    • 于是想:搞IT的,能不能写段程序让电脑把这个事情做了
    • 于是又了下面的代码,希望可以帮到一些有同样需求的童鞋
  • 要求:


    • jacob-1.17-x64.dll 是给 64 位机器用的
    • jacog-1.17-x86.dll就是给 32 机器用的了
    • 选择对应你机器的文件放在 C:\Windows\System32 下
    • 将 jacog.jar 引入项目
  • 直接贴代码:
    • package lyric2doc;
      
      import java.util.List;
      
      import doc.Doc;
      
      import lyric.Lyric;
      
      public class Lyric2Doc {
          
          public static String nullityTag = "00:00.00";
          
          public static String titleFontSize = "12";
          public static String bodyFontSize = "11";
          
          public static int alignLeft = 0;
          public static int alignCenter = 1;
          public static int alignRight= 2;
          public static int alignJustify = 3;
          public static int alignDistributed = 4;
          
          //default 1.0
          public static int lineSpace0 = 0;
          //1.5
          public static int lineSpace1 = 1;
          //2.0
          public static int lineSpace2 = 2;
          //minimum
          public static int lineSpace3 = 3;
          //fixed value
          public static int lineSpace4 = 4;
          
          public static void main(String[] args) {
              for (String fileAbsoluteName : Lyric.fileAbsoluteNameList) {
                  String fileName = fileAbsoluteName
                          .substring(fileAbsoluteName.lastIndexOf("\\") + 1, fileAbsoluteName.length() - 4);
                  
                  Doc.createNewDocument();
                  
                  Doc.writeIntoAString("Special VOA 2013", "Arial", titleFontSize, "0", true, false, false, 0, 1);
                  Doc.writeIntoAString("\n", "Arial", titleFontSize, "0", true, false, false, 0, 1);
                  Doc.writeIntoAString(fileName, "Arial", titleFontSize, "0", true, false, false, 0, 1);
                  Doc.writeIntoAString("\n", "Arial", titleFontSize, "0", true, false, false, 0, 1);
                  
                  List<String> lineList = Lyric.readLines(fileAbsoluteName);
                  for (String string : lineList) {
                      String prefixTwo2Nine = string.substring(1, 9);
                      if (String.valueOf(prefixTwo2Nine.charAt(0)).matches("^[0-9]")) {
                          if (!prefixTwo2Nine.equals(nullityTag)) {
                              Doc.writeIntoAString(string.substring(10, string.length()), "Arial", bodyFontSize, "0", false, false, false, 0, 1);
                              String lastChar = String.valueOf(string.charAt(string.length() - 1));
                              if (lastChar.matches("[a-zA-Z]")
                                      || lastChar.equals(",")
                                      || lastChar.equals("\"")) {
                                  Doc.writeIntoAString(" ", "Arial", bodyFontSize, "0", false, false, false, 0, 1);
                              } else if (lastChar.equals(".")
                                      || lastChar.equals("!")) {
                                  Doc.writeIntoAString("\n", "Arial", bodyFontSize, "0", false, false, false, 0, 1);
                              }
                          }
                      }
                  }
                  
                  Doc.saveDocumentAs(fileName);
                  Doc.closeDocument();
              }
              
              Doc.closeMsWordApp();
          }
      
      }
    • package lyric;
      
      import java.io.BufferedReader;
      import java.io.File;
      import java.io.FileInputStream;
      import java.io.FileNotFoundException;
      import java.io.IOException;
      import java.io.InputStreamReader;
      import java.util.ArrayList;
      import java.util.List;
      
      public class Lyric {
          
          public static List<String> fileAbsoluteNameList = new ArrayList<String>();
          
          private static String path = "F:\\Music\\Lyrics";
          
          static {
              getAllEnglishAbsoluteFileName();
          }
          
          private static void getAllEnglishAbsoluteFileName() {
              
              File file = new File(path);
              
              File[] fileArray = file.listFiles();
              
              for (int i = 0; i < fileArray.length; i ++) {
                  if (fileArray[i].isFile()) {
                      if (fileArray[i].getName().substring(0, 1).matches("[a-zA-Z]")) {
                          fileAbsoluteNameList.add(fileArray[i].getAbsolutePath());
                      }
                  }
              }
          }
          
          public static List<String> readLines(String fileName) {
              List<String> lineList = new ArrayList<String>();
              
              File file = new File(fileName);
              
              InputStreamReader isr = null;
              BufferedReader br = null;
              try {
                  isr = new InputStreamReader(new FileInputStream(file), "GB2312");
                  br = new BufferedReader(isr);
                  
                  String tempString = null;
                  
                  while ((tempString = br.readLine()) != null) {
                      if (tempString.trim().length() > 10) {
                          String newString = tempString
                                  .replace("。", ".")
                                  .replace("“", "\"")
                                  .replace("”", "\"")
                                  .trim();
                          lineList.add(newString);
                      }
                  }
              } catch (FileNotFoundException e) {
                  e.printStackTrace();
              } catch (IOException e) {
                  e.printStackTrace();
              } finally {
                  if (br != null) {
                      try {
                          br.close();
                      } catch (IOException e) {
                          e.printStackTrace();
                      }
                  }
              }
              
              return lineList;
          }
      
      }
    • package doc;
      
      import com.jacob.activeX.ActiveXComponent;
      import com.jacob.com.Dispatch;
      import com.jacob.com.Variant;
      
      public class Doc {
          
          //Decide if the process is visible
          private static boolean ifWordVisible = true;
          
          private static String savePathPrefix = "F:\\Music\\Special_VOA\\LyricPrint\\";
          
          private static ActiveXComponent MsWordApp = null;
          
          private static Dispatch documents = null;
          
          //Maintain the current global document object
          private static Dispatch document = null;
          
          static {
              if (MsWordApp == null) {
                  MsWordApp = new ActiveXComponent("Word.Application");
              }
              
              Dispatch.put(MsWordApp, "Visible", ifWordVisible);
              
              documents = Dispatch.get(MsWordApp, "Documents").toDispatch();
          }
          
          public static void createNewDocument() {
              document = Dispatch.call(documents, "Add").toDispatch();
          }
          
          public static void saveDocumentAs(String fileName) {
              Dispatch.call(document, "SaveAs", savePathPrefix + fileName + ".docx");
          }
          
          public static void closeDocument() {
              Dispatch.call(document, "Close", new Variant(0));
              document = null;
          }
          
          public static void closeMsWordApp() {
              Dispatch.call(MsWordApp, "Quit");
              documents = null;
              MsWordApp = null;
          }
          
          public static void writeIntoAString(String string,
                  String fontName,
                  String fontSize,
                  String color,
                  boolean bold,
                  boolean italic,
                  boolean underline,
                  int align,
                  int lineSpace) {
              Dispatch selection = Dispatch.get(MsWordApp, "Selection").toDispatch();
              Dispatch.call(selection, "MoveRight", new Variant(1), new Variant(1));
              Dispatch.put(selection, "Text", string);
              
              setFont(selection, fontName, fontSize, color, bold, italic, underline);
              
              Dispatch alignment = Dispatch.get(selection, "ParagraphFormat").toDispatch();
              Dispatch.put(alignment, "Alignment" , align);
              Dispatch.put(alignment, "LineSpacingRule" ,  new  Variant(lineSpace));
              
              Dispatch.call(selection, "MoveRight", new Variant(1), new Variant(1));
          }
          
          private static void setFont(Dispatch selection,
                  String fontName,
                  String fontSize,
                  String color,
                  boolean bold,
                  boolean italic,
                  boolean underLine) {
              Dispatch font = Dispatch.get(selection, "Font").toDispatch();
              Dispatch.put(font, "Name", new Variant(fontName));
              Dispatch.put(font, "Size", fontSize);
              Dispatch.put(font, "Color", color);
              Dispatch.put(font, "Bold", new Variant(bold));
              Dispatch.put(font, "Italic", new Variant(italic));
              Dispatch.put(font, "Underline", new Variant(underLine));
          }
          
      }
  • 欢迎讨论交流
Java使用jacob将xml格式word转换为docx格式 使用xml生成的doc文件在手机上打开出现问题,不显示内容而显示xml 查找了一下之后决定使用jacob来进行转换 public class Office2HtmlUtil { // 格式大全:前缀对应以下方法的fmt值 // 0:Microsoft Word 97 - 2003 文档 (.doc) // 1:Microsoft Word 97 - 2003 模板 ... 阅读详情

相关推荐

完美解决doc、docx格式word转换为Html

由于项目需要,需要在线预览文档,所以就想转换为htmL格式; 此项目为maven项目,引入的包可能需要一些时间; maven项目转换为eclipse项目命令是:mvn eclipse:eclipse,然后导入到eclipse; jar引入完成后,绝对100%能运行;

正则表达式练习: android 歌词解析lrc 转 txt 代码

//主要用到了java io 的基本知识 和 正则表达式 package com.su; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import jav...

梦想无论怎样模糊,总潜伏在我们心底,使我们的心境永远得不到安宁. 225

jacob操作word(超详细)

Jacob下载地址:http://sourceforge.net/project/showfiles.phpgroup_id=109543&package_id=118368 1、把jacob.dll文件,复制到 windows\system32 目录下。(注:我用的时候这个方法不能运行) 2、 把jacob.dll放入 Java\jdk1.5.0_06\jre\bin目录下.把jacob.jar放入 Java\jdk1.5.0_0\jre\lib\ext 目录下.可以正常运行。 3、把jacob.dll放入 \glc\src目录下.把jacob.jar放入WEB-INF\lib目录下,也是可以正常运行。

LRC格式转换

[code="java"]import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.util.Co...

Henyue的专栏 1144

Java实现doc文件转成docx文件

Java代码实现doc后缀文件转换成docx后缀文件,eclipse下直接运行

YOLO26算法车道线检测+训练好的模型+360张数据集+pyqt可视化界面.zip

附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[未获取()] 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 55 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9512** mAP50-95 | 0.6746 Precision | 0.8796 Recall | 0.8825 train/box_loss | 0.8608 train/cls_loss | 0.7232 val/box_loss | 0.9955 val/cls_loss | 0.5511 【训练过程分析】 这轮训练我经历了从初始到稳定的曲折过程。前 20 个epoch,loss 曲线呈现了陡峭的下降趋势,mAP50 指标从 0.8 开始逐步攀升,仿佛在寻找一个合适的平衡点。然而,从第 21 个epoch 开始,mAP50 的提升速率显著放缓,整体曲线显得有些曲折,有时甚至停滞不前,让我一度以为训练出现了问题。直到第 35 个epoch,loss 开始逐渐趋于平稳,这标志着模型已经找到了一个较好的收敛区间。到了最后的 20 个 epoch,尽管 mAP50 依旧在稳步上升,但提升幅度已经不大,这意味着模型已经接近其性能天花板。 在这个过程中,我重点关注了 box_loss 和 cls_loss 的变化。初期阶段,box_loss 快速下降,从 0.9 逐渐降至 0.86,而 cls_loss 则从 0.75 逐步下降至... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。

android lrc歌词解析,正则表达式练习: android 歌词解析lrc 转 txt 代码

//主要用到了java io 的基本知识 和 正则表达式package com.su;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileReader;import java.io.Fil...

weixin_36011231的博客 324

关于AI开发方法论-以文档为索引的高质量协作开发:让一次现象描述精准命中几个代码块

对AI的编码规范进行约束

InfoQ: 用Java操作Office 2007

用Java操作Office 2007作者 Ted Neward译者 张立 发布于 2007年9月20日 上午12时41分 在上一篇“Office富客户端应用”中,我们提到了将Office 2007平台作为一个构建富客户端应用程序的基本平台,并通过不同的手段使用Java来进行互操作。 但是,有一个Office/Java互操作的方面没有考虑到,那就是使Office和

smartcat86的专栏 5560

[arcgis插件]在批量出图时,如何把图层属性表以动态表格的形式插入到布局页面

在批量出图时,如何把图层属性表以动态表格的形式插入到布局页面。

坐听风雨 4556

Spring Cloud Gateway 结合OAuth2提供UAA服务

微服务做用户认证和授权一直都是一个难点,随着OAuth2.0的密码模式被作废,更是难上加难了。今天胖哥群里的一个群友搭建用户认证授权体系的时候遇到了一些棘手的问题,这让胖哥觉得是时候分享一些思路出来了。 两种思路 通常微服务的认证和授权思路有两种: 所有的认证授权都由一个独立的用户认证授权服务器负责,它只负责发放Token,然后网关只负责转发请求到各个微服务模块,由微服务各个模块自行对Token进行校验处理。 另一种是网关不但承担了流量转发作用,还承担认证授权流程,当前请求的认证信息由网关中继给下游

duan18888的博客 647

jacob 实现Office Word文件格式转换 docTotxt,docTopdf,docxTodoc,pdfTotxt ...

关于jacob用法,百度一下就会发现几乎都是复制2004年一个代码,那段代码实现的是从一个目录读取所有doc文件,然后把它转html格式。 为了便习学习和使用,我把代码看懂后精简了一下,得出不少新结论,拿出来和大家分享。   1、jacob的安装配置         与处理其他jar文件一样,将1号文件加载到classpath中(由于我计划把它应用到Web中,所以我它复制

1492

STM32 IAP+APP合并Hex文件全自动脚本(Keil5一键生成)

本文详细介绍了一种基于Keil5开发环境的STM32 IAP与APP程序Hex文件全自动合并方案。通过编写批处理或Python脚本,并将其集成到Keil的编译后流程中,实现一键编译、自动合并,彻底解决手动操作繁琐易错的问题,极大提升STM32固件开发与远程升级的效率。

weixin_29191761的博客 304

Java利用jacob实现文档格式转换

实现文档格式之间的转换,我使用的是jacob-1.7版本,需要jacob.jar来调用activex控件,本机需安装WPS/office,还需要jacob.jar以及jacob.dll  其中:     jacob.dll 需要放置在系统system32下,如果系统是c盘:C://windows/system32/下面      jacob.dll放在类似这样的目录下,D:\Java

wisdom_bo的博客 6139

【rk3566/3568】Android 11移植gms

【rk3566/3568】Android 11移植gms 1、前言 测试功能时,想去Google play store去下个应用测试,发现通过网页搜索总是下载不到正确的谷歌服务框架;于是就不得不去搞一个内置的gms。 2、移植 1、需要下载Android 11对应的gms的包 opengapps 2、看下文件目录 直接移植core里面的文件,GAPPs Optional按需添加 3、在vendor下创建google目录 ...

lin_ff的博客 7643

【WRF-Chem工具】anthro_emiss 详解:生成人为排放数据

anthro_emiss 详解:生成人为排放数据

WW、forever的博客 2053

使用jacob将docx转换为doc,遇到各种坑,一一为大家填好

项目要导出word,用的poi的XWPF各种调试生成了一个比较复杂的word文档,用wps打开没问题,但是用office表格就乱了,各种捣鼓,才知道XWPF生成的是word2007,word97·2003用的是是HWPF,XWPF和HWPF的api根本不兼容完全是两个世界,格式也是改了好久才满意,不想再动了,各种找办法将docx转换为doc的方法,最后还是用了jacob,终于成功了但是按照文档的代...

My_Way2011的博客 2034

霜冰优化算法(RIME)详解:从自然现象到智能优化

霜冰优化算法(RIME)是一种新型元启发式优化算法,灵感源于自然界中霜冰的形成过程。该算法通过模拟软霜和硬霜的不同生长特性,实现了高效的全局探索和局部开发平衡。RIME算法包含三个核心机制:软霜搜索策略模拟随机覆盖特性实现全局探索;硬霜穿刺机制模拟定向生长特性进行局部开发;正向贪婪选择机制确保解的持续优化。与遗传算法、粒子群算法相比,RIME具有参数少、收敛快、自适应平衡等优势,特别适合处理高维复杂优化问题。算法已在工程优化、机器学习等领域获得广泛应用,发表一年内即成为高被引论文。

qq_42212808的博客 778

java调用com组件操作word使用总结(jacob)

ava调用com组件操作word使用总结(jacob) 简单描述     在此处输入简单摘要 特别声明:使用java-com技术可以完成任何VBA可以完成的office文档操作;  一、准备工作    先了解一下概念,JACOB 就是 JAVA-COM Bridge的缩写,提供自动化的访问com的功能,也是通过JNI功能访问windows平台下的com组件或者win32系统库的。这是一个

一笑天 1万+

pycharm下载continue插件接入DeepSeek的API,向其提问输出乱码,如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 2219

家用扫地机器人实物拆解报告-从顶盖到每一颗螺丝 · 逐层拆解旗舰扫拖一体机器人

2026年旗舰扫拖机器人拆解报告:采用D形机身设计,主机重4.5kg,基站重12kg。核心配置包括RK3588S+STM32H743双处理器、8颗21700电池、LDS激光雷达和双摄像头+结构光导航系统。创新设计亮点:锥形滚刷自动排毛发、活水循环拖地系统、基站集成450W强力集尘和自动上下水模块(带三重防漏保护)。整机采用模块化设计,关键部件均支持快速更换,在密封性、防呆设计和降本增效方面展现出成熟的工程智慧。

智能硬件研发,欢迎交流 515

Jacob 另存为Word、Excel

import java.util.Random; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.ComThread; import com.jacob.com.Dispatch; import com.jacob.com.Variant; public class JacobUtil { ...

James Blog 562

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

jacob 实现Office Word文件格式转换

关于jacob用法,百度一下就会发现几乎都是复制2004年一个代码,那段代码实现的是从一个目录读取所有doc文件,然后把它转html格式。 为了便习学习和使用,我把代码看懂后精简了一下,得出不少新结论,拿出来和大家分享。2、一个具体的代码示例:package ccnu; import com.jacob.com.*; import com.jacob.activeX.*; import j...

weixin_30408309的博客 253

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

jacob操作 office 内部对应代码

Excel操作 转换 xlAddIn18MicrosoftOfficeExcel加载项xlAddIn818Excel2007加载项xlCSV6CSVxlCSV...

weixin_30897233的博客 230

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: 64位机器使用Chrome下载文件总是损坏
下一篇: Unicore xuudb启动报错:java.security.InvalidKeyException: Illegal key size 解决方案
SecondJanuary
博客等级 码龄14年 57粉丝 119原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值