11.16 PDFを生成しファイルシステムへ出力後、ダイレクト印刷するサンプルプログラム(JAX-WS)
概要
PDFを生成しファイルシステムへ出力後、ダイレクト印刷するサンプルプログラムです。
サンプル構成
| 項目 | ファイルパス |
|---|---|
| ソースサンプル |
<bswss-client_home>/sample/java/jax-ws/WSS_JAXWS_Sample16.java
|
ソースサンプル
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;
}
}
