借助 unoconv 批量转 xls 到 pdf文件

文章分类:Web前端 
因为公司的一些业务需求,我需要批量的将所有的xls文件转化为pdf文件,如果一个个的点击,借助于adobe,那么无疑会需要很长的时间;相信这样子的业务需要肯定有市场的,这也意味着肯定存在这样子的软件。

网上搜索了很多软件,竟然发现这样子的软件多数为收费软件,或者存在免费软件,但是批量转的文件数量受到限制,而且转的效果并不是十分理想。

想到openoffice可以直接导出为pdf文件的功能,我想一定可以通过openoffice批量的将excel转为pdf。在网上搜索发现,debian系列的liunx源里面存在一个名叫unoconv的包,可以批量的将exce转为pdf,关键是转的速度很快,而且质量很高!好的,就用这款软件来实现吧。

由于公司封锁了多数文件的下载,我试验反复没有成功,让同事帮忙下载的文件,安装好以后也没有效果(我使用的是fedora,并且unoconv有rpm的包),就在我一筹莫展的时候,我发现原来下载的文件是不正确的(名字都可以看出来)。

从新下载几百k的小rpm包,成功安装。
新建excel文件,保存为a.xls,
在终端运行 unconv -f pdf a.xls
几秒钟后,转化成功。

如果有中文文件是不是可以完美的转为pdf?!带着疑问,我重新测试,good!如果多个文件的效率呢?不断的粘帖,等到了一百个文件左右的时候,重新运行,如此的高效,perfect!

至此,我已经完成了自己的一大心愿。

所以,如果你在为快速的转任何office文档,txt文档到pdf而发愁的话,那么,我推荐你使用linux(主要是debian系列和redhat系列的linux)和openoffice完美的解决这所有的问题。

另外,我发现unoconv是用python实现的,这也意味着两个跨平台的工具(openoffice和python)结合在一起,必然也可以产生跨平台的的windows版,只是我现在水平较弱,还没有实现,期待高手给出windows版的解决方案。



[b]批转换,带目录树
参考链接 http://bbs.chinaunix.net/archiver/?tid-1378949.html[/b]

[quote]wenyunqiu 发表于 2009-02-25 16:36

请教:如何批量将Doc文件转换为Pdf文件?
要转换一个doc文件为PDF格式,只需在命令中执行:

$ unoconv -f pdf myDoc.doc
即会生成一个名为myDoc.pdf的pdf文件。

现在我需要将一个目录树下面所有的doc文件转化为pdf的文件副本 保留原文件 然后保持文件目录结构不变
程序怎样写最高效最美观(文件很多很多)
waker 发表于 2009-02-25 16:39

看看基础12篇中的find和xargs
我是DBA 发表于 2009-02-25 16:41

for i in `ls`
do
unoconv -f pdf $i
done
haimming 发表于 2009-02-25 16:46

find ./ -name "*.doc" -exec unoconv -f pdf {} \;
liaosnet 发表于 2009-02-25 16:48

:em17: :em17:
[code]
for i in *
do
unoconv -f pdf ${i}.doc
done
[/code]
kwokcn 发表于 2009-02-25 16:51

[quote]原帖由 [i]haimming[/i] 于 2009-2-25 16:46 发表 [url=http://bbs2.chinaunix.net/redirect.php?goto=findpost&pid=10114450&ptid=1378949][img]http://bbs2.chinaunix.net/images/common/back.gif[/img][/url]
find ./ -name "*.doc" -exec unoconv -f pdf {} \; [/quote]
LZ提到了是目录树,这个应该是正解。
haimming 发表于 2009-02-25 16:51

回复 #5 liaosnet 的帖子
dx,忘了目录结构了:mrgreen: :mrgreen:
ywlscpl 发表于 2009-02-25 16:53

for i in `ls *.doc`
do
unoconv -f pdf $i
done
ywlscpl 发表于 2009-02-25 16:54

恩,多层目录的话得用find
liaosnet 发表于 2009-02-25 16:58

[quote]原帖由 [i]haimming[/i] 于 2009-2-25 16:51 发表 [url=http://bbs3.chinaunix.net/redirect.php?goto=findpost&pid=10114499&ptid=1378949][img]http://bbs3.chinaunix.net/images/common/back.gif[/img][/url]
dx,忘了目录结构了:mrgreen: :mrgreen: [/quote]
额...那就得用find了..

find . -type f -name "*.doc" | xargs unoconv -f pdf
飞鸿无痕 发表于 2009-02-25 21:52

回复 #10 liaosnet 的帖子
严重同意!!!!!!!!!
dashan79 发表于 2009-02-26 10:32

unoconv linux不带的,需要下载一个吧。?
liaosnet 发表于 2009-02-26 10:49

[quote]原帖由 [i]dashan79[/i] 于 2009-2-26 10:32 发表 [url=http://bbs3.chinaunix.net/redirect.php?goto=findpost&pid=10117955&ptid=1378949][img]http://bbs3.chinaunix.net/images/common/back.gif[/img][/url]
unoconv linux不带的,需要下载一个吧。? [/quote]

:em17: :em17: 自己装的~
wtuter 发表于 2009-02-26 14:39

回复 #13 liaosnet 的帖子
我的也没有,那个版本的linux有自带的吗?
wenyunqiu 发表于 2010-04-09 14:36

debian是源包安装的
红帽似乎得下载安装 我只试过debian上的 批量转换文档格式确实很快很方便
709101040516 发表于 2010-04-09 14:52

linux 下安装包谁能提供一下呢。这样就省得用windows的了。
wenyunqiu 发表于 2010-04-09 14:56

[url]http://dag.wieers.com/rpm/packages/unoconv/[/url]
这是redhat的 这命令依赖openoffice 在红帽上我转化不成功 其它哪位试出来共享一下方法
wgyzhechao 发表于 2010-04-09 14:57

find ./ -type f -exec unoconv -f pdf {} \;
yigenjin 发表于 2010-04-09 15:20

[quote]for i in `ls`
do
unoconv -f pdf $i
done
[size=2][color=#999999]我是DBA 发表于 2009-02-25 16:41[/color] [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=10114394&ptid=1378949][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url][/size][/quote]


我同意5楼的做法。

你知道你这个`ls`的后果么?

后果就是很多文件名中存在空格的文件将不能正确地被处理。


页: [1] [/quote]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用 Java 的 Runtime 类来执行 unoconv 命令,将 Word 文件换为 PDF 。以下是一个简单的示例代码: ```java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class WordToPdfConverter { public static void main(String[] args) { String inputFilePath = "input.docx"; // Word 文件路径 String outputFilePath = "output.pdf"; // PDF 文件路径 String command = "unoconv -f pdf " + inputFilePath; // unoconv 命令 try { Process process = Runtime.getRuntime().exec(command); // 执行 unoconv 命令 BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = reader.readLine()) != null) { System.out.println(line); // 输出 unoconv 命令的输出信息 } process.waitFor(); // 等待 unoconv 命令执行完成 // 将生成的 PDF 文件重命名 String tempFilePath = inputFilePath.replaceFirst("[.][^.]+$", ".pdf"); if (tempFilePath.equals(outputFilePath)) { System.out.println("Convertion completed!"); } else { if (new File(tempFilePath).renameTo(new File(outputFilePath))) { System.out.println("Convertion completed!"); } else { System.out.println("Failed to rename the file!"); } } } catch (IOException | InterruptedException e) { e.printStackTrace(); } } } ``` 在执行 unoconv 命令时,需要确保系统已经安装了 LibreOffice 或 OpenOffice,这两个软件都包含了 unoconv 工具。在执行之前,你需要将 unoconv 命令添加到系统 PATH 环境变量中,或者将 unoconv 安装到你的项目目录下并在命令中指定完整路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值