zoukankan      html  css  js  c++  java
  • 书法字帖 PDF转化为可打印PDF

    书法类的PDF,因为底色是黑色的,打印起来特别费墨,所以需要转化成白底黑字的文件,

    才好打印。

    1)用 pdfbox 的 ExtractImages 命令,抽出所有的图片

    https://pdfbox.apache.org/2.0/commandline.html

    java -jar pdfbox-app-2.0.11.jar ExtractImages "E:Calligraphyjiu.pdf"

    2 ) 用 imagemagick 把图片转化为白底黑字。

    可以创建一个bash 文件,在Cygwin里执行

    for i in *.jpg
    do
    magick $i -negate negate_`basename $i .jpg`.jpg
    done

    不可以直接 magick *.jpg -negate negate_.jpg . 这样转化出来的图片,不能和原图一一对应,后续就不好做了。

    3)用gimp2 来分别处理每一张 图片

        a) [颜色-> 去色] 转化为灰度图片

        b) [颜色->阀值] 去掉多余的灰点

        c) 自由选择工具 和 油漆桶 进行 精细去除

        d) 用画笔工具,进行更精细的去除

     4 ) 用自己做的工具,转化文件名 xxx1.jpg xxx01.jpg  xxx2.jpg xxx02.jpg . 这样为下一步程序能顺利排序做好准备

    5)运行java 程序

        public static void main(String[] args) {
            
            if (args.length < 3) {
                System.out.println("ImagesToPdf <folderpath> <width> <height>");
                System.out.println("For example: ImagesToPdf "E:\Calligraphy\create_pdf\jiu_liqi\jiu01_last" 800 1200");
                return;
            }
    
            List<String> alist = listFilesAndFolders(args[0]);
            if (alist.size() < 2) {
                System.out.println("Error:File Count in Folder is < 2");
                return;
            }
            
            float width = Float.parseFloat(args[1]);
            float height = Float.parseFloat(args[2]);
                
            PDDocument document = new PDDocument();
    
            try {
                for(String s:alist) {
                    PDPage page = new PDPage(new PDRectangle(width, height));
                    PDPageContentStream contentStream = new PDPageContentStream(document, page);
                    document.addPage(page); 
                    PDImageXObject  img = PDImageXObject.createFromFile(args[0] + "/" + s, document);                
                    contentStream.drawImage(img, 0, 0);
                    contentStream.close();
                }
                
                document.save("out.pdf");
                document.close();
                
                
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        }
        public static List<String> listFilesAndFolders(String directoryName){
                File directory = new File(directoryName);
                //get all the files from a directory
                ArrayList<String> alist = new ArrayList<String>();
                File[] fList = directory.listFiles();
                for (File file : fList){
                    alist.add(file.getName());
                }
                alist.sort(Comparator.naturalOrder());
                return alist;
        }
  • 相关阅读:
    python openpyxl 封装Execl常用操作的方法
    python webdriver grid多节点运行webdriver程序
    url的正则表达式
    基于Erlang VM的函数式编程语言Elixir
    [整理]团队开发效率提升探索一
    FreeBSD应该装gnome3做桌面
    FreeBSD pkg仓库有台湾的镜像了
    再探OAuth2
    【转】Android世界的Swift
    内存只有4G的MBP要怎么破
  • 原文地址:https://www.cnblogs.com/johnsonshu/p/9373966.html
Copyright © 2011-2022 走看看