4.3. PDF出力がうまくいかない¶
関連する現象
4.3.1. ロードバランサーを利用している環境でPDF出力に失敗する¶
対象バージョン¶
IM-FormaDesigner Version 7.2 の場合
- IM-FormaDesigner Version 7.2.0 ~ IM-FormaDesigner Version 7.2.3
IM-FormaDesigner for Accel Platform の場合
- IM-FormaDesigner for Accel Platform 2012 Autumn (8.0.1) ~ 最新バージョン
条件¶
ロードバランサーを利用している環境でPDF出力を行う。以下のアプリケーション種別・BIS作成種類の場合に発生します。
- アプリケーション種別「標準」
- アプリケーション種別「IM-Workflow」
- BIS作成種類「BISフロー」
- BIS作成種類「ワークフロー」
原因¶
以下二つのケースで wkhtmltopdf からのリクエストに対して応答が返却されないためです。① wkhtmltopdf からのリクエストが、ロードバランサーを経由してAPサーバへアクセスできない。統合Windows認証機能が有効な場合などでは、ロードバランサーに wkhtmltopdf からAPサーバへのアクセスが拒否され、エラーが発生します。② wkhtmltopdf からのリクエストが、ロードバランサーを経由すると別APサーバへアクセスされる。ロードバランサーにより別APサーバへリクエストが振り分けられる場合があります。別APサーバには当該のセッションが存在しないため、エラーが発生します。以下の要件、改善モジュールで対応を行っています。
IM-FormaDesigner Version 7.2 の場合
- 要件 #12330 PDF出力リクエスト先サーバのベースURLの設定項目の追加
IM-FormaDesigner for Accel Platform の場合
- forma_pdf_load_balancing-8.0.6.imm
- forma_pdf_load_balancing-8.0.7.imm
- forma_pdf_load_balancing-8.0.8.imm
コラム
これらの改善モジュールは FAQ で公開されているものと同一のものです。
解決方法¶
IM-FormaDesigner Version 7.2 の場合
以下のパッチを適用することで解決します。
- IM-FormaDesigner Version 7.2.4
適用後、要件 #12330 PDF出力リクエスト先サーバのベースURLの設定項目の追加 を参照の上、ベースURLの設定を行ってください。
IM-FormaDesigner for Accel Platform の場合
FAQ の手順に従い、ロードバランシング環境のPDF出力改善モジュールを適用してください。注意
PDF出力改善モジュールは IM-FormaDesigner for Accel Platform 2013 Winter (8.0.5) 以降のバージョンで利用可能です。
4.3.2. バーチャルテナント使用時にPDF出力に失敗する¶
対象バージョン¶
IM-FormaDesigner Version 7.2 の場合
- 対象外
IM-FormaDesigner for Accel Platform の場合
- IM-FormaDesigner for Accel Platform 2012 Autumn (8.0.1) ~ IM-FormaDesigner for Accel Platform 2014 Winter (8.0.8)
現象¶
PDF出力に失敗します。その際、事象の発生時刻に該当する例外ログに下記のようなスタックトレースが出力されます。jp.co.intra_mart.foundation.admin.tenant.InvalidTenantIdException: [E.IWP.ADMIN.CONTEXT.10004] Tenant ID cannot be resolved. at jp.co.intra_mart.system.admin.context.StandardTenantIdValidator.validate(StandardTenantIdValidator.java:190) at jp.co.intra_mart.system.admin.tenant.TenantIdProvider.validate(TenantIdProvider.java:108) at jp.co.intra_mart.system.admin.tenant.TenantIdProvider.getTenantId(TenantIdProvider.java:76) at jp.co.intra_mart.system.admin.context.TenantInfoContextCachingStrategyAdapterImpl.validate(TenantInfoContextCachingStrategyAdapterImpl.java:74) at jp.co.intra_mart.system.context.core.cache.AbstractContextCachingStrategyAdapter.validate(AbstractContextCachingStrategyAdapter.java:53) at jp.co.intra_mart.system.security.certification.sso.SSOContextCachingStrategyAdapterImpl.validate(SSOContextCachingStrategyAdapterImpl.java:81) at jp.co.intra_mart.system.context.impl.cache.SessionContextCachePolicy.validate(SessionContextCachePolicy.java:212) at jp.co.intra_mart.system.context.impl.cache.SessionContextCachePolicy.getContext(SessionContextCachePolicy.java:75) at jp.co.intra_mart.system.context.core.cache.CachingContextBuilderSupport.getCache(CachingContextBuilderSupport.java:74) at jp.co.intra_mart.system.context.core.cache.CachingContextBuilderSupport.build(CachingContextBuilderSupport.java:33) at jp.co.intra_mart.system.context.impl.command.LifecycleBeginOperation.buildContext(LifecycleBeginOperation.java:96) at jp.co.intra_mart.system.context.impl.command.LifecycleBeginOperation.execute(LifecycleBeginOperation.java:64) at jp.co.intra_mart.system.context.impl.LifecycleImpl.begin(LifecycleImpl.java:82) at jp.co.intra_mart.system.context.web.impl.ContextFilter.doContextFilter(ContextFilter.java:114) at jp.co.intra_mart.system.context.web.impl.PreContextFilterChain.doFilter(PreContextFilterChain.java:47) at jp.co.intra_mart.system.context.web.impl.ContextFilter.doFilter(ContextFilter.java:78) at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:89) at jp.co.intra_mart.foundation.security.filter.ResponseCharacterEncodingFilter.doFilter(ResponseCharacterEncodingFilter.java:90) at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:89) at jp.co.intra_mart.foundation.security.filter.RequestCharacterEncodingFilter.doFilter(RequestCharacterEncodingFilter.java:47) at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:89) at com.caucho.server.httpcache.ProxyCacheFilterChain.doRequestCacheable(ProxyCacheFilterChain.java:252) at com.caucho.server.httpcache.ProxyCacheFilterChain.doFilter(ProxyCacheFilterChain.java:193) at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:156) at com.caucho.server.webapp.AccessLogFilterChain.doFilter(AccessLogFilterChain.java:95) at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:289) at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:838) at com.caucho.network.listen.TcpSocketLink.dispatchRequest(TcpSocketLink.java:1349) at com.caucho.network.listen.TcpSocketLink.handleRequest(TcpSocketLink.java:1305) at com.caucho.network.listen.TcpSocketLink.handleRequestsImpl(TcpSocketLink.java:1289) at com.caucho.network.listen.TcpSocketLink.handleRequests(TcpSocketLink.java:1197) at com.caucho.network.listen.TcpSocketLink.handleAcceptTaskImpl(TcpSocketLink.java:993) at com.caucho.network.listen.ConnectionTask.runThread(ConnectionTask.java:117) at com.caucho.network.listen.ConnectionTask.run(ConnectionTask.java:93) at com.caucho.network.listen.SocketLinkThreadLauncher.handleTasks(SocketLinkThreadLauncher.java:169) at com.caucho.network.listen.TcpSocketAcceptThread.run(TcpSocketAcceptThread.java:61) at com.caucho.env.thread2.ResinThread2.runTasks(ResinThread2.java:173) at com.caucho.env.thread2.ResinThread2.run(ResinThread2.java:118)また、下記のようなスタックトレースがforma.logに出力されます。Exit with code 1 due to http error: 500 Internal Server Error at jp.co.intra_mart.system.forma.util.WkhtmltopdfProcess.executeCommand(WkhtmltopdfProcess.java:153) ~[classes:na] at jp.co.intra_mart.system.forma.util.WkhtmltopdfProcess.start(WkhtmltopdfProcess.java:268) ~[classes:na] at jp.co.intra_mart.foundation.forma.ApplicationPDFConverter.createPDF(ApplicationPDFConverter.java:130) ~[forma-8.0.7-main.jar:na] at jp.co.intra_mart.system.forma.javascript.api.ApplicationPDFConverterObject.jsFunction_createPDFToStorage(ApplicationPDFConverterObject.java:285) ~[forma-8.0.7-main.jar:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_10] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_10] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_10] at java.lang.reflect.Method.invoke(Method.java:601) ~[na:1.7.0_10] at jp.co.intra_mart.system.javascript.MemberBox.invoke(MemberBox.java:126) [js-8.0.3-main.jar:na] at jp.co.intra_mart.system.javascript.FunctionObject.call(FunctionObject.java:442) [js-8.0.3-main.jar:na] at jp.co.intra_mart.system.javascript.optimizer.OptRuntime.callN(OptRuntime.java:52) [js-8.0.3-main.jar:na] at _forma._print._pdf_46_js._c_createPDF_1(c:\opt\resin-pro\webapps\imart\WEB-INF\jssp\product\src\forma\print\pdf.js:80) [im_jssp-8.0.8-main.jar:na] at _forma._print._pdf_46_js.call(c:\opt\resin-pro\webapps\imart\WEB-INF\jssp\product\src\forma\print\pdf.js) [im_jssp-8.0.8-main.jar:na] at jp.co.intra_mart.system.display.ScriptScope.call(ScriptScope.java:156) [im_jssp-8.0.8-main.jar:na] at jp.co.intra_mart.system.display.ScriptScope.call(ScriptScope.java:142) [im_jssp-8.0.8-main.jar:na] at jp.co.intra_mart.system.display.Content.executeFunction(Content.java:188) [im_jssp-8.0.8-main.jar:na] at jp.co.intra_mart.system.javascript.imapi.ContentObject.jsStaticFunction_executeFunction(ContentObject.java:170) [im_jssp-8.0.8-main.jar:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_10] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_10] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_10] at java.lang.reflect.Method.invoke(Method.java:601) ~[na:1.7.0_10] at jp.co.intra_mart.system.javascript.MemberBox.invoke(MemberBox.java:126) [js-8.0.3-main.jar:na] at jp.co.intra_mart.system.javascript.FunctionObject.call(FunctionObject.java:379) [js-8.0.3-main.jar:na] at jp.co.intra_mart.system.javascript.optimizer.OptRuntime.callN(OptRuntime.java:52) [js-8.0.3-main.jar:na] at _forma._common._ajax._server_95_logic_46_js._c_createPDF_21(c:\opt\resin-pro\webapps\imart\WEB-INF\jssp\product\src\forma\common\ajax\server_logic.js:505) [im_jssp-8.0.8-main.jar:na] at _forma._common._ajax._server_95_logic_46_js.call(c:\opt\resin-pro\webapps\imart\WEB-INF\jssp\product\src\forma\common\ajax\server_logic.js) [im_jssp-8.0.8-main.jar:na] at jp.co.intra_mart.system.javascript.ContextFactory.doTopCall(ContextFactory.java:394) [js-8.0.3-main.jar:na] at jp.co.intra_mart.system.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3101) [js-8.0.3-main.jar:na] at _forma._common._ajax._server_95_logic_46_js.call(c:\opt\resin-pro\webapps\imart\WEB-INF\jssp\product\src\forma\common\ajax\server_logic.js) [im_jssp-8.0.8-main.jar:na] at jp.co.intra_mart.system.display.ScriptScope.call(ScriptScope.java:156) [im_jssp-8.0.8-main.jar:na] at jp.co.intra_mart.system.display.ScriptScope.call(ScriptScope.java:142) [im_jssp-8.0.8-main.jar:na] at jp.co.intra_mart.system.servlet.jssp.JsspRpcServlet.invoke(JsspRpcServlet.java:177) [im_servlets-8.0.5-main.jar:na] at jp.co.intra_mart.system.servlet.jssp.JsspRpcServlet.execute(JsspRpcServlet.java:141) [im_servlets-8.0.5-main.jar:na] at jp.co.intra_mart.system.servlet.jssp.JsspRpcServlet.doPost(JsspRpcServlet.java:125) [im_servlets-8.0.5-main.jar:na] at javax.servlet.http.HttpServlet.service(HttpServlet.java:159) [javaee-16.jar:na] at javax.servlet.http.HttpServlet.service(HttpServlet.java:97) [javaee-16.jar:na] at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:109) [resin.jar:4.0.40] at jp.co.intra_mart.system.servlet.jssp.JSSPContextFilter.doFilter(JSSPContextFilter.java:63) [im_jssp-8.0.8-main.jar:na] at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:89) [resin.jar:4.0.40] at jp.co.intra_mart.common.aid.jsdk.javax.servlet.filter.impl.HTTPContextHandlingFilterImpl.doFilter(HTTPContextHandlingFilterImpl.java:53) [im_j2ee_assist_impl-8.0.6-main.jar:na] at jp.co.intra_mart.common.aid.jsdk.javax.servlet.filter.HTTPContextHandlingFilter.doFilter(HTTPContextHandlingFilter.java:94) [im_j2ee_assist_base-8.0.6-main.jar:na] at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:89) [resin.jar:4.0.40] at jp.co.intra_mart.system.servlet.filter.RequestScopeLockReleaseFilter.doFilter(RequestScopeLockReleaseFilter.java:44) [im_servlets-8.0.5-main.jar:na] at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:89) [resin.jar:4.0.40] at jp.co.intra_mart.system.secure.filter.ApplicationPermissionFilter.doFilter(ApplicationPermissionFilter.java:65) [im_core_impl_license-8.0.8-PATCH_001-main.jar:na] at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:89) [resin.jar:4.0.40] at jp.co.intra_mart.system.secure.filter.SystemPermissionFilter.doFilter(SystemPermissionFilter.java:68) [im_core_impl_license-8.0.8-PATCH_001-main.jar:na] at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:89) [resin.jar:4.0.40] at jp.co.intra_mart.foundation.router.RoutingFilter.doFilter(RoutingFilter.java:41) [im_router-8.0.2-main.jar:na] at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:89) [resin.jar:4.0.40] at jp.co.intra_mart.foundation.security.filter.SessionFilter.doFilter(SessionFilter.java:70) [im_certification_base-8.0.7-main.jar:na] at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:89) [resin.jar:4.0.40] at jp.co.intra_mart.system.log.transition.TransitionLogFilter.doFilter(TransitionLogFilter.java:73) [im_system_log-8.0.5-main.jar:na] at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:89) [resin.jar:4.0.40] at jp.co.intra_mart.system.servlet.filter.RequestLogFilter.doFilter(RequestLogFilter.java:86) [im_system_log-8.0.5-main.jar:na] at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:89) [resin.jar:4.0.40] at jp.co.intra_mart.system.servlet.filter.ResponseHeaderFilter.doFilter(ResponseHeaderFilter.java:154) [im_servlets-8.0.5-main.jar:na] at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:89) [resin.jar:4.0.40] at jp.co.intra_mart.system.context.web.impl.ContextFilter.doContextFilter(ContextFilter.java:134) [im_core_impl-8.0.8-PATCH_001-main.jar:na] at jp.co.intra_mart.system.context.web.impl.PreContextFilterChain.doFilter(PreContextFilterChain.java:47) [im_core_impl-8.0.8-PATCH_001-main.jar:na] at jp.co.intra_mart.system.context.web.impl.ContextFilter.doFilter(ContextFilter.java:78) [im_core_impl-8.0.8-PATCH_001-main.jar:na] at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:89) [resin.jar:4.0.40] at jp.co.intra_mart.foundation.security.filter.ResponseCharacterEncodingFilter.doFilter(ResponseCharacterEncodingFilter.java:90) [im_servlets-8.0.5-main.jar:na] at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:89) [resin.jar:4.0.40] at jp.co.intra_mart.foundation.security.filter.RequestCharacterEncodingFilter.doFilter(RequestCharacterEncodingFilter.java:47) [im_servlets-8.0.5-main.jar:na] at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:89) [resin.jar:4.0.40] at com.caucho.server.httpcache.ProxyCacheFilterChain.doFilter(ProxyCacheFilterChain.java:170) [pro.jar:4.0.40] at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:156) [resin.jar:4.0.40] at com.caucho.server.webapp.AccessLogFilterChain.doFilter(AccessLogFilterChain.java:95) [resin.jar:4.0.40] at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:289) [resin.jar:4.0.40] at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:838) [resin.jar:4.0.40] at com.caucho.network.listen.TcpSocketLink.dispatchRequest(TcpSocketLink.java:1346) [resin.jar:3.2.0] at com.caucho.network.listen.TcpSocketLink.handleRequest(TcpSocketLink.java:1302) [resin.jar:3.2.0] at com.caucho.network.listen.TcpSocketLink.handleRequestsImpl(TcpSocketLink.java:1286) [resin.jar:3.2.0] at com.caucho.network.listen.TcpSocketLink.handleRequests(TcpSocketLink.java:1194) [resin.jar:3.2.0] at com.caucho.network.listen.TcpSocketLink.handleAcceptTaskImpl(TcpSocketLink.java:993) [resin.jar:3.2.0] at com.caucho.network.listen.ConnectionTask.runThread(ConnectionTask.java:117) [resin.jar:3.2.0] at com.caucho.network.listen.ConnectionTask.run(ConnectionTask.java:93) [resin.jar:3.2.0] at com.caucho.network.listen.SocketLinkThreadLauncher.handleTasks(SocketLinkThreadLauncher.java:169) [resin.jar:3.2.0] at com.caucho.network.listen.TcpSocketAcceptThread.run(TcpSocketAcceptThread.java:61) [resin.jar:3.2.0] at com.caucho.env.thread2.ResinThread2.runTasks(ResinThread2.java:173) [resin.jar:4.0.40] at com.caucho.env.thread2.ResinThread2.run(ResinThread2.java:118) [resin.jar:4.0.40]
条件¶
以下の条件をすべて満たす場合に発生します。
- バーチャルテナントが複数存在する
- リクエスト情報を利用したテナント自動解決機能を有効にしている
- デフォルトテナント以外のテナントからPDF出力を行う
以下のアプリケーション種別・BIS作成種類の場合に発生します。
- アプリケーション種別「標準」
- アプリケーション種別「IM-Workflow」
- BIS作成種類「BISフロー」
- BIS作成種類「ワークフロー」
原因¶
製品の不具合です。リクエスト情報を利用したテナント自動解決機能が有効な場合には、アドオンで開発されたロジックにてテナントが解決されます。しかし IM-FormaDesigner が実行したPDFツールからは、アドオンプログラムの要求する形式でリクエストを送ることができません。そのため、PDFツールからのリクエストに対するテナントが解決されず、その場合、デフォルトテナントとしてテナントが解決されます。デフォルトテナント以外のテナントからPDF出力を要求した場合、デフォルトテナントには当該のセッション情報が存在しないため、PDF出力に失敗します。以下の要件で対応を行っています。
IM-FormaDesigner for Accel Platform の場合
- 要件 #11981 リクエスト情報を利用したテナント自動解決機能が有効な場合にPDF出力に失敗します。
4.3.3. IM-SecureSignOn for Accel Platform 使用時にPDF出力に失敗する¶
対象バージョン¶
IM-FormaDesigner Version 7.2 の場合
- 対象外
IM-FormaDesigner for Accel Platform の場合
- IM-FormaDesigner for Accel Platform 2012 Autumn (8.0.1) ~ IM-FormaDesigner for Accel Platform 2014 Winter (8.0.8)
現象¶
PDF出力に失敗します。その際、事象の発生時刻に該当する例外ログに下記のようなスタックトレースが出力されます。jp.co.intra_mart.foundation.admin.tenant.InvalidTenantIdException: [E.IWP.ADMIN.CONTEXT.10004] Tenant ID cannot be resolved. at jp.co.intra_mart.system.admin.context.StandardTenantIdValidator.validate(StandardTenantIdValidator.java:190) at jp.co.intra_mart.system.admin.tenant.TenantIdProvider.validate(TenantIdProvider.java:108) at jp.co.intra_mart.system.admin.tenant.TenantIdProvider.getTenantId(TenantIdProvider.java:76) at jp.co.intra_mart.system.admin.context.TenantInfoContextCachingStrategyAdapterImpl.validate(TenantInfoContextCachingStrategyAdapterImpl.java:74) at jp.co.intra_mart.system.context.core.cache.AbstractContextCachingStrategyAdapter.validate(AbstractContextCachingStrategyAdapter.java:53) at jp.co.intra_mart.system.security.certification.sso.SSOContextCachingStrategyAdapterImpl.validate(SSOContextCachingStrategyAdapterImpl.java:81) at jp.co.intra_mart.system.context.impl.cache.SessionContextCachePolicy.validate(SessionContextCachePolicy.java:212) at jp.co.intra_mart.system.context.impl.cache.SessionContextCachePolicy.getContext(SessionContextCachePolicy.java:75) at jp.co.intra_mart.system.context.core.cache.CachingContextBuilderSupport.getCache(CachingContextBuilderSupport.java:74) at jp.co.intra_mart.system.context.core.cache.CachingContextBuilderSupport.build(CachingContextBuilderSupport.java:33) at jp.co.intra_mart.system.context.impl.command.LifecycleBeginOperation.buildContext(LifecycleBeginOperation.java:96) at jp.co.intra_mart.system.context.impl.command.LifecycleBeginOperation.execute(LifecycleBeginOperation.java:64) at jp.co.intra_mart.system.context.impl.LifecycleImpl.begin(LifecycleImpl.java:82) at jp.co.intra_mart.system.context.web.impl.ContextFilter.doContextFilter(ContextFilter.java:114) at jp.co.intra_mart.system.context.web.impl.PreContextFilterChain.doFilter(PreContextFilterChain.java:47) at jp.co.intra_mart.system.context.web.impl.ContextFilter.doFilter(ContextFilter.java:78) at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:89) at jp.co.intra_mart.foundation.security.filter.ResponseCharacterEncodingFilter.doFilter(ResponseCharacterEncodingFilter.java:90) at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:89) at jp.co.intra_mart.foundation.security.filter.RequestCharacterEncodingFilter.doFilter(RequestCharacterEncodingFilter.java:47) at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:89) at com.caucho.server.httpcache.ProxyCacheFilterChain.doRequestCacheable(ProxyCacheFilterChain.java:252) at com.caucho.server.httpcache.ProxyCacheFilterChain.doFilter(ProxyCacheFilterChain.java:193) at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:156) at com.caucho.server.webapp.AccessLogFilterChain.doFilter(AccessLogFilterChain.java:95) at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:289) at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:838) at com.caucho.network.listen.TcpSocketLink.dispatchRequest(TcpSocketLink.java:1349) at com.caucho.network.listen.TcpSocketLink.handleRequest(TcpSocketLink.java:1305) at com.caucho.network.listen.TcpSocketLink.handleRequestsImpl(TcpSocketLink.java:1289) at com.caucho.network.listen.TcpSocketLink.handleRequests(TcpSocketLink.java:1197) at com.caucho.network.listen.TcpSocketLink.handleAcceptTaskImpl(TcpSocketLink.java:993) at com.caucho.network.listen.ConnectionTask.runThread(ConnectionTask.java:117) at com.caucho.network.listen.ConnectionTask.run(ConnectionTask.java:93) at com.caucho.network.listen.SocketLinkThreadLauncher.handleTasks(SocketLinkThreadLauncher.java:169) at com.caucho.network.listen.TcpSocketAcceptThread.run(TcpSocketAcceptThread.java:61) at com.caucho.env.thread2.ResinThread2.runTasks(ResinThread2.java:173) at com.caucho.env.thread2.ResinThread2.run(ResinThread2.java:118)また、下記のようなスタックトレースがforma.logに出力されます。Exit with code 1 due to network error: UnknownContentError at jp.co.intra_mart.system.forma.util.WkhtmltopdfProcess.executeCommand(WkhtmltopdfProcess.java:86) ~[forma-8.0.8-PATCH_001-main.jar:na] at jp.co.intra_mart.system.forma.util.WkhtmltopdfProcess.start(WkhtmltopdfProcess.java:236) ~[forma-8.0.8-PATCH_001-main.jar:na] at jp.co.intra_mart.foundation.forma.ApplicationPDFConverter.createPDF(ApplicationPDFConverter.java:130) ~[forma-8.0.8-PATCH_001-main.jar:na] at jp.co.intra_mart.foundation.forma.ApplicationPDFConverter.createPDF(ApplicationPDFConverter.java:98) ~[forma-8.0.8-PATCH_001-main.jar:na] at jp.co.intra_mart.system.forma.javascript.api.ApplicationPDFConverterObject.jsFunction_createPDFToStorage(ApplicationPDFConverterObject.java:289) ~[forma-8.0.8-PATCH_001-main.jar:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_45] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_45] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_45] at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_45] at jp.co.intra_mart.system.javascript.MemberBox.invoke(MemberBox.java:126) [js-8.0.3-PATCH_001-main.jar:na] at jp.co.intra_mart.system.javascript.FunctionObject.call(FunctionObject.java:442) [js-8.0.3-PATCH_001-main.jar:na] at jp.co.intra_mart.system.javascript.optimizer.OptRuntime.callN(OptRuntime.java:52) [js-8.0.3-PATCH_001-main.jar:na] at _forma._print._pdf_46_js._c_createPDF_1(c:\resin-pro-4.0.44_sso_2014winter\webapps\sso_2014winter\WEB-INF\jssp\product\src\forma\print\pdf.js:80) [im_jssp-8.0.9-main.jar:na] at _forma._print._pdf_46_js.call(c:\resin-pro-4.0.44_sso_2014winter\webapps\sso_2014winter\WEB-INF\jssp\product\src\forma\print\pdf.js) [im_jssp-8.0.9-main.jar:na] at jp.co.intra_mart.system.display.ScriptScope.call(ScriptScope.java:156) [im_jssp-8.0.9-main.jar:na] at jp.co.intra_mart.system.display.ScriptScope.call(ScriptScope.java:142) [im_jssp-8.0.9-main.jar:na] at jp.co.intra_mart.system.display.Content.executeFunction(Content.java:188) [im_jssp-8.0.9-main.jar:na] at jp.co.intra_mart.system.javascript.imapi.ContentObject.jsStaticFunction_executeFunction(ContentObject.java:170) [im_jssp-8.0.9-main.jar:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_45] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_45] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_45] at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_45] at jp.co.intra_mart.system.javascript.MemberBox.invoke(MemberBox.java:126) [js-8.0.3-PATCH_001-main.jar:na] at jp.co.intra_mart.system.javascript.FunctionObject.call(FunctionObject.java:379) [js-8.0.3-PATCH_001-main.jar:na] at jp.co.intra_mart.system.javascript.optimizer.OptRuntime.callN(OptRuntime.java:52) [js-8.0.3-PATCH_001-main.jar:na] at _forma._normal._view._list_95_view_46_js._c_createPDF_7(c:\resin-pro-4.0.44_sso_2014winter\webapps\sso_2014winter\WEB-INF\jssp\product\src\forma\normal\view\list_view.js:450) [im_jssp-8.0.9-main.jar:na] at _forma._normal._view._list_95_view_46_js.call(c:\resin-pro-4.0.44_sso_2014winter\webapps\sso_2014winter\WEB-INF\jssp\product\src\forma\normal\view\list_view.js) [im_jssp-8.0.9-main.jar:na] at jp.co.intra_mart.system.javascript.ContextFactory.doTopCall(ContextFactory.java:394) [js-8.0.3-PATCH_001-main.jar:na] at jp.co.intra_mart.system.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3101) [js-8.0.3-PATCH_001-main.jar:na] at _forma._normal._view._list_95_view_46_js.call(c:\resin-pro-4.0.44_sso_2014winter\webapps\sso_2014winter\WEB-INF\jssp\product\src\forma\normal\view\list_view.js) [im_jssp-8.0.9-main.jar:na] at jp.co.intra_mart.system.display.ScriptScope.call(ScriptScope.java:156) [im_jssp-8.0.9-main.jar:na]
条件¶
IM-SecureSignOn for Accel Platform を使用している。以下のアプリケーション種別・BIS作成種類の場合に発生します。
- アプリケーション種別「標準」
- アプリケーション種別「IM-Workflow」
- BIS作成種類「BISフロー」
- BIS作成種類「ワークフロー」
原因¶
製品の不具合です。IM-SecureSignOn for Accel Platform を利用する場合、リクエスト情報を利用したテナント自動解決機能が有効となり、IM-SecureSignOn for Accel Platform が提供するテナント自動解決機能によってテナントが解決されます。しかし IM-FormaDesigner が実行したPDFツールからは、 IM-SecureSignOn for Accel Platform が提供するテナント自動解決機能の要求する形式でリクエストを送ることができません。そのため、PDFツールからのリクエストに対するテナントが解決されず、エラーが発生し、PDF出力に失敗します。以下の要件で対応を行っています。
IM-FormaDesigner for Accel Platform の場合
- 要件 #11981 リクエスト情報を利用したテナント自動解決機能が有効な場合にPDF出力に失敗します。
4.3.4. wkhtmltopdf のバージョンアップ後、PDFに出力する際の倍率が変更される¶
対象バージョン¶
IM-FormaDesigner Version 7.2 の場合
- 対象外
IM-FormaDesigner for Accel Platform の場合
- バージョンに関わらず発生します。
条件¶
wkhtmltopdf を 0.11.0 rc1 以前から 0.12.0 以降にバージョンアップする。以下のアプリケーション種別・BIS作成種類の場合に発生します。
- アプリケーション種別「標準」
- アプリケーション種別「IM-Workflow」
- BIS作成種類「BISフロー」
- BIS作成種類「ワークフロー」
原因¶
wkhtmltopdf でのPDF出力時の自動倍率調整が、バージョンによって以下のように異なるために発生します。
wkhtmltopdf 0.11.0 rc1 以前のバージョン
アプリケーションの内容がPDFの1ページに収まるように縮小され、出力されます。
wkhtmltopdf 0.12.0 以降のバージョン
固定の倍率で出力されるため、設定の用紙サイズからはみ出す場合、以下のように出力されます。
縦幅が長い
改ページした上で出力されます。
横幅が長い
はみ出した端の部分が切れた状態で出力されます。
コラム
wkhtmltopdf のバージョンに伴って発生が確認されている事象については 「 IM-FormaDesigner セットアップガイド 」-「 wkhtmltopdfのインストール 」 を確認してください。
以下の要件で対応を行っています。
IM-FormaDesigner for Accel Platform の場合
- 要件 #12365 PDF出力時に利用するwkhtmltopdfコマンドを実行する際のオプションを設定できるようにします
解決方法¶
PDFが適切な倍率で出力されるよう、PDF出力のためのオプションを設定します。使用するオプションについては、使用可能なオプションの中から目的に合わせて設定してください。解決方法は以下の2通りがあります。目的に合わせて設定してください。
すべてのアプリケーションの設定を変更したい場合
PDF出力時のオプション設定は、 IM-FormaDesigner for Accel Platform 2013 Winter (8.0.5) 以降で設定できます。 IM-FormaDesigner for Accel Platform 2013 Winter (8.0.5) 以降でない場合には、アップデートしてください。アップデートを行った後、PDFが適切な倍率で出力されるよう、オプションを設定してください。詳しくは下記ドキュメントを参照してください。IM-FormaDesigner for Accel Platform 2013 Winter (8.0.5) 以前、または特定のアプリケーションのみ設定を変更したい場合
プログラムでPDF出力処理を実装してください。実装したプログラム内で、PDF出力のオプションを設定することができます。実装したプログラム内でPDFが適切な倍率で出力されるよう、オプションを設定してください。詳しくは下記ドキュメントを参照してください。コラム
使用可能なオプションの一覧については、バージョンごとの wkhtmltopdf のドキュメントをご確認ください。
4.3.5. 縦方向に改ページが発生する場合、最下部の要素が切れて表示される¶
対象バージョン¶
IM-FormaDesigner Version 7.2 の場合
- 対象外
IM-FormaDesigner for Accel Platform の場合
- バージョンに関わらず発生します。
条件¶
以下のバージョンの wkhtmltopdf を使用する。
- 0.12.0
- 0.12.1
以下のアプリケーション種別・BIS作成種類の場合に発生します。
- アプリケーション種別「標準」
- アプリケーション種別「IM-Workflow」
- BIS作成種類「BISフロー」
- BIS作成種類「ワークフロー」
解決方法¶
wkhtmltopdf 0.12.2 にアップデートしてください。
回避方法¶
改ページが発生しないよう、PDF出力のためのオプションを設定します。使用するオプションについては、使用可能なオプションの中から目的に合わせて選択してください。オプションの指定方法は以下の2通りがあります。目的に合わせて選択してください。
すべてのアプリケーションの設定を変更したい場合
PDF出力時のオプション設定は、 IM-FormaDesigner for Accel Platform 2013 Winter (8.0.5) 以降で設定できます。 IM-FormaDesigner for Accel Platform 2013 Winter (8.0.5) 以降でない場合には、アップデートしてください。アップデートを行った後、改ページが発生しないよう、適切なオプションを設定してください。詳しくは下記ドキュメントを参照してください。特定のアプリケーションのみ設定を変更したい場合
プログラムでPDF出力処理を実装してください。実装したプログラム内で、PDF出力のオプションを設定することができます。改ページが発生しないよう、適切なオプションを設定してください。詳しくは下記ドキュメントを参照してください。コラム
使用可能なオプションの一覧については、バージョンごとの wkhtmltopdf のドキュメントをご確認ください。
4.3.6. 改ページが発生する場合、改ページ周辺の要素が切れて表示される¶
対象バージョン¶
IM-FormaDesigner Version 7.2 の場合
- バージョンに関わらず発生します。
IM-FormaDesigner for Accel Platform の場合
- バージョンに関わらず発生します。
条件¶
- 出力したPDF内で改ページが発生する場合に、事象が再現します。
以下のアプリケーション種別・BIS作成種類の場合に発生します。
- アプリケーション種別「標準」
- アプリケーション種別「IM-Workflow」
- BIS作成種類「BISフロー」
- BIS作成種類「ワークフロー」
原因¶
製品仕様に起因した事象です。PDF出力機能では、wkhtmltopdfというWebkitベースのブラウザエンジンによるブラウザ印刷を利用しています。IM-FormaDesignerで作成した画面は絶対座標にてレイアウトされており、ブラウザ印刷した際に任意の位置で改ページさせることはできず、ブラウザエンジン側で改ページ位置が決定されます。そのため、PDF出力時に意図しない位置で改ページが発生し、レイアウトが崩れてしまうケースがあります。
解決方法¶
ありません。
回避方法¶
改ページが発生しないよう、PDF出力のためのオプションを設定します。使用するオプションについては、使用可能なオプションの中から目的に合わせて選択してください。オプションの指定方法は以下の2通りがあります。目的に合わせて選択してください。
すべてのアプリケーションの設定を変更したい場合
PDF出力時のオプション設定は、 IM-FormaDesigner for Accel Platform 2013 Winter (8.0.5) 以降で設定できます。 IM-FormaDesigner for Accel Platform 2013 Winter (8.0.5) 以降でない場合には、アップデートしてください。アップデートを行った後、改ページが発生しないよう、適切なオプションを設定してください。詳しくは下記ドキュメントを参照してください。特定のアプリケーションのみ設定を変更したい場合
プログラムでPDF出力処理を実装してください。実装したプログラム内で、PDF出力のオプションを設定することができます。改ページが発生しないよう、適切なオプションを設定してください。詳しくは下記ドキュメントを参照してください。コラム
使用可能なオプションの一覧については、バージョンごとの wkhtmltopdf のドキュメントをご確認ください。
4.3.7. 出力されるPDFのレイアウトが崩れる、または出力されない¶
対象バージョン¶
IM-FormaDesigner Version 7.2 の場合
- バージョンに関わらず発生します。
IM-FormaDesigner for Accel Platform の場合
- バージョンに関わらず発生します。
条件¶
明細テーブルや、データソース定義と連携するアイテム(例:一覧選択、セレクトボックス)などの、 JavaScript による動的なHTMLの生成を行う画面アイテムを配置しているアプリケーションを、出力しようとする。以下のアプリケーション種別・BIS作成種類の場合に発生します。
- アプリケーション種別「標準」
- アプリケーション種別「IM-Workflow」
- BIS作成種類「BISフロー」
- BIS作成種類「ワークフロー」
原因¶
wkhtmltopdf によるPDF出力では、通常のブラウザから IM-FormaDesigner で作成されたアプリケーションを表示するときと同じく、動的なHTMLの生成のために JavaScript が実行されます。明細テーブルや、データソース定義と連携するアイテム(例:一覧選択、セレクトボックス)などの、 JavaScript による動的なHTMLの生成を行う画面アイテムによる画面生成には、ある程度の時間を要します。そのため、それらのアイテムの配置次第では、標準のPDF出力の待ち時間の設定では画面生成が完了せず、PDF出力に失敗する場合があります。以下の要件で対応を行っています。
IM-FormaDesigner Version 7.2 の場合
- 対象外
IM-FormaDesigner for Accel Platform の場合
- 要件 #12365 PDF出力時に利用するwkhtmltopdfコマンドを実行する際のオプションを設定できるようにします
解決方法¶
PDF出力の「画面表示時の処理の待ち時間」に関するオプションを、画面アイテムによる動的なHTMLの生成が完了するために必要な時間に合わせて設定してください。
IM-FormaDesigner Version 7.2 の場合
プログラムでPDF出力処理を実装してください。実装したプログラム内で、PDF出力のオプションを設定することができます。以下のオプションに、画面アイテムによる動的なHTMLの生成が完了するために必要な時間を設定してください。
wkhtmltopdf 0.9.9 の場合
- redirect-delay
wkhtmltopdf 0.10.0 rc1 以降の場合
- javascript-delay
詳しくは下記ドキュメントを参照してください。IM-FormaDesigner for Accel Platform の場合
オプションの設定方法は以下の2通りがあります。目的に合わせて選択してください。
すべてのアプリケーションの設定を変更したい場合
PDF出力時のオプション設定は、 IM-FormaDesigner for Accel Platform 2013 Winter (8.0.5) 以降で設定できます。 IM-FormaDesigner for Accel Platform 2013 Winter (8.0.5) 以降でない場合には、アップデートしてください。アップデートを適用した後、以下のオプションに、画面アイテムによる動的なHTMLの生成が完了するために必要な時間を設定してください。
wkhtmltopdf 0.9.9 の場合
- redirect-delay
wkhtmltopdf 0.10.0 rc1 以降の場合
- javascript-delay
詳しくは下記ドキュメントを参照してください。IM-FormaDesigner for Accel Platform 2013 Winter (8.0.5) 以前、または特定のアプリケーションのみ設定を変更したい場合
プログラムでPDF出力処理を実装してください。実装したプログラム内で、PDF出力のオプションを設定することができます。以下のオプションに、画面アイテムによる動的なHTMLの生成が完了するために必要な時間を設定してください。
wkhtmltopdf 0.9.9 の場合
- redirect-delay
wkhtmltopdf 0.10.0 rc1 以降の場合
- javascript-delay
詳しくは下記ドキュメントを参照してください。コラム
使用可能なオプションの一覧については、バージョンごとの wkhtmltopdf のドキュメントをご確認ください。