biz-Streamマニュアル Webサービスサーバ ガイド 第11章 サンプルプログラム(Java) 11.9 ダイレクト印刷を利用するサンプル(JAX-WS)

11.9 ダイレクト印刷を利用するサンプル(JAX-WS)

概要

ダイレクト印刷を利用するサンプルプログラムです。


環境準備

事前に『2.7 クライアントアプリケーションの環境構築』を確認してください。


サンプル構成

項目 ファイルパス
ページレイアウトサンプル <bswss-client_home>/sample/xml/Sample1.xml サンプル1
ソースサンプル <bswss-client_home>/sample/java/jax-ws/WSS_JAXWS_Sample9.java サンプル1

ソースサンプル

ダイレクト印刷を利用するサンプルプログラムです。

import java.io.IOException;
import java.net.Authenticator;
import java.net.PasswordAuthentication;
import java.net.URL;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.ws.axis2.Bizstream;
import org.apache.ws.axis2.BizstreamPortType;

import com.brainsellers.pdf.print.PDFDirectPrintStream;
import com.brainsellers.schemas.webservices.bizstream._2006_10.DataType;
import com.brainsellers.schemas.webservices.bizstream._2006_10.GenerateDataRequest;
import com.brainsellers.schemas.webservices.bizstream._2006_10.LayoutData;
import com.brainsellers.schemas.webservices.bizstream._2006_10.LayoutDefinition;
import com.brainsellers.schemas.webservices.bizstream._2006_10.Pdf;
import com.brainsellers.schemas.webservices.common._2006_10.FileData;

import jakarta.xml.ws.BindingProvider;
import jakarta.xml.ws.WebServiceFeature;
import jakarta.xml.ws.soap.MTOMFeature;



public class WSS_JAXWS_Sample9 extends HttpServlet {

	// Webサービスサーバのホスト名
	private static final String WSS_HOST_NAME = "wsssrv";

	// ユーザアプリケーションサーバのホスト名
	private static final String AP_HOST_NAME = "localhost";

	// プリンタ名
	private static final String PRINTER_NAME = "Bullzip PDF Printer";

	// Webサービスサーバ上のサンプルディレクトリの場所
	private static final String WSS_BIZSTREAM_SAMPLE_DIR = "/bs/sample";

	// Webサービスのエンドポイントプリフィックス
	private static final String WSS_SERVICE_LOCATION = "http://" + WSS_HOST_NAME + ":8080/axis2/services";

	// BASIC認証のユーザ名
	private static final String USER_NAME = "bizuser1";

	// BASIC認証のパスワード
	private static final String PASSWORD = "bizuser1";

	// 監査ロギング用のユーザ定義
	private static final String USER_DEF = "AAA";

	// Webサービスサーバ上の入力レイアウト定義ファイルパス
	private static final String LAYOUT_FILE = WSS_BIZSTREAM_SAMPLE_DIR + "/xml/Sample1.xml";

	// 印刷結果応答URL
	private static final String RESPONSE_URL = "http://" + AP_HOST_NAME + ":8080/WSS_JAXWS_Sample/WSS_JAXWS_Sample9_1";


	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public WSS_JAXWS_Sample9() {
		super();
	}

	//HTTP Get リクエストの処理
 	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 		try{
	 		// 認証の設定
	 		setAuth();

	 		// データの生成
	 		byte[] data = generate();

	 		// 取得したファイルをダイレクト印刷のストリームに出力
	 		PDFDirectPrintStream direct = makePDFDirectPrintStream(response);
	 		direct.write(data);
	 		direct.close();
		} catch (Exception e) {
			e.printStackTrace();
			throw new ServletException(e);
		}
	}

 	/**
 	 * ダイレクト印刷のストリームを作成
 	 *
 	 * @param response
 	 * @return PDFDirectPrintStream
 	 */
 	private PDFDirectPrintStream makePDFDirectPrintStream(HttpServletResponse response){
 		//インスタンス生成
 		PDFDirectPrintStream direct = new PDFDirectPrintStream(response);

		// 印刷応答URL
		direct.setResponseUrl(RESPONSE_URL);
		// 出力PDFファイル
//		direct.setSaveFileName("C:/Temp/WSS_JAXWS_Sample9.pdf");
		// プリンタ名
		direct.setPrinterName(PRINTER_NAME);
		// 印刷部数
		direct.setNumberOfCopy(1);
		// 出力トレイ
		direct.setSelectedTray(PDFDirectPrintStream.TRAY_AUTO);
		// 印刷ジョブ名
		direct.setJobName("WSS_JAXWS_Sample9");
		// 印刷ダイアログ表示
		direct.setPrintDialog(false);
		// ブラウザのターゲットフレーム名(IEでのみ有効)
		direct.setTarget("bizPrint");
		// sppファイル暗号化パスワード
//		direct.setPassword("password");
		// エンコード済み暗号化パスワード
//		direct.setPasswordWithEncoded("cGFzc3dvcmQ=");
		// 用紙に合わせて印刷
		direct.setDoFit(true);
		// 印刷開始ページ
		direct.setFromPage(1);
		// 印刷終了ページ
		direct.setToPage(-1);

 		return direct;
 	}

	/**
	 * 認証の設定
	 */
	private void setAuth() {
		Authenticator.setDefault(new Authenticator() {
			protected PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication(USER_NAME, PASSWORD.toCharArray());
			}
		});
	}

	/**
	 * PDFを生成してバイナリをダウンロードする
	 *
	 * @return byte[]
	 */
	private byte[] generate() throws Exception {
		// クライアントを生成
		Bizstream service = new Bizstream(new URL(WSS_SERVICE_LOCATION + "/bizstream?wsdl"));

		// MTOMを有効化
		WebServiceFeature feature = new MTOMFeature(true);
		BizstreamPortType type = service.getBizstreamSOAP11Port(feature);
		BindingProvider bp = (BindingProvider) type;
		Map<String, Object> reqContext = bp.getRequestContext();
		reqContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
				WSS_SERVICE_LOCATION + "/bizstream?UserDef=" + USER_DEF);

		// リクエストメッセージの作成
		GenerateDataRequest request = new GenerateDataRequest();

		// 出力ファイルの種類を設定
		DataType dataType = new DataType();
		dataType.setPdf(new Pdf());
		request.setDataType(dataType);

		// レイアウト定義を設定
		LayoutData layoutData = new LayoutData();
		LayoutDefinition layout = new LayoutDefinition();
		layout.setUri(LAYOUT_FILE);
		layoutData.getLayoutDefinition().add(layout);
		request.setLayoutData(layoutData);

		// リクエストを送信
		FileData data =  type.generateData(request);

		return data.getContentData().getValue();
	}
}

    


印刷応答URLとして呼び出す、印刷結果の処理サンプルプログラムです。


    import java.io.IOException;
    import java.io.PrintWriter;
    import java.net.URLDecoder;

    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;


    public class WSS_JAXWS_Sample9_1 extends HttpServlet {

        //HTTP Post リクエストの処理
        public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
            doGet(req, res);
        }

        //HTTP Get リクエストの処理
         public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
             String result = request.getParameter("RESULT"); // 印刷結果
            String errCode = request.getParameter("ERROR_CODE"); // エラーコード
            String errCause = request.getParameter("ERROR_CAUSE"); // エラー原因
            String errDetails = request.getParameter("ERROR_DETAILS"); // エラー内容
            if (errDetails != null) {
                errDetails = URLDecoder.decode(errDetails, "UTF-8");
            }

            // ブラウザに結果を表示
            response.setContentType("text/html;charset=UTF-8");
            response.setCharacterEncoding("UTF-8");
            PrintWriter pw = response.getWriter();
            pw.println("WSS_JAXWS_Sample9_1");
            pw.println("
RESULT = " + result); // 印刷結果 pw.println("
ERROR_CODE = " + errCode); // エラーコード pw.println("
ERROR_CAUSE = " + errCause); // エラー原因 pw.println("
ERROR_DETAILS = " + errDetails); // エラー内容 pw.println("
"); pw.close(); } }
  • Webサービスサーバでダイレクト印刷を利用する場合、パスワード指定は setPassword メソッドを実行してください。setPasswordWithEncoded メソッドを使用する場合は、 製品に同梱されている BouncyCastle ライブラリ(bcpkix-jdk18on.jar、bcprov-jdk18on.jar、bcutil-jdk18on.jar)をクライアントアプリケーションに配置する必要があります。