2

ユーザーがフィールドにデータを入力できるフォームがあります。その後、彼/彼女は、以下に示すように、私がすでに書いた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);
}

これで、すべてのデータとともにPDFエクスポートが提供されます。また、これらのフィールドに入力されたデータをユーザーが印刷できるボタンを作成するのも好きです。これで、ユーザーにエクスポートしてから印刷するのではなく、フォームの印刷ボタンにする必要があります。

誰かがこの印刷ボタンを作成する方法をアドバイスできますか?PDFエクスポートからの出力を使用して、それをプリンターに送信する必要がありますか?もしそうなら、どうすればJavaでそれを書くことができますか?

4

1 に答える 1

5

さて、あなたは簡単にボタンを作成することができます:

 import javax.swing.*;
 ....
 JButton button = new JButton("Print");

ActionListener次に、ボタンにを追加します。

import java.awt.*;
....
button.addActionListener(new ActionListener() {
            @override
            public void actionPerformed(ActionEvent e)
            {
                //Execute when button is pressed
                printPDF("path/to/file/.pdf");
            }
        });   

次に、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");
    }
}

補遺:

  • 「自分に最も近いプリンター」がない可能性のある特定のプリンターでこれを機能させるには、次のコードを変更して、プリンター名、またはまたはを使用した正確なプリンター名を含めcontains()ますequals()

    String printerName="";
    ....
    if (svcName.contains(printerName)||svcName.equals(printerName)) {
                        myPrinter = services[i];
                        System.out.println("my printer found: " + svcName);
                        break;
    }
    

参照:

于 2012-07-09T13:54:27.637 に答える