• Java将djvu文件转成pdf


    需求来源

    迫于有部分资源是djvu格式的文件,需要预览这部分文件,web端无法直接预览djvu,所以需要将djvu转成pdf。

    转换方法

    简单来说就是先把djvu文件转换成tiff文件,再将tiff文件转换成pdf文件。

    Ubuntu服务器

    如果服务器是Ubuntu系统,那么有直接现成的方案;

    方案来自于Ubuntu社区,亲测可用,地址:[ubuntu] How to convert djvu to pdf

    1. 安装依赖

    1. sudo apt-get install okular-extra-backends;
    2. sudo apt-get install evince;
    3. sudo apt-get install libtiff-tools;
    4. sudo apt-get install libevdocument1;
    5. sudo apt-get install libevview;
    6. sudo apt-get install djvulibre-bin;
    7. sudo apt-get install libdjvulibre21;

    2. 转化文件

    1. ddjvu -format=tiff file_name.djvu file_name.tiff
    2. tiff2pdf -j -o file_name.pdf file_name.tiff

    ile_name.djvu为需要转换的djvu文件,file_name.tiff为tiff文件名,file_name.pdf为最终的pdf文件名

    Centos服务器

    因为目前业务都是在Centos7上运行,因为这个需求要换成Ubuntu不现实,但是Centos7又没有找到现成的方案,但是都是Linux服务器嘛,应该都是互通的,所以就找了一下centos上相应的依赖来测试,也可以完成转换。

    1. 安装依赖

    注意这里必须先要安装tiff依赖,再安装djvulibre。

    1. sudo yum install ImageMagick;
    2. sudo yum install evince;
    3. sudo yum install gcc;
    4. sudo yum install gcc-c++;
    5. wget http://download.osgeo.org/libtiff/tiff-4.6.0rc2.tar.gz;
    6. tar -zxvf tiff-4.6.0rc2.tar.gz;
    7. cd tiff-4.6.0;
    8. sudo ./configure;
    9. sudo make;
    10. sudo make install;
    11. wget https://zenlayer.dl.sourceforge.net/project/djvu/DjVuLibre/3.5.28/djvulibre-3.5.28.tar.gz;
    12. tar -zxvf djvulibre-3.5.28.tar.gz;
    13. cd djvulibre-3.5.28;
    14. sudo ./configure --disable-desktopfiles;
    15. sudo make;
    16. sudo make install;

    2. 转化文件

    1. ddjvu -format=tiff file_name.djvu file_name.tiff
    2. tiff2pdf -j -o file_name.pdf file_name.tiff

    ile_name.djvu为需要转换的djvu文件,file_name.tiff为tiff文件名,file_name.pdf为最终的pdf文件名

    Java调用

    1. public static void main(String[] args) {
    2. /**
    3. * 传入djvu和下载pdf文件的代码请自行搞定哈
    4. */
    5. try {
    6. ProcessBuilder processBuilder = new ProcessBuilder();
    7. processBuilder.command("sh", "-c", "ddjvu -format=tiff test.djvu test.tiff");
    8. Process process = processBuilder.start();
    9. int exitCode = process.waitFor();
    10. System.out.println("covert djvu to tiff exit code: " + exitCode);
    11. processBuilder = new ProcessBuilder();
    12. processBuilder.command("sh", "-c", "tiff2pdf -j -o test.pdf test.tiff");
    13. Process process = processBuilder.start();
    14. int exitCode = process.waitFor();
    15. System.out.println("covert tiff to pdf exit code: " + exitCode);
    16. File file = new File("test.pdf");
    17. System.out.println("pdf file covert result: " + file.exists());
    18. } catch (IOException | InterruptedException e) {
    19. e.printStackTrace();
    20. }
    21. }

     转换结果

    转换问题

    如果执行命令的时候,报 ddjvu tiff output not complied 错误,

    请先安装好tiff依赖,再重新安装djvulibre;

    其他系统安装djvulibre,也可以参照GitHub的指示进行

    djvulibre地址:https://github.com/barak/djvulibre

     

  • 相关阅读:
    Python简直是万能的,这5大主要用途你一定要知道!
    JS-运算符
    docker(六)数据挂载之数据卷
    利用自定义 URI Scheme 在 Android 应用中实现安全加密解密功能
    [附源码]java毕业设计高校知识产权管理系统论文2022
    leaflet
    EtherCAT从站EEPROM组成信息详解(2):字8-15产品标识区
    【mysql是怎样运行的】-客户端与服务器连接
    Spring Authorization Server 1.1 扩展实现 OAuth2 密码模式
    Rust权威指南之通用集合类型
  • 原文地址:https://blog.csdn.net/running17/article/details/133990000