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

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

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

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


那就把报告改成奇数页在前,偶数页放在后面就可以了吧,
比如把原来实验报告的第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  阅读(533)  评论(0编辑  收藏  举报