首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确定Postscript打印支持

确定Postscript打印支持
EN

Stack Overflow用户
提问于 2012-01-19 02:28:40
回答 2查看 3.3K关注 0票数 3

我一直在尝试确定打印机是否能够打印Postscript (.ps)文件。使用以下方法,我尝试确定打印机是否可以使用以下代码打印Postscript:

代码语言:javascript
复制
private void findPrinters( DocFlavor flav ) {
  PrintService[] services = PrintServiceLookup.lookupPrintServices( flav, null );

  System.out.println( flav );
  if ( services != null && services.length != 0 ) {
    System.out.println( "SUPPORTED:" );
    for ( PrintService service : services ) {
      System.out.println( service );
    }
  } else {
    System.out.println( "NOT SUPPORTED" );
  }
}

我给它传递了DocFlavor.INPUT_STREAM.POSTSCRIPTDocFlavor.BYTE_ARRAY.POSTSCRIPT,它会返回Win32 Printer : HP LaserJet 2300L PSWin32 Printer : CutePDF Writer (这两个都是“虚拟”打印机--前者用于创建PDF,后者用于创建Postscript)。安装"HP Windows Postscript通用打印驱动程序“后,Win32 Printer : HP Universal Printing PS显示为支持Postscript功能。但是,我不确定是否正在使用此驱动程序,因此我将其解释为其他连接的打印机都不能打印Postscript文件。

然后,我尝试使用以下示例代码将Postscript文件提供给两台连接的打印机:

代码语言:javascript
复制
FileInputStream in = null;
PrintService prnSvc = PrintServiceLookup.lookupDefaultPrintService();
DocPrintJob printJob = prnSvc.createPrintJob();
Doc doc;

in = new FileInputStream( "some.ps" );

if ( prnSvc.isDocFlavorSupported( DocFlavor.INPUT_STREAM.POSTSCRIPT ) ) {
  /* USE THIS FOR A PS-capable printer */
  doc = new SimpleDoc( in, DocFlavor.INPUT_STREAM.POSTSCRIPT, null );
} else {
  /* USE THIS FOR OTHER PRINTER */
  doc = new SimpleDoc( in, DocFlavor.INPUT_STREAM.AUTOSENSE, null );
}

printJob.print( doc, null );

它可以在支持Postscript的打印机以及一台网络打印机( HP LaserJet P4014N)上正确打印,但Java表示该打印机不支持Postscript。在我的收据打印机上,它会像打印文本一样打印Postscript文件。有人告诉我,网络打印机不能正确响应Java (通用驱动程序等)它实际上可以支持Postscript。我看过文档,但无法确定LaserJet P4014N是否支持Postscript。我确实找到了另一台打印机(HP Laserjet 2055dn),并通过USB连接到我的计算机,Java仍然报告它不支持Postscript,尽管可以用上述方法打印它。

也许我做错了什么?如果不支持,如何正确检测打印机是否支持Postscript?我的最终目标是确定打印机是否支持Postscript,如果打印机不能将Postscript转换为JPG (分辨率降低,但源文件确实有图像)并打印出来。如果您对使用不支持Postscript的打印机打印Postscript文件有任何建议,我很乐意倾听!如果您需要更多信息,请告诉我。

我发现了一些示例Postscript文件here,您可以使用它们。

EN

回答 2

Stack Overflow用户

发布于 2012-01-19 03:08:30

(评论太长了)

我的最终目标是确定打印机是否支持Postscript

如果你想通过编程来确定它,那么下面的可能不会有很大的帮助,但是...

Postscript我看过文档,但无法确定LaserJet P4014N是否支持

如果打印机本身使用PostScript,并且您已经获得了打印机的IP,则不需要驱动程序:您只需将PostScript文件发送到打印机,打印机就会打印它。

例如,在我的家庭办公室,我有一台在本地IP 10.0.0.44上支持PostScript的HP打印机,我可以简单地从命令行执行以下操作将.ps文件打印到该打印机:

代码语言:javascript
复制
cat test.ps | netcat 10.0.0.44  9100

现在我知道这不是对你问题的回答(因此评论太长),但是如果你这样做(或者直接从Java发送文件,不使用任何驱动程序),并且打印机正确地打印PostScript文件,那么你可以确定你的打印机确实本机地说PostScript (这可以帮助你解决Java / PostScript支持的问题)。

票数 2
EN

Stack Overflow用户

发布于 2012-01-19 02:48:56

我不熟悉Java SE打印环境。然而,只要看看PrintServiceLookup API docs,我就想知道您为什么要使用PrintServiceLookup.lookupDefaultPrintService()。这将为您提供环境首选的PrintService。看起来PrintServiceLookup.lookupPrintServices(DocFlavor flavor, AttributeSet attributes)会让你指定你喜欢的PrintService。

DocFlavor documentation说您可以指定一个"application/postscript“的MIMEtype,以指示系统给出一个接受PostScript语言数据的PrintService。

实际上,似乎有一个预定义的DocFlavour.BYTE_ARRAY POSTSCRIPT类,它可能是一个对您有用的参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8915360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档