簡體   English   中英

使用Java打印文本文件

[英]Printing text file with Java

我正在嘗試使用給定的代碼打印文本文件。 一切順利:作業進入打印機的打印隊列。 然而,經過一段時間后,它消失了,沒有打印出來。 此外,代碼中沒有異常或錯誤。 一切都很順利,除了它不打印。 我沒有使用打印API。

public class PipedPrint implements Runnable {
    PipedOutputStream pos = new PipedOutputStream();
    PipedInputStream pis = new PipedInputStream();
    byte[] abPrinterBytes = null;

    private void mainProcess() throws IOException, PrintException, InterruptedException {
        abPrinterBytes = getBytesFromFile();
        pis.connect(pos);
        Thread randWriter = new Thread(this);
        randWriter.start();
        PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
        DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
        PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
        PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
        PrintService service = ServiceUI.printDialog(null, 200, 200, printService, defaultService, flavor, pras);
        if (defaultService != null) {
            DocPrintJob job = defaultService.createPrintJob();
            DocAttributeSet das = new HashDocAttributeSet();
            Doc doc = new SimpleDoc(pis, flavor, das);
            System.out.println("Main::Fired Print");
            job.print(doc, pras);
            System.out.println("Main::Done Print");
        }
        randWriter.join();
        System.out.println("Main::Join Over");
    }

    private byte[] getBytesFromFile() throws IOException {
        File fFile = new File("C:\\Users\\Wijdan\\Documents\\NetBeansProjects\\demo_print\\src\\demo_print\\pass.txt"); //File to print
        byte[] abFileBytes = new byte[(int) fFile.length()];
        BufferedInputStream in = new BufferedInputStream(new FileInputStream(fFile));
        for (int i = 0; i < abFileBytes.length; i += in .read(abFileBytes, i, (abFileBytes.length - i)));
        return abFileBytes;
    }

    public void run() {
        try {
            Thread.sleep(5000);
            System.out.println("RandWriter started Writing");
            for (int i = 0; i < abPrinterBytes.length; i += 400) {
                pos.write(abPrinterBytes, i, ((i + 400) < abPrinterBytes.length) ? 400 : (abPrinterBytes.length - i));
                System.out.println("Thread:: Wrote bytes. Sleeping....");
                Thread.sleep(500);
            }
            pos.close();
            System.out.println("Thread::Closed pos. Exitting Thread...");
        } catch (Exception ie) {
            ie.printStackTrace();
        }
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        PipedPrint t1 = new PipedPrint();
        try {
            t1.mainProcess();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

檢查是否

  1. 所有進口都是:

    import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.PipedInputStream; import java.io.PipedOutputStream;

    import javax.print.Doc; import javax.print.DocFlavor; import javax.print.DocPrintJob; import javax.print.PrintException; import javax.print.PrintService; import javax.print.PrintServiceLookup; import javax.print.ServiceUI; import javax.print.SimpleDoc; import javax.print.attribute.DocAttributeSet; import javax.print.attribute.HashDocAttributeSet; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.PrintRequestAttributeSet;

  2. 確保文件路徑有效

  3. 您當前的打印機在系統中設置為默認打印機,如果它正在工作

我試過你的代碼它在我的情況下運行正常。 我的打印機名稱是HP LaserJet 4250。

我認為它們可能是您要打印的文件大小的問題。 請嘗試以塊的形式發送文件,而不是一次發送所有文件。

然而,即使我在UI屏幕部分中單擊“取消”以取消打印,它仍然提供打印輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM