Oracle Apex 使用 ORDS 将 PDF 保存到数据库中?
Oracle Apex save PDF into Database with ORDS?
我们有一个函数可以将 sql 查询转换为 xml,并且在共享组件中我们有一个 xsl-fo 样式表。将两者结合起来,我们希望生成 PDF 并将它们保存到数据库中。
现在我们尝试使用打印 API 的 (APEX_UTIL.GET_PRINT_DOCUMENT) 但 PDF 已损坏并且 return 出现 401 错误(未经授权)。
我们正在使用 Apex 19.1 并作为打印选项 ORDS。
我在某处读到你不能使用那些,因为使用 ORDS PDF 仅 return 发送给客户端。
由于我对整个 PDF 打印主题还很陌生:
有没有办法将 PDF 保存到数据库中?或者这是只有付费解决方案才有的功能?我们必须使用 REST 配置任何必要的设置吗?
如果可以将 PDF 转换为 BLOB,则可以保存 PDF,但 APEX 本身无法为您提供该功能。
你是对的,“我在某处读到你不能使用那些,因为使用 ORDS,PDF 只返回给客户。”
例如,我在 Jasper Server Community 中创建了一个报告并使用 PLSQL 将其保存到数据库中
declare
l_url VARCHAR2(3000) := '//apexdevtesting.com:8081/jasperserver/rest_v2/reports/reports/Blank_Letter.pdf?STATUS=';
l_request SYS.utl_http.req;
l_response SYS.utl_http.resp;
l_download RAW(32767);
l_file BLOB;
l_mimetype VARCHAR2(50) := 'application/pdf';
l_charset VARCHAR2(50) := 'UTF8';
l_filename varchar2(50) := 'archivo_'||ARCHIVOS_CARGADOS_SEQ.nextval||'.pdf';
begin
l_request := SYS.utl_http.begin_request(l_url ||'ASSIGNED&'||'j_username=jasperadmin'||'&'||'j_password=jasperadmin' );
SYS.utl_http.set_header(l_request, 'User-Agent', 'Mozilla/5.0 (Windows NT x.y; Win64; x64; rv:10.0) Gecko/20100101 Firefox/10.0');
l_response := SYS.utl_http.get_response(l_request);
dbms_lob.createtemporary(l_file, TRUE, dbms_lob.SESSION);
LOOP
BEGIN
SYS.utl_http.read_raw(l_response, l_download);
dbms_lob.writeappend(l_file, utl_raw.LENGTH(l_download), l_download);
INSERT INTO j_test2
VALUES (SYS_GUID(),
SYSTIMESTAMP,
l_file,
l_mimetype,
l_filename);
EXCEPTION WHEN SYS.utl_http.end_of_body THEN
EXIT;
END;
END LOOP;
SYS.utl_http.end_response(l_response);
commit;
end;
我们有一个函数可以将 sql 查询转换为 xml,并且在共享组件中我们有一个 xsl-fo 样式表。将两者结合起来,我们希望生成 PDF 并将它们保存到数据库中。
现在我们尝试使用打印 API 的 (APEX_UTIL.GET_PRINT_DOCUMENT) 但 PDF 已损坏并且 return 出现 401 错误(未经授权)。
我们正在使用 Apex 19.1 并作为打印选项 ORDS。
我在某处读到你不能使用那些,因为使用 ORDS PDF 仅 return 发送给客户端。
由于我对整个 PDF 打印主题还很陌生:
有没有办法将 PDF 保存到数据库中?或者这是只有付费解决方案才有的功能?我们必须使用 REST 配置任何必要的设置吗?
如果可以将 PDF 转换为 BLOB,则可以保存 PDF,但 APEX 本身无法为您提供该功能。
你是对的,“我在某处读到你不能使用那些,因为使用 ORDS,PDF 只返回给客户。”
例如,我在 Jasper Server Community 中创建了一个报告并使用 PLSQL 将其保存到数据库中
declare
l_url VARCHAR2(3000) := '//apexdevtesting.com:8081/jasperserver/rest_v2/reports/reports/Blank_Letter.pdf?STATUS=';
l_request SYS.utl_http.req;
l_response SYS.utl_http.resp;
l_download RAW(32767);
l_file BLOB;
l_mimetype VARCHAR2(50) := 'application/pdf';
l_charset VARCHAR2(50) := 'UTF8';
l_filename varchar2(50) := 'archivo_'||ARCHIVOS_CARGADOS_SEQ.nextval||'.pdf';
begin
l_request := SYS.utl_http.begin_request(l_url ||'ASSIGNED&'||'j_username=jasperadmin'||'&'||'j_password=jasperadmin' );
SYS.utl_http.set_header(l_request, 'User-Agent', 'Mozilla/5.0 (Windows NT x.y; Win64; x64; rv:10.0) Gecko/20100101 Firefox/10.0');
l_response := SYS.utl_http.get_response(l_request);
dbms_lob.createtemporary(l_file, TRUE, dbms_lob.SESSION);
LOOP
BEGIN
SYS.utl_http.read_raw(l_response, l_download);
dbms_lob.writeappend(l_file, utl_raw.LENGTH(l_download), l_download);
INSERT INTO j_test2
VALUES (SYS_GUID(),
SYSTIMESTAMP,
l_file,
l_mimetype,
l_filename);
EXCEPTION WHEN SYS.utl_http.end_of_body THEN
EXIT;
END;
END LOOP;
SYS.utl_http.end_response(l_response);
commit;
end;