2017-08-18 1 views
2
public static void sendPdfToPrinter(String epsilon) 
{ 
    FileInputStream psStream = null; 
    try { 
     psStream = new FileInputStream(epsilon); 
     } 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("series")) 
     { 
      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"); 
    } 
} 

public static void main(String[] args) throws IOException 
{ 
    //@SuppressWarnings("unused") 
    //Testing t = new Testing(); 
    String DEST = ("C:/Users/Brian/Desktop/SO046201R-17/TestingAlpha/6FS-2m.pdf"); 
    sendPdfToPrinter(DEST); 
} 

私は現在、一連のPDFファイルにテキストを書き込み、それをプリンタに送信するプログラムを作成しています。私はPDFパーツへの書き込みを終えましたが、 "sendPdfToPrinter"メソッドにファイルを渡すときはいつでも問題が発生します。これまではHP DeskjetプリンタとCanonインクジェットプリンタをテストしましたが、これは成功しませんでした(以前は "Java Document error"というメッセージが出ていましたが、後者はファイルをキューに追加しませんでした)。私は私の質問がこれにまでこだわると思う:この「プリンタに送る」Javaメソッドを動作させる方法はありますか?

私は使っているコードに問題がありますか?回避策はありますか?

マークの編集を使用する:

public static void sendPdfToPrinter(String epsilon) throws 
InvalidPasswordException, IOException 
{ 
    FileInputStream psStream = null; 
    try { 
     psStream = new FileInputStream(epsilon); 
     } catch (FileNotFoundException ffne) { 
      ffne.printStackTrace(); 
     } 
     if (psStream == null) { 
      return; 
     } 
    DocFlavor psInFormat = DocFlavor.INPUT_STREAM.AUTOSENSE; 
    PDDocument myDoc = PDDocument.load(new File(epsilon)); 
    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("series")) 
     { 
      myPrinter = services[i]; 
      System.out.println("my printer found: "+svcName); 
      break; 
     } 
    } 

    if (myPrinter != null) {    
     PrinterJob job = PrinterJob.getPrinterJob(); 

     try { 
      job.setPrintService(myPrinter); 
      job.setPageable(new PDFPageable(myDoc)); 
      job.print(); 
     } catch (PrinterException e) { 
      // Handle the exception. 
     } 
    } else { 
     System.out.println("no printer services found"); 
    } 

} 

答えて

1

あなたのプリンタがネイティブでPDFをサポートしていないので、これはかもしれません。私は実際にあなたのコードでPDFを印刷することができましたが、PDFファイルがテキストファイルとして開かれているかのように印刷しました。

1つの解決策は、ApacheのJava用PDFライブラリPDFBoxを使用することです。 、ファイルを印刷PrinterJob代わりのDocPrintJobを使用するには

PDDocument myDoc = PDDocument.load(new File(epsilon)); 

:ファイルがそうのようにロードすることができます

PrinterJob job = PrinterJob.getPrinterJob(); 

try { 
    job.setPrintService(myPrinter); 
    job.setPageable(new PDFPageable(myDoc)); 
    job.print(); 
} catch (PrinterException e) { 
    // Handle the exception. 
} 
+0

このApacheのPDFライブラリをインストールする方法についての教育ビデオはありますか?私は、iTextPDF用のライブラリをインストールするときにビジュアルが必要でした。 – user3418284

+0

IDEを使用している場合は、ライブラリのjarファイルをプロジェクトのライブラリに追加する必要があります。その方法については、IDEのドキュメントを参照してください。コマンドラインからコンパイルする場合は、 '-cp'スイッチを使ってjarファイルにパスを追加します:javac -cp;;/path/to/library.jar;" MyClass.java' – Mark

+0

これはLinux用ですか?私はWindowsを使用しています。 – user3418284

関連する問題