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;