我有一个表单,用户可以用数据填写字段.此后,他/她应该能够将数据导出为我已经编写的pdf,如下所示:
public void onSubmit() {
try {
ManagerModel manager = managerDao.getManager(person);
PictureModel picture = new PictureModel();
if (person.getPhotoId() != null) {
picture = new PictureModel(pictureDao.findPictureById(person.getPhotoId()));
}
getRequestCycle().setRequestTarget( new FileRequestTarget(Exporter.exportFile(person, manager, picture), person.getPdfName()));
} catch (Exception e) {
Log.warn(e);
}
Run Code Online (Sandbox Code Playgroud)
现在这为我提供了pdf导出以及所有数据.我还想创建一个按钮,允许用户打印在这些字段中输入的数据.现在,这应该是表单上的打印按钮,而不是要求用户导出然后打印.
有人可以建议我如何创建这个打印按钮?我应该只使用pdf导出的输出然后将其发送到打印机?如果是这样,我如何在java中写这个?
那你可以简单地创建一个按钮:
import javax.swing.*;
....
JButton button = new JButton("Print");
Run Code Online (Sandbox Code Playgroud)
然后添加一个ActionListener
按钮:
import java.awt.*;
....
button.addActionListener(new ActionListener() {
@override
public void actionPerformed(ActionEvent e)
{
//Execute when button is pressed
printPDF("path/to/file/.pdf");
}
});
Run Code Online (Sandbox Code Playgroud)
然后打印PDF您可以使用此方法:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javax.print.*;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
....
public static void printPDF(String file) {
FileInputStream psStream = null;
try {
psStream = new FileInputStream(file);
} catch (FileNotFoundException ffne) {
ffne.printStackTrace();
}
if (psStream == null) {
return;
}
DocFlavor psInFormat = DocFlavor.INPUT_STREAM.AUTOSENSE;
Doc myDoc = new SimpleDoc(psStream, psInFormat, null);
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
PrintService[] services = PrintServiceLookup.lookupPrintServices(psInFormat, aset);
// this step is necessary because I have several printers configured
PrintService myPrinter = null;
for (int i = 0; i < services.length; i++) {
String svcName = services[i].toString();
System.out.println("service found: " + svcName);
if (svcName.contains("printer closest to me")) {
myPrinter = services[i];
System.out.println("my printer found: " + svcName);
break;
}
}
if (myPrinter != null) {
DocPrintJob job = myPrinter.createPrintJob();
try {
job.print(myDoc, aset);
} catch (Exception pe) {
pe.printStackTrace();
}
} else {
System.out.println("no printer services found");
}
}
Run Code Online (Sandbox Code Playgroud)
附录:
要在可能没有"最接近我的打印机"的特定打印机上进行此操作:更改此代码以包括您的打印机名称,或使用contains()
或equals()
分别包含的确切打印机名称:
String printerName="";
....
if (svcName.contains(printerName)||svcName.equals(printerName)) {
myPrinter = services[i];
System.out.println("my printer found: " + svcName);
break;
}
Run Code Online (Sandbox Code Playgroud)参考文献:
归档时间: |
|
查看次数: |
6080 次 |
最近记录: |