公司一个小项目要结尾了, 有非常多的表格, 而且非常复杂, 例如
例如:(这表格, 有想死的心…)
看到这样的表格,第一反应是n脸懵逼,这得做到啥时候啊,最后想到用一个方法,让客户自己玩!!
平台提供excel模版下载,客户下载填写完再提交excel,平台再将excel转pdf,顺便将pdf转成图片,给前端展示,想法简单,方案可行,开工!
本文选用openoffice,各位看官可自选用itext + poi,自己判别!当然也可以用jacob,前提是你不需要在linux中运行项目。
安装软件:下载传送门
win:
下载完成后,一路next,最好默认路径安装,免得折腾
完成后 win + r 填入 dcomcnfg 打开组件服务
设置openoffice组件服务, 都设成system
再设置标识为:交互式用户
进入到安装目录,如果路径是默认的,则在 c:\program files (x86)\openoffice 4\program 下面,
进到这个路径下,按住 shift 再点击鼠标右键,在此处打开命令窗口,输入 soffice -headless-accept=“socket,host=127.0.0.1,port=8100;urp;”-nofirststartwizard, 查看是否启动成功, 黑窗口输入 netstat -ano
windows下安装完毕!
参考: https://blog.csdn.net/qq_30987095/article/details/78789103
linux:下载传送门
根据自己的linux系统选择rpm包或者deb,如果是ubuntu则选deb,其他就选rpm包,查看当前操作系统是ubuntu还是centos
[root@iz2zeg3etf08f6snef3lgrz ~]# lsb_relea -alsb version::(略)distributor id:centosdescription:centos linux relea (略)relea:(略)codename:core
下载完毕后,利用ssh工具上传到服务器上!
> tar -zxvf apache_openoffice_4.1.3_linux_x86-64_install-rpm_zh-cn.tar.gz(略)......> ls zh-cn> cd zh-cn/rpms> lsopenoffice-core01-4.1.3-9783.x86_64.rpm openoffice-impress-4.1.3-9783.x86_64.rpm openoffice-zh-cn-4.1.3-9783.x86_64.rpmopenoffice-4.1.3-9783.x86_64.rpm openoffice-core02-4.1.3-9783.x86_64.rpm openoffice-javafilter-4.1.3-9783.x86_64.rpm openoffice-zh-cn-ba-4.1.3-9783.x86_64.rpmopenoffice-ba-4.1.3-9783.x86_64.rpm openoffice-core03-4.1.3-9783.x86_64.rpm openoffice-math-4.1.3-9783.x86_64.rpm openoffice-zh-cn-calc-4.1.3-9783.x86_64.rpmopenoffice-brand-ba-4.1.3-9783.x86_64.rpm openoffice-core04-4.1.3-9783.x86_64.rpm openoffice-ogltrans-4.1.3-9783.x86_64.rpm openoffice-zh-cn-draw-4.1.3-9783.x86_64.rpmopenoffice-brand-calc-4.1.3-9783.x86_64.rpm openoffice-core05-4.1.3-9783.x86_64.rpm openoffice-onlineupdate-4.1.3-9783.x86_64.rpm openoffice-zh-cn-help-4.1.3-9783.x86_64.rpmopenoffice-brand-draw-4.1.3-9783.x86_64.rpm openoffice-core06-4.1.3-9783.x86_64.rpm openoffice-ooofonts-4.1.3-9783.x86_64.rpm openoffice-zh-cn-impress-4.1.3-9783.x86_64.rpmopenoffice-brand-impress-4.1.3-9783.x86_64.rpm openoffice-core07-4.1.3-9783.x86_64.rpm openoffice-ooolinguistic-4.1.3-9783.x86_64.rpm openoffice-zh-cn-math-4.1.3-9783.x86_64.rpmopenoffice-brand-math-4.1.3-9783.x86_64.rpm openoffice-draw-4.1.3-9783.x86_64.rpm openoffice-pyuno-4.1.3-9783.x86_64.rpm openoffice-zh-cn-res-4.1.3-9783.x86_64.rpmopenoffice-bra竞争对手歌词nd-writer-4.1.3-9783.x86_64.rpm openoffice-gnome-integration-4.1.3-9783.x86_64.rpm openoffice-ure-4.1.3-9783.x86_64.rpm openoffice-zh-cn-writer-4.1.3-9783.x86_64.rpmopenoffice-brand-zh-cn-4.1.3-9783.x86_64.rpm openoffice-graphicfilter-4.1.3-9783.x86_64.rpm openoffice-writer-4.1.3-9783.x86_64.rpmopenoffice-calc-4.1.3-9783.x86_64.rpm openoffice-images-4.1.3-9783.x86_64.rpm openoffice-xsltfilter-4.1.3-9783.x86_64.rpm[注释:运行下面命令, 生成 desktop-integration包]> yum localinstall *.rpm> (略...)> cd desktop-integration/> ls> openoffice4.1.3-freedesktop-menus-4.1.3-9783.noarch.rpm openoffice4.1.3-mandriva-menus-4.1.3-9783.noarch.rpm openoffice4.1.3-redhat-menus-4.1.3-9783.noarch.rpm openoffice4.1.3-su-menus-4.1.3-9783.noarch.rpm> yum localinstall openoffice4.1.3-redhat-menus-4.1.3-9783.noarch.rpm
ok, 安装完毕了! 启动服务
进入到默认安装目录下
> cd /opt/openoffice4/program/[注释:临时启动]> /opt/openoffice4/program/soffice -headless -accept="socket,host=容祖儿的什么歌好听127.0.0.1,port=8100;urp;" -nofirststartwizard[注释:或后台启动]> /opt/openoffice4/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &[注释:永久启动]> nohup /opt/openoffice4/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &[注释:查看是否启动成功]> ps -ef|grep openofficeroot 7541 7527 0 10:19 pts/0 00:00:12 /opt/openoffice4/program/soffice.bin -headless -accept=socket,host=127.0.0.1,port=8100;urp; -nofirststartwizardroot 8964 7066 0 18:18 pts/3 00:00:00 grep --color=auto openoffice或者> netstat -tunlp |grep tcp 0 0 127.0.0.1:8100 0.0.0.0:* listen 7541/soffi辽宁师范大学图书馆ce.bin
linux下安装成功!
开始撸码:
pom.xml
<!-- openoffice 相关依赖 --> <dependency> <groupid>commons-io</groupid> <artifactid>commons-io</artifactid> <version>1.4</version> </dependency> <dependency> <groupid>org.openoffice</groupid> <artifactid>juh</artifactid> <version>3.2.1</version> </dependency> <dependency> <groupid>org.openoffice</groupid> <artifactid>ridl</artifactid> <version>3.2.1</version> </dependency> <dependency> <groupid>org.openoffice</groupid> <artifactid>unoil</artifactid> <version>3.2.1</version> </dependency> <!-- pdf2img --> <dependency> <groupid>org.apache.pdfbox</groupid> <artifactid>pdfbox</artifactid> <version>2.0.6</version> </dependency> <dependency> <groupid>org.apache.pdfbox</groupid> <artifactid>pdfbox-tools</artifactid> <version>2.0.6</version> </dependency>
openofficeutils
import java.awt.*;import java.io.file;import java.io.inputstream;import java.io.outputstream;import java.net.connectexception;import org.apache.commons.lang.stringutils;import com.artofsolving.jodconverter.defaultdocumentformatregistry;import com.artofsolving.jodconverter.documentconverter;import com.artofsolving.jodconverter.documentformatregistry;import com.artofsolving.jodconverter.openoffice.connection.openofficeconnection;import com.artofsolving.jodconverter.openoffice.connection.socketopenofficeconnection;import com.artofsolving.jodconverter.openoffice.converter.openofficedocumentconverter;import com.artofsolving.jodconverter.openoffice.converter.streamopenofficedocumentconverter;import org.apache.pdfbox.pdmodel.pddocument;import org.apache.pdfbox.pdmodel.pdpage;import org.apache.pdfbox.pdmodel.pdpagetree;import org.apache.pdfbox.rendering.imagetype;import org.apache.pdfbox.rendering.pdfrenderer;import org.apache.pdfbox.tools.imageio.imageioutil;import java.awt.image.bufferedimage;import java.awt.image.renderedimage;import java.io.file;import java.io.ioexception;import java.util.arraylist;import java.util.list;import javax.imageio.imageio;/** * * @author josnow * @date 2017年5月9日 下午12:38:39 * @version 1.0.0 * @desc openoffice转换工具 */public class openofficeutils { public static fina四大元曲l string local_host = "localhost"; public static final int local_port = 8100; // format public static documentformatregistry formatfactory = new defaultdocumentformatregistry(); /** * * @desc * @auth josnow * @date 2017年6月9日 下午4:11:04 * @param inputfilepath * 待转换的文件路径 * @param outputfilepath * 输出文件路径 */ public static void convert(string inputfilepath, string outputfilepath) throws connectexception { convert(inputfilepath, outputfilepath, local_host, local_port); } /** * * @desc * @auth josnow * @date 2017年6月9日 下午4:12:29 * @param inputfilepath * 待转换的文件路径 * @param outputfilepath * 输出文件路径 * @param connectip * 远程调用ip * @param connectport * 远程调用端口 */ public static void convert(string inputfilepath, string outputfilepath, string connectip, int connectport) throws connectexception { if (stringutils.impty(inputfilepath) || stringutils.impty(outputfilepath) || stringutils.impty(connectip)) { throw new illegalargumentexception("参数异常!!"); } openofficeconnection connection = new socketopenofficeconnection(connectip, connectport); connection.connect(); // todo excel转成pdf默认是a4纸// documentconverter converter = getconverter(connectip, connection);// converter.convert(new file(inputfilepath), new file(outputfilepath));// todo excel转成pdf默认是a4纸, 如果现实折行,则自定义converterdocument,改变纸张大小 converterdocument converterdocument = new converterdocument(connection); converterdocument.convert(new file(inputfilepath), new file(outputfilepath)); connection.disconnect(); } /** * * @desc * @auth josnow * @date 2017年6月9日 下午4:08:26 * @param inputstream * @param inputfileextension * 待转换文件的扩展名,例如: xls,doc * @param outputstream * @param outputfileextension * 输出文件扩展名,例如:pdf */ public static void convert(inputstream inputstream, string inputfileextension, outputstream outputstream, string outputfileextension) throws connectexception { convert(inputstream, inputfileextension, outputstream, outputfileextension, local_host, local_port); } /** * * @desc * @auth josnow * @date 2017年6月9日 下午4:10:21 * @param inputstream * @param inputfileextension * 待转换文件的扩展名,例如: xls,doc * @param outputstream * @param outputfileextension * 输出文件扩展名,例如:pdf * @param connectip * 远程调用ip * @param connectport * 远程调用端口 */ public static void convert(inputstream inputstream, string inputfileextension, outputstream outputstream, string outputfileextension, string connectip, int connectport) throws connectexception { if (inputstream == null || stringutils.impty(inputfileextension) || outputstream == null || stringutils.impty(outputfileextension) || stringutils.impty(connectip)) { throw new illegalargumentexception("参数异常!!"); } openofficeconnection connection = new socketopenofficeconnection(connectip, connectport); connection.connect(); documentconverter converter = getconverter(connectip, connection); converter.convert(inputstream, formatfactory.getformatbyfileextension(inputfileextension), outputstream, formatfactory.getformatbyfileextension(outputfileextension)); connection.disconnect(); } private static documentconverter getconverter(string connec李富春子女tip, openofficeconnection connection) { documentconverter converter = "localhost".equals(connectip) || "127.0.0.1".equals(connectip) || "0:0:0:0:0:0:0:1".equals(connectip) ? new openofficedocumentconverter(connection) : new streamopenofficedocumentconverter(connection); return converter; } public static void main(string[] args) throws exception { openofficeutils.convert("d:\\test.xls", "d:\\test.pdf"); pdf2image(new file("d:\\test.pdf")); } /** * pdf to big image * github: /d/file/titlepic/pdf2img * @param pdffile pdf文件路径 * @return big image file * @throws exception */ public static file pdf2image(file pdffile) throws exception { // 拼成图片后的宽度和高度 int w = 0; int h = 0; list<bufferedimage> images = new arraylist(); // 生成图片后的路径 string path = pdffile.getparent() + file.parator; string filename = pdffile.getname().replace(".pdf", ""); file destinationfile = new file(path); if (!destinationfile.exists()) { destinationfile.mkdir(); } pddocument document = pddocument.load(pdffile); pdpagetree list = document.getdocumentcatalog().getpages(); int pagecounter = 0; for (pdpage page : list) { pdfrenderer pdfrenderer = new pdfrenderer(document); bufferedimage image = pdfrenderer.renderimagewithdpi(pagecounter, 100, imagetype.rgb); string target = path + filename + "-" + (pagecounter++) + ".png"; imageioutil.writeimage(image, target, 100); w = image.getwidth(); h += image.getheight(); images.add(image); new file(target).delete(); } document.clo(); bufferedimage combined = new bufferedimage(w, h, bufferedimage.type_int_argb); graphics g = combined.getgraphics(); int y = 0; for (bufferedimage image : images) { g.drawimage(image, 0, y, null); y += image.getheight(); } // save as new image file image = new file(path, filename + ".png"); imageio.write(combined, "png", image); return image; }}
自定义 converterdocument
import com.artofsolving.jodconverter.openoffice.connection.openofficeconnection;import com.artofsolving.jodconverter.openoffice.converter.openofficedocumentconverter;import com.artofsolving.jodconverter.openoffice.converter.streamopenofficedocumentconverter;import com.sun.star.awt.size;import com.sun.star.beans.propertyvalue;import com.sun.star.lang.xcomponent;import com.sun.star.uno.unoruntime;import com.sun.star.view.paperformat;import com.sun.star.view.xprintable;public class converterdocument extends streamopenofficedocumentconverter { public converterdocument(openofficeconnection connection) { super(connection); } public final static size a5, a4, a3; public final static size b4, b5, b6; public final static size kaoqinreport; static { a5 = new size(14800, 21000); a4 = new size(21000, 29700); a3 = new size(29700, 42000); b4 = new size(25000, 35300); b5 = new size(17600, 25000); b6 = new size(12500, 17600);// kaoqinreport = new size(29700, 27940); //最大限度 宽 1600000 kaoqinreport = new size(25000, 21000);; } @override protected void refreshdocument(xcomponent document) { super.refreshdocument(document); // the default paper format and orientation is a4 and portrait. to // change paper orientation // re t page size xprintable xprintable = (xprintable) unoruntime.queryinterface(xprintable.class, document); propertyvalue[] printerdesc = new propertyvalue[2]; // paper orientation// printerdesc[0] = new propertyvalue();// printerdesc[0].name = "paperorientation";// printerdesc[0].value = paperorientation.portrait; // paper format printerdesc[0] = new propertyvalue(); printerdesc[0].name = "paperformat"; printerdesc[0].value = paperformat.ur; // paper size printerdesc[1] = new propertyvalue(); printerdesc[1].name = "papersize"; printerdesc[1].value = kaoqinreport; try { xprintable.tprinter(printerdesc); } catch (exception e) { e.printstacktrace(); } }}
使用:
public static void main(string[] args) throws exception { openofficeutils.convert("d:\\test.xls", "d:\\test.pdf"); pdf2image(new file("d:\\test.pdf"));}
参考: /d/file/titlepic/14094019
本文发布于:2023-04-04 02:53:27,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/abd7118fc52f4e9174c66ba85f7cadf3.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:JAVA中使用openoffice将Excel转PDF再转图片功能的实现代码.doc
本文 PDF 下载地址:JAVA中使用openoffice将Excel转PDF再转图片功能的实现代码.pdf
留言与评论(共有 0 条评论) |