书法字帖 PDF转化为可打印PDF
书法类的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的更多相关文章
- 根据第三方库spire.pdf使用指定打印机打印pdf文件
private void button1_Click(object sender, EventArgs e) { PdfDocument doc = new PdfDocument(); string ...
- C# 打印PDF文档的10种方法
操作PDF文档时,打印是常见的需求之一.针对不同的打印需求,可分多种情况来进行,如设置静默打印.指定打印页码范围和打印纸张大小.双面打印.黑白打印等等.经过测试,下面将对常见的几种PDF打印需求做一些 ...
- java 多页pdf转化为多张图片
相关jar包: <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian ...
- C# 打印PDF文件之使用不同打印机打印所有页面或部分页面
C# 打印PDF文件之使用不同打印机打印所有页面或部分页面 最近在逛国外各大编程社区论坛的时候,发现很多人都在问一个关于PDF文件打印的问题:打印时如何选择非默认打印机并设置打印页面的范围.而一般情况 ...
- (转)C# 打印PDF文件使用第三方DLL
本文为转载,原文:http://www.cnblogs.com/Yesi/p/5066835.html DLL地址:https://freepdf.codeplex.com 下面是该解决方案的详细代码 ...
- Winform 打印PDF顺序混乱,获取打印队列
工作中PDF打印顺序混乱着实让我疼痛了好久,其实决绝方法非常简单,但没有想到这个点子的时候确实让我走了很多弯路 这里文章写出来并不是为了炫耀什么,只是觉得发现些好东西就分享出来而已,同时也做个记录,方 ...
- 关于这两天研究Java打印pdf方法的记录
这两天在研究Java调用打印机打印PDF文件的方法,学到了不少东西,特别来记录一下. 关于Java打印网上最多的而且也是Java正统的打印方法就是使用PrintService,一套比較标准的打印代码例 ...
- PDFBox创建并打印PDF文件, 以及缩放问题的处理.
PDFBox带了一些很方便的API, 可以直接创建 读取 编辑 打印PDF文件. 创建PDF文件 public static byte[] createHelloPDF() { ByteArrayOu ...
- C#调用Python脚本打印pdf文件
介绍:通过pdf地址先将文件下载到本地,然后调用打印机打印,最后将下载的文件删除. 环境:windows系统.(windows64位) windows系统中安装python3.6.2环境 资料: O ...
随机推荐
- Linux维护常用命令
1.查看Linux占用内存/CPU最多的进程 可以使用以下命令查使用内存最多的10个进程 #ps -aux | sort -k4nr | head -n 10可以使用以下命令查使用CPU最多的10个进 ...
- 前后台分离开发--文件上传与下载,cookie,session
一.前后台分离开发的概念 ''' 1. 前台页面运行在前台服务器上,负责页面的渲染(静态文件的加载)与转跳 2. 后台代码运行在后台服务器上,负责数据的处理(提供数据请求的接口) ''' #如果没有前 ...
- InstallShield 2015 生成单个EXE包和 MSI包
生成EXE包: 生成MSI包:
- 【python010-数组】
1.创建列表 *创建普通列表 >>> member = ['尘封','破冰','python']>>> member['尘封', '破冰', 'python'] * ...
- topcoder srm 380 div1
problem1 link 分类讨论.高度没有太大关系.主要看长度. problem2 link 二分答案$mid$.计算每种$card$不足的部分,加起来,小于等于$min(jokers,mid)$ ...
- linux下如何调试Makefile?
答:make --debug=all (输出所有的调试信息)
- 【做题】uoj#370滑稽树上滑稽果——巧妙dp
一个显然的结论是最终树的形态必然是一条链.具体证明只要考虑选定树上的某一条链,然后把其他部分全部接在它后面,这样答案一定不会变劣. 那么,一开始的想法是考虑每一位的最后出现位置,但这并不容易实现.注意 ...
- Ubuntu fcitx CPU占用率很高解决方法
在Ubuntu中,有时候电脑的风扇突然狂装,用 pidstat -u 5 1 命令查看后台应用的资源占用情况,发现fcitx的占用率接近百分之百. 原因是搜狗云输入的问题,关闭后,在用kill命令干掉 ...
- Set和WeakSet数据结构
学习Set数据结构,注意这里不是数据类型,而是数据结构.它是ES6中新的东西,并且很有用处.Set的数据结构是以数组的形式构建的. Set的声明 let setArr = new Set(['js', ...
- Docker5之Deploy your app
Make sure you have published the friendlyhello image you created by pushing it to a registry. We’ll ...