dポイントプレゼントキャンペーン実施中!

Javaの初心者です。

Eclipse、フレームワーク:Spring、Windows Server 2012 R2、Excel2013で開発しています。
サーバーからExcelファイル(拡張子:xlsx)の特定のシートを印刷したいと思っています。

下記コーディングだと、ローカルホストでは印刷されるですが、デプロイするとサーバーではエラーとなってしまいます。

try{
//ドキュメントの形式を設定(application/octec-stream)
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;

// Docオブジェクトの生成
is = new FileInputStream(OUT_FILE_NAME);
Doc document = new SimpleDoc(is, flavor, null);

// プリンタの設定
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(new Copies(1));
//aset.add(MediaName.ISO_A4_WHITE);

PrintService service = PrintServiceLookup.lookupDefaultPrintService();
System.out.println("★service.toString():" + service.toString());
DocPrintJob job = service.createPrintJob();
System.out.println("★job.toString():" + job.toString());
job.print(document, aset);

} catch (PrintException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} finally {
if (is != null) {
is.close();
}
}

エラー内容は、java.lang.NullPointerException で、「DocPrintJob job = service.createPrintJob();」の行でエラーとなっているようです。

どうすれば、サーバーから印刷できるのでしょうか。

A 回答 (1件)

> エラー内容は、java.lang.NullPointerException で、「DocPrintJob job = service.createPrintJob();」の行でエラーとなっているようです。


というのならば、まず考えられる原因は service が NULL という事ですがそれは大丈夫ですか?

……というか、あなたはどこのプリンターから印刷させたいとお考えでしょうか。

Spring を使用しているという事は「サーバー」というのは Web サーバーと思われますが、その Web サーバーで印刷したいというのならばその Web サーバーのプリンターの設定を確認してください。まあ絶対と言っていいくらいプリンターなんてつながっていないはずですし、サーバー管理者に特定の URL アクセスがあるたびに Excel 印刷をサーバーでしたいなんて言ったら変な顔をされるはずですが。

もし Web サーバーにアクセスした利用者のコンピューターにつながっているプリンターから印刷したいというのならば……その考えはあきらめなさい。Web サーバーがアクセスしてきたクライアントの環境を操作できるというのは重大なセキュリティ問題であり、そのようなことが可能な API は存在しません。
考えてみてください、ある URL を踏んだだけであなたのコンピューターのプリンターが勝手に動きだし、延々と "All your base are belong to us" を印刷し続けるという状況を。あなたが望んでいることが可能という事は上記のような悪質な悪戯も可能になるという事です。それは望ましいことではありませんよね?
    • good
    • 0
この回答へのお礼

回答ありがとうございます!
Webサーバにはネットワークプリンタを設定してあります。各部署ごとに異なるプリンターに製品に貼付するラベルを印刷したいと思っています。部署の情報はユーザーから入力してもらうなどする予定です。印刷ボタンを押した時にサーバーから印刷させようと思ったのですが、無謀なのでしょうか。Webから帳票を印刷するということは、Javaでは不可能ということですか?そういったニーズは割とあるような気がするのですが。。

お礼日時:2017/08/24 08:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!