使用Apache PDFBox来打印PDF文件
由于Apache PDFBox可以输出日本语,我才开始逐渐调查PDFBox能做什么,之前完全没有使用过。
这次是关于PDF打印的方法。
我参考了下面的官方文档。 (虽然看了下面这个链接,还是没必要看这个页面了。)
https://pdfbox.apache.org/2.0/migration.html#pdf-printing
打印PDF文件
public static void main(String[] args) throws IOException, PrinterException {
try (InputStream in = new FileInputStream("pdf.pdf")) {
print(in);
}
}
public static void print(InputStream in) throws IOException, PrinterException {
try (PDDocument doc = PDDocument.load(in)) {
PrinterJob job = PrinterJob.getPrinterJob();
job.setPageable(new PDFPageable(doc));
//プリンターのダイアログを開く
if (job.printDialog()) {
job.print();//印刷
}
}
}
执行结果
使用PDFBox可以在不创建PDF文件的情况下打印。
我认为只要看一下写作方法就能够自然而然地做到,不过还是确认了一下。
public static void print2() throws IOException, PrinterException {
try (PDDocument doc = new PDDocument()) {
float fontSize = 20;
PDRectangle rectangle = PDRectangle.A6;
PDFont font = loadFont(doc);
float fontHeight = getFontHeight(font, fontSize);
PDPage page = new PDPage(rectangle);
doc.addPage(page);
try (PDPageContentStream contents = new PDPageContentStream(doc, page)) {
contents.setLineWidth(1F);
contents.beginText();
contents.setNonStrokingColor(Color.RED);
contents.setStrokingColor(Color.BLUE);
contents.setFont(font, fontSize);
contents.setLeading(fontHeight);
contents.setTextMatrix(Matrix.getTranslateInstance(10, rectangle.getHeight() - fontHeight - 10));
contents.appendRawCommands(RenderingMode.FILL.intValue() + " Tr ");
contents.showText("テキスト FILL");
contents.newLine();
contents.appendRawCommands(RenderingMode.STROKE.intValue() + " Tr ");
contents.showText("テキスト STROKE");
contents.newLine();
contents.appendRawCommands(RenderingMode.FILL_STROKE.intValue() + " Tr ");
contents.showText("テキスト FILL_STROKE");
contents.endText();
}
PrinterJob job = PrinterJob.getPrinterJob();
job.setPageable(new PDFPageable(doc));
//プリンターのダイアログを開く
if (job.printDialog()) {
job.print();//印刷
}
}
}
执行结果
我已经印刷好了。
结束语
打印机工作时没有显示对话框,但是可以无需显示对话框就进行打印对吧?
所以只要正确处理,我认为在服务器端也可以实现静默打印。
顺便问一下,iText上有打印功能吗?