我目前正在使用此代码打印文档(以字节数组形式传递)。重要的是要注意文档已经具有正确的大小(我用iText设置):
private void printReceipt(ByteArrayOutputStream baos) throws PrinterException {
//Retrieve byte array (which is in fact the pdf file)
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
Doc pdfDoc = new SimpleDoc(bais, DocFlavor.INPUT_STREAM.AUTOSENSE, null);
//Select the right printer
String printerNameDesired = "Star TSP143 (STR_T-001)";
PrintService[] service = PrinterJob.lookupPrintServices(); // list of printers
DocPrintJob docPrintJob = null;
for (int i = 0; i < service.length; i++) {
if (service[i].getName().equalsIgnoreCase(printerNameDesired )) {
docPrintJob = service[i].createPrintJob();
break;
}
}
//Print the byte array
try {
final HashPrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet();
attrs.add(PrintQuality.HIGH);
attrs.add(MediaSizeName.ISO_A8);
docPrintJob.print(pdfDoc, attrs);
} catch (PrintException ex) {
ex.printStackTrace();
}
//Close the bytearray inputstream to prevent memory issues
try {
bais.close();
} catch (IOException ex) {
ex.printStackTrace();
}
//Delete the pdfDoc to prevent memory issues
pdfDoc =null;
}
此代码对我有用,唯一的问题是文档的高度不正确。我需要设置自定义页面大小。但是,我必须选择MediaSizeName
,我自己无法设置自定义页面大小。我想设置页面格式如下:
PageFormat pf = new PageFormat();
pf.setOrientation(LANDSCAPE);
Paper paper = pf.getPaper();
paper.setSize(1.102 * 72, 3.504 * 72);
paper.setImageableArea(0, 10, 1.0 * 72, 3.4 * 72);
pf.setPaper(paper);
我不知道如何将此PageFormat添加到我的SimpleDoc中。我无法将我的SimpleDoc转换为这样的Printable:
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintService(docPrintJob.getPrintService());
Book book = new Book();//java.awt.print.Book
book.append(SimpleDocConvertedToPrintable, pf);
job.setPageable(book);
job.print();
不幸的是,我无法让它发挥作用。我还考虑过在HashPrintRequestAttributeSet
内设置自定义MediaSize,但我无法在任何地方找到它。
所以我的问题是:如何创建自定义MediaSize,或者是否可以更好更快地打印PDF而不将其保存到文件中?
非常感谢任何帮助!
答案 0 :(得分:0)
我能够通过在iText中创建文档时拉伸文档的大小来解决这个问题。我认为它与DPI设置有关,但我无法在网上找到它。 iText中的大小设置如下:
document.setPageSize(new Rectangle(660, 625));
宽度(660)正好足以放在我的收据上(宽度= 80mm)。高度仅基于错误的试验。当收据变得更大(就更高的高度而言)时,打印机会神奇地打印更长的收据。任何人都可以告诉我为什么? pagesize设置为常量...