可以下载时 PDFViewer 不显示内容
The PDFViewer is not showing the content while downloading is possible
我正在尝试使用 PDFViewer in a SAPUI5 application, something like the following sample app。
当我尝试在 Google chrome 中使用此组件时,它不会加载数据,但是可以下载 PDF 本身,它显示 url 有效并且文件可用。
如果我在 Firefox 或 IE 中打开它,它可以正常工作!
我与 SAP OpenUI5 团队讨论了问题 here。最后我们了解到问题不在于 UI5 库,而问题出在我们的 ABAP 实现内部,该实现为来自 SAP 文档管理系统 (SAP DMS) 的 PDF 文件提供下载 link。
我们终于找到了解决方案,并发现了为什么我们尝试从 SAP DMS 显示的 pdf 是可下载的,但在 Chrome 或 Firefox 等现代浏览器的 pdf 查看器中却没有显示。
解决方案的来源可以找到here。
以下两个变化与互联网上大多数教程中可以找到的正常实现不同:
- 必须将 header 值更改为
Inline;filename=
而不是 outline;filename
。
- 调用方法
/IWBEP/IF_MGW_CONV_SRV_RUNTIME=>Set_header
设置header。
最后,我们在 SAP 系统中有以下 ABAP 代码,用于从文档管理系统 (SAP DMS) 下载文件。
"Logic for Download the files from Document Managmenet System
DATA: ls_lheader TYPE ihttpnvp,
ls_stream TYPE ty_s_media_resource,
ls_entity TYPE zgw_odata_document_file.
CONSTANTS: lc_headername TYPE string VALUE 'Content-Disposition',
lc_headervalue1 TYPE string VALUE 'inline; filename="',
lc_headervalue2 TYPE string VALUE '";'.
* "Get the name of the Entity
DATA(lv_entity_name) = io_tech_request_context->get_entity_type_name( ).
CASE lv_entity_name.
WHEN 'DocumentFile'.
DATA(lo_document_file) = NEW zcl_gw_odata_document_file( ).
lo_document_file->read_stream(
EXPORTING
it_key_tab = it_key_tab
IMPORTING
es_stream = ls_entity ).
ls_lheader-name = lc_headername.
ls_entity-file_name = escape( val = ls_entity-file_name format = cl_abap_format=>e_url ).
ls_lheader-value = lc_headervalue1 && ls_entity-file_name && lc_headervalue2 .
set_header( is_header = ls_lheader ).
ls_stream-mime_type = ls_entity-mimetype.
ls_stream-value = ls_entity-binfile.
copy_data_to_ref( EXPORTING is_data = ls_stream
CHANGING cr_data = er_stream ).
WHEN OTHERS.
ENDCASE.
我正在尝试使用 PDFViewer in a SAPUI5 application, something like the following sample app。
当我尝试在 Google chrome 中使用此组件时,它不会加载数据,但是可以下载 PDF 本身,它显示 url 有效并且文件可用。
如果我在 Firefox 或 IE 中打开它,它可以正常工作!
我与 SAP OpenUI5 团队讨论了问题 here。最后我们了解到问题不在于 UI5 库,而问题出在我们的 ABAP 实现内部,该实现为来自 SAP 文档管理系统 (SAP DMS) 的 PDF 文件提供下载 link。
我们终于找到了解决方案,并发现了为什么我们尝试从 SAP DMS 显示的 pdf 是可下载的,但在 Chrome 或 Firefox 等现代浏览器的 pdf 查看器中却没有显示。
解决方案的来源可以找到here。
以下两个变化与互联网上大多数教程中可以找到的正常实现不同:
- 必须将 header 值更改为
Inline;filename=
而不是outline;filename
。 - 调用方法
/IWBEP/IF_MGW_CONV_SRV_RUNTIME=>Set_header
设置header。
最后,我们在 SAP 系统中有以下 ABAP 代码,用于从文档管理系统 (SAP DMS) 下载文件。
"Logic for Download the files from Document Managmenet System
DATA: ls_lheader TYPE ihttpnvp,
ls_stream TYPE ty_s_media_resource,
ls_entity TYPE zgw_odata_document_file.
CONSTANTS: lc_headername TYPE string VALUE 'Content-Disposition',
lc_headervalue1 TYPE string VALUE 'inline; filename="',
lc_headervalue2 TYPE string VALUE '";'.
* "Get the name of the Entity
DATA(lv_entity_name) = io_tech_request_context->get_entity_type_name( ).
CASE lv_entity_name.
WHEN 'DocumentFile'.
DATA(lo_document_file) = NEW zcl_gw_odata_document_file( ).
lo_document_file->read_stream(
EXPORTING
it_key_tab = it_key_tab
IMPORTING
es_stream = ls_entity ).
ls_lheader-name = lc_headername.
ls_entity-file_name = escape( val = ls_entity-file_name format = cl_abap_format=>e_url ).
ls_lheader-value = lc_headervalue1 && ls_entity-file_name && lc_headervalue2 .
set_header( is_header = ls_lheader ).
ls_stream-mime_type = ls_entity-mimetype.
ls_stream-value = ls_entity-binfile.
copy_data_to_ref( EXPORTING is_data = ls_stream
CHANGING cr_data = er_stream ).
WHEN OTHERS.
ENDCASE.