书法字帖 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 ...
随机推荐
- opencv学习之路(11)、图像几何变换
一.图像缩放 #include<opencv2/opencv.hpp> using namespace cv; void main(){ Mat src=imread("E:// ...
- Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) Problem C (Codeforces 831C) - 暴力 - 二分法
Polycarp watched TV-show where k jury members one by one rated a participant by adding him a certain ...
- java基础篇之理解synchronized的用法
Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问同一个对象object中的这个synchronized(this ...
- qt无法定位程序输入点 于动态链接库 qt5core.dll
造成步骤:一开始是将现成的dll[Qt5.9.3]放在文件夹里,然后使用Qt5.7.1编译的exe放进去,产生标题错误 原因:dll库不匹配 解决:使用Qt5.7.1自带的cmd命令行,使用winde ...
- SOAP和WebService的那些事
当初对这段历史有过一点研究,不过当初写得关于这部分历史的论文不知道被我丢哪儿去了,下面我用通俗一点的语言来话说一下这段历史吧,因为当初详细到具体人物具体时间的已经记不清了,所以这里写得不够专业,大家就 ...
- TV Show Game 【2-SAT】
问题 K: TV Show Game 时间限制: 1 Sec 内存限制: 512 MB Special Judge 提交: 51 解决: 10 [提交] [状态] [命题人:admin] 题目描 ...
- 轻重搭配|计蒜客2019蓝桥杯省赛 B 组模拟赛(一)
样例输入: 6 1 9 7 3 5 5 样例输出: 4 思路:贪心,选错贪心思路,只能过一小部分数据,正确贪心思路:从前一半遍历,在后一半中找到比当前元素的两倍大的数(因为这里指针不会后移,所以可以采 ...
- ORM之EF
本文大部分内容截取自博客: http://www.cnblogs.com/VolcanoCloud/p/4475119.html (一) 为什么用ORM 处理关系数据库时,我们依据由行和列组成的表, ...
- python时间
#!/usr/bin/python # -*- coding: utf-8 -*- import sys import time import datetime line="Wed 11/2 ...
- centos7 修改密码
Centos7破解密码的方法 Centos7忘记密码 在工作或者自己练习的时候我们难免会大意忘掉自己的root密码,有些同学忘掉密码竟然第一选择是重装系统,工作中可万万使不得! 本篇博客将讲解 ...