gpt4 book ai didi

Java:使用 SimpleDoc 打印 PDF 时无法设置页面大小

转载 作者:行者123 更新时间:2023-12-01 12:16:47 26 4
gpt4 key购买 nike

我目前正在使用此代码来打印文档(以字节数组形式传递)。需要注意的是,文档已经具有正确的大小(我使用 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 转换为可打印文件,如下所示:

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 而不将其保存到文件?

非常感谢任何帮助!

最佳答案

我已经能够通过在 iText 中创建文档时拉伸(stretch)文档的大小来解决此问题。我认为这与 DPI 设置有关,但我在网上找不到它。 iText中的大小设置如下:

document.setPageSize(new Rectangle(660, 625));

宽度(660)正好适合我的收据(宽度 = 80mm)。高度仅基于试错。当收据变大(就高度而言)时,打印机会神奇地打印更长的收据。谁能告诉我为什么?页面大小设置为常量...

关于Java:使用 SimpleDoc 打印 PDF 时无法设置页面大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26950102/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com