java - 如何从网络应用程序中预选特定打印机

标签 java printing itext printdialog

不同类型的 pdf 文件是在服务器端使用 iText 生成的,并通过 ResponsOutputStream 发送。在客户端,显示打印对话框(至少在大多数查看器上),并选择默认打印机。有些 pdf 应在标签打印机上打印,其他则应在桌面打印机上打印。当打印对话框出现时是否可以预先选择不同的打印机?

我已经在桌面 Java 应用程序中尝试过此操作并且它有效,但我无法从服务器端执行此操作。

    ec.setResponseContentType("application/pdf"); 
    ec.setResponseHeader("Content-Disposition", "attachment; filename="labels.pdf"); 
    outStream = ec.getResponseOutputStream();
    writer = PdfWriter.getInstance(document, outStream);

    PdfAction action = new PdfAction(PdfAction.PRINTDIALOG);
    writer.setOpenAction(action);

使用此指令的结果相同,因为我找不到使用 Javascript 预选特定打印机的解决方案

    writer.setOpenAction(PdfAction.javaScript("this.print(true);", writer));

始终选择默认打印机或上次使用的打印机

最佳答案

根据Adobe Acrobat SDK JavaScript™ for Acrobat® API Reference Doc 方法 print 还有一个 printParams 参数

printParams (optional, Acrobat 6.0) The PrintParams object containing the settings to use for printing. If this parameter is passed, any other parameters are ignored.

根据该条目中的示例,可以使用此参数来选择打印机:

Example 2 (Acrobat 6.0)

Print current document to a known printer.

var pp = this.getPrintParams();
pp.interactive = pp.constants.interactionLevel.automatic;
pp.printerName = "hp officejet d series";
this.print(pp);

因此,如果您知道客户端打印机名称,则可以按照本示例中的演示进行设置。

PS:很可能您的代码在非特权上下文中运行;因此,pp.interactive 将被忽略,您将无法触发自动打印作业。

关于java - 如何从网络应用程序中预选特定打印机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56594014/

相关文章:

c - 如何在C中打印另一个函数使用的函数参数?

java - 使用 servlet 重写 pdf 文件(模板)

java - Itext PdfSmartCopy 获取空指针异常

.net - 如何在绝对位置插入 iTextSharp.text.Rectangle 矩形?

java - TrueZip 从 netbeans/jar 启动时可以正常工作,但从 javaws 启动时不能正常工作

java - 为什么字段似乎在构造函数之前被初始化?

java - 如何使用 java 中的日期 API 验证年份

css - Safari 内部分页 :avoid not working

html - 使用 css 从打印页面中删除 URL

java - 使用 @autowired 到 DI 后得到一个 null 对象