一个想法|宿舍打印机实现双面打印
这个想法的起因是,实验报告要双面打印,然而宿舍的打印机只能打印单面的鸭,好吧其实主要原因是周末太无聊了(看了十几集蜡笔小新??,之后想找点事情做
怎么做呢,改造打印机是不可能的了。
那就只能从打印的报告上面搞点事情了。
很容易想到了,可以先打印奇数页,再把打印好奇数页的纸放进打印机,来打印偶数面。
那就把报告改成奇数页在前,偶数页放在后面就可以了吧,
比如把原来实验报告的第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)