我正在使用Java(Struts2框架)在我的应用程序中开发Billing模块。成功提交账单表格后,我的代码生成账单PDF。我想要实现的是,在成功的账单表单提交和成功的PDF生成之后,生成的PDF应该从打印机打印。我编写了用于打印PDF的代码,但问题是,通过该代码,只能从部署应用程序并连接打印机的同一台机器上打印PDF文件。但是,在完成申请后,这不会是架构。将有客户端 - 服务器架构,我的应用程序将部署在一台服务器上,许多客户端将从各自的机器上使用该应用程序。
所以这里的问题是,每台其他机器都连接到不同的打印机,并且通过我当前的代码,只能打印部署应用程序的PDF,在本例中是服务器。
现在我的问题是:
在这种情况下,是否可以使用PDF打印 Java,我的意思是,从连接到相应客户端计算机的打印机打印PDF?
如果是的话,我该怎么做?
这是我的代码段:
import java.io.FileInputStream;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.Sides;
public class PDFPrintDemo {
public static void main(String[] args) {
try {
System.out.println("Printing PDF demo using JAVA.");
DocFlavor docFlavor = DocFlavor.SERVICE_FORMATTED.PAGEABLE;
PrintRequestAttributeSet attributeSet = new HashPrintRequestAttributeSet();
attributeSet.add(Sides.ONE_SIDED);
attributeSet.add(new Copies(2));
PrintService[] printServices = PrintServiceLookup
.lookupPrintServices(docFlavor, attributeSet);
if (printServices.length == 0) {
System.out.println("No printer found...");
}
PrintService myService = null;
for (PrintService service : printServices) {
System.out.println("Connected printer name is :: "
+ service.getName());
if (service.getName().equals(
"Hewlett-Packard-HP-LaserJet-Pro-MFP-M126nw")) {
myService = service;
break;
}
}
FileInputStream inputStream = new FileInputStream(
"/home/roshan/Downloads/rudhiraBillDemo.pdf");
Doc pdfDoc = new SimpleDoc(inputStream,
DocFlavor.INPUT_STREAM.AUTOSENSE, null);
DocPrintJob printJob = myService.createPrintJob();
printJob.print(pdfDoc, attributeSet);
inputStream.close();
System.out.println("PDF printed successfully..");
} catch (Exception exception) {
exception.printStackTrace();
}
}
}
答案 0 :(得分:1)
我猜测您的最终项目是一个客户想要下载和打印PDF文件的网站。
如果我的猜测是真的那么你的回答是否定的!客户可以 /* We wanna use foreign_key always.
if (empty($this->primary_key))
{
*/
if ( ! empty($this->foreign_key))
{
// Validate foreign keys for consistency naming convention recognizer
$foreign_key = array();
foreach($this->foreign_key as $namespace => $fk)
{
$foreign_key[strtolower($namespace)] = $fk;
}
$this->foreign_key = $foreign_key;
}
else
{
// If so far we didnt have any keys yet,
// then hopefully someone is really follow Gas convention
// while he define his entity relationship (yes, YOU!)
foreach ($this->meta->get('entities') as $name => $entity)
{
if ($entity['type'] == 'belongs_to')
{
$child_name = $entity['child'];
$child_instance = new $child_name;
$child_table = $child_instance->table;
$child_key = $child_instance->primary_key;
$this->foreign_key[strtolower($child_name)] = $child_table.'_'.$child_key;
}
}
}
//}
,但您不能强制它download
!
你可以写一个struts printed
,它返回一个action
文件(与你上面的相同),但是(由于安全问题),你无法开发任何PDF
将生成的PDF发送到客户端打印机的代码。如您所知,html+javascript
还有其他限制,例如您无法访问客户端摄像头或麦克风。
如果你非常想要这个,你应该使用Java Applet,Flash Player或ActiveX(仅限Windows)。这些技术可以访问客户机上的任何设备。