biz-Streamマニュアル Webサービスサーバ ガイド 第11章 サンプルプログラム(Java) 11.16 PDFを生成しファイルシステムへ出力後、ダイレクト印刷するサンプルプログラム(JAX-WS)

11.16 PDFを生成しファイルシステムへ出力後、ダイレクト印刷するサンプルプログラム(JAX-WS)

概要

PDFを生成しファイルシステムへ出力後、ダイレクト印刷するサンプルプログラムです。

環境準備

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


サンプル構成

項目 ファイルパス
ソースサンプル <bswss-client_home>/sample/java/jax-ws/WSS_JAXWS_Sample16.java サンプル1

ソースサンプル

import java.io.IOException;
import java.net.Authenticator;
import java.net.PasswordAuthentication;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
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 org.w3._2005._05.xmlmime.Base64Binary;

import com.brainsellers.pdf.print.PDFDirectPrintStream;
import com.brainsellers.schemas.webservices.bizstream._2006_10.Filesystem;
import com.brainsellers.schemas.webservices.bizstream._2006_10.GenerateOutputDataRequest;
import com.brainsellers.schemas.webservices.bizstream._2006_10.GenerateOutputDataResponse;
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.Output;
import com.brainsellers.schemas.webservices.bizstream._2006_10.Pdf;

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


public class WSS_JAXWS_Sample16 extends HttpServlet {

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

	// Webサービスサーバ上のサンプルディレクトリの場所
	private static final String 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 = BIZSTREAM_SAMPLE_DIR + "/xml/Sample1.xml";

	// Webサービスサーバ上の出力先ファイルパス
	private static final String TARGET_FILE_PATH = "/tmp/WSS_JAXWS_Sample16.pdf";

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

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

	// 印刷結果応答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_Sample16() {
		super();
	}

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

	 		// データの生成
	 		GenerateOutputDataResponse generateOutputDataResponse = generateOutputData();

			// レスポンスより格納したファイルの情報を取得
			Filesystem filesystem = generateOutputDataResponse.getFilesystem();
			String filePath = filesystem.getFilePath(); // ファイルパス
			System.out.println("filePath=" + filePath);

	 		// ファイルデータの取得
	 		byte[] data = getContentData(generateOutputDataResponse);

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

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

	/**
	 * PDFを生成しファイルシステムへ出力後、ファイルデータをクライアントへ返す
	 *
	 * @return GenerateOutputResponse
	 * @throws Exception
	 */
	private GenerateOutputDataResponse generateOutputData() 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);

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

		// ファイルシステムへの出力設定
		Filesystem filesystem = new Filesystem();
		filesystem.setFilePath(TARGET_FILE_PATH); // 出力先ファイルパス (必須)

		Pdf pdf = new Pdf();
		pdf.setFilesystem(filesystem);

		Output output = new Output();
		output.setPdf(pdf);

		request.setOutput(output);

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

		// リクエストを送信
		return type.generateOutputData(request);
	}

	/**
	 * GenerateOutputDataResponseよりファイルデータを取得する
	 *
	 * @param generateOutputDataResponse レスポンス
	 * @return ファイルデータのbyte配列
	 * @throws Exception
	 */
	private byte[] getContentData(GenerateOutputDataResponse generateOutputDataResponse) throws Exception {
		// コンテンツデータの配列を取得
		List<Base64Binary> list = (ArrayList<Base64Binary>) generateOutputDataResponse.getContentDataGroup().getContentData();
		// PDF, Excelの場合は要素が1つのみ
		Base64Binary base64 = list.get(0);

		// ファイルデータを取得
		return base64.getValue();
	}

	/**
	 * ダイレクト印刷の印刷設定を行う
	 *
	 * @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_Sample16.pdf");
		// プリンタ名
		direct.setPrinterName(PRINTER_NAME);
		// 印刷部数
		direct.setNumberOfCopy(1);
		// 出力トレイ
		direct.setSelectedTray(PDFDirectPrintStream.TRAY_AUTO);
		// 印刷ジョブ名
		direct.setJobName("WSS_JAXWS_Sample16");
		// 印刷ダイアログ表示
		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;
 	}
}