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

才好打印。

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

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

java -jar pdfbox-app-2.0..jar ExtractImages "E:\Calligraphy\jiu.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;
}

书法字帖 PDF转化为可打印PDF的更多相关文章

  1. 根据第三方库spire.pdf使用指定打印机打印pdf文件

    private void button1_Click(object sender, EventArgs e) { PdfDocument doc = new PdfDocument(); string ...

  2. C# 打印PDF文档的10种方法

    操作PDF文档时,打印是常见的需求之一.针对不同的打印需求,可分多种情况来进行,如设置静默打印.指定打印页码范围和打印纸张大小.双面打印.黑白打印等等.经过测试,下面将对常见的几种PDF打印需求做一些 ...

  3. java 多页pdf转化为多张图片

    相关jar包: <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian ...

  4. C# 打印PDF文件之使用不同打印机打印所有页面或部分页面

    C# 打印PDF文件之使用不同打印机打印所有页面或部分页面 最近在逛国外各大编程社区论坛的时候,发现很多人都在问一个关于PDF文件打印的问题:打印时如何选择非默认打印机并设置打印页面的范围.而一般情况 ...

  5. (转)C# 打印PDF文件使用第三方DLL

    本文为转载,原文:http://www.cnblogs.com/Yesi/p/5066835.html DLL地址:https://freepdf.codeplex.com 下面是该解决方案的详细代码 ...

  6. Winform 打印PDF顺序混乱,获取打印队列

    工作中PDF打印顺序混乱着实让我疼痛了好久,其实决绝方法非常简单,但没有想到这个点子的时候确实让我走了很多弯路 这里文章写出来并不是为了炫耀什么,只是觉得发现些好东西就分享出来而已,同时也做个记录,方 ...

  7. 关于这两天研究Java打印pdf方法的记录

    这两天在研究Java调用打印机打印PDF文件的方法,学到了不少东西,特别来记录一下. 关于Java打印网上最多的而且也是Java正统的打印方法就是使用PrintService,一套比較标准的打印代码例 ...

  8. PDFBox创建并打印PDF文件, 以及缩放问题的处理.

    PDFBox带了一些很方便的API, 可以直接创建 读取 编辑 打印PDF文件. 创建PDF文件 public static byte[] createHelloPDF() { ByteArrayOu ...

  9. C#调用Python脚本打印pdf文件

     介绍:通过pdf地址先将文件下载到本地,然后调用打印机打印,最后将下载的文件删除. 环境:windows系统.(windows64位) windows系统中安装python3.6.2环境 资料: O ...

随机推荐

  1. 动态规划之115 Distinct Subsequences

    题目链接:https://leetcode-cn.com/problems/distinct-subsequences/description/ 参考链接:https://www.cnblogs.co ...

  2. 用Navicat for Mysql导入.sql文件

    1.在左边右键新建一个数据库 2.字符集选gbk(不 题) 3.打开数据库,把它变成绿色. 4.把.sql文件拖到这数据库上.会出现下边的运行SQL文件对话框,按开始,等运行完后就可以关掉了. 5.最 ...

  3. selenium css定位方式

  4. Python3基础 list [] 创建空列表

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  5. JPush Flutter Plugin(Futter推送-极光推送)

    https://pub.flutter-io.cn/packages/jpush_flutter JPush's officially supported Flutter plugin (Androi ...

  6. utf-8并不"兼容" gb2312, gb18030

    注意 utf-8 并不是 向下 兼容"gb2312 gb18030"等编码, 也并不是说, utf-8就是比 gb2312等高级的编码! 比如在terminal中, 你开始使用的 ...

  7. P4568 [JLOI2011]飞行路线

    思路 套路题 建出k+1分层图,从上一层走到下一层代表坐了一次免费航线,跑最短路即可 注意可能有情况不需要耗完所有k次机会,所以应从每层的终点向下一层终点连一条边权为0的边 代码 #include & ...

  8. 使用BeautifulSoup 爬取一个页面上的所有的超链接

    # !/usr/bin/python # -*-coding:utf-8-*- import urllib from bs4 import BeautifulSoup response = urlli ...

  9. lvs笔记

    LVS是Linux Virtual Server的简写,意为Linux虚拟服务器,是虚拟的服务器集群系统,可在UNIX/LINUX平台下实现负载均衡集群功能.该项目在1998年5月由章文嵩博士组织成立 ...

  10. 页面中,禁止html内容被选择

    1.通过css的方式 *{ moz-user-select: -moz-none; -moz-user-select: none; -o-user-select:none; -khtml-user-s ...