一个想法|宿舍打印机实现双面打印

这个想法的起因是,实验报告要双面打印,然而宿舍的打印机只能打印单面的鸭,好吧其实主要原因是周末太无聊了(看了十几集蜡笔小新??,之后想找点事情做

怎么做呢,改造打印机是不可能的了。
那就只能从打印的报告上面搞点事情了。

很容易想到了,可以先打印奇数页,再把打印好奇数页的纸放进打印机,来打印偶数面。


那就把报告改成奇数页在前,偶数页放在后面就可以了吧,
比如把原来实验报告的第1、3、5页放在新报告最前面;第2、4、6放在新报告后面,打印的时候分两次打,先打印前一半,再用这些纸打印后一半。


有了想法,就可以开始写代码来实现了。写一个小程序把PDF文档改造一下。


百度了下好像用python更容易,但是现在小朋友都学python了,我已经是大朋友了,应该用java写!(~~大朋友还看蜡笔小新??~~
用java写,也很简单,查了一下使用itextpdf包就可以了; itextpdf包,可以很容易对pdf文件进行增删改; 只需要按现在的需求,先把原实验报告的奇数页加入到新pdf文件,再把偶数页加入到新pdf文件末尾,形成一个新的pdf文件,就可以了;
很简单的代码如下👇 ``` package pdfTransform;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.*;

public class PdfTransform {

//最终pdf保存的路径
public static String final_path = "C:\pdf\outPdf2.pdf";

/*
*@desc:创建一个新的pdf,传入参数(需要打印的旧pdf报告),先筛选旧pdf报告的奇数页加入新pdf,再筛选偶数页加入新pdf
*@parm:myReader:PdfReader,old pdf
*@return out:FileOutputStream,a new pdf
*/

public static FileOutputStream pdfSolve(PdfReader myReader) {
Document document = new Document();
PdfWriter writer;
FileOutputStream out = null;
try {
out = new FileOutputStream(final_path);
writer = PdfWriter.getInstance(document, out);
document.open();
PdfContentByte contentByte = writer.getDirectContent();
int currentPage = 1;
//加入奇数页到新pdf
while(currentPage <= myReader.getNumberOfPages()) {
document.newPage();
if(currentPage % 2 != 0) {
PdfImportedPage page = writer.getImportedPage(myReader, currentPage);
contentByte.addTemplate(page, 0,0);
}
currentPage++;
}
currentPage = 1;
//再加入偶数页到新pdf
while(currentPage <= myReader.getNumberOfPages()) {
document.newPage();
if(currentPage % 2 == 0) {
PdfImportedPage page = writer.getImportedPage(myReader, currentPage);
contentByte.addTemplate(page, 0,0);
}
currentPage++;
}
document.close();
out.flush();
out.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return out;
}

public static void main(String[] args) {
// TODO Auto-generated method stub
InputStream myStream = null;
PdfReader myReader;
try {
myStream = new FileInputStream("C:\pdf\inputPdf2.pdf"); //原旧pdf报告的路径
myReader = new PdfReader(myStream);
PdfTransform.pdfSolve(myReader);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}

}

<br/>
当然这样打印完奇数页后,还需要手动放纸张,重新打印偶数页;手动放纸这种事,交给舍友做就好了。
然后舍友说出了真相,打印的时候直接先选奇数页,再选偶数页就好了,干嘛还修改pdf。。
好像很有道理,不管了反正都做了。
<br/>
最后想说,<a href="https://www.huya.com/11352970">蜡笔小新</a>真的好看,小时候没看过,现在要补回来
<br/>
![](https://img2018.cnblogs.com/blog/1454456/201911/1454456-20191124220100572-1977697457.png)

posted @ 2019-11-24 22:02  fishers  阅读(636)  评论(0)    收藏  举报