我是 Oracle-Apex 的新手。我需要帮助才能在 Oracle APEX 中显示 PDF。我有一个问题:我已将 PDF 上传到数据库中。我将 PDF 保存为数据库中的 blob。之后我在经典报告中显示了 PDF 的名称。当我点击名称时,我想查看我上传的 PDF 的预览。现在我正在寻找一种用代码显示 PDF 的方法。有人可以帮忙吗?
我需要上一个和下一个按钮。
如何在区域中显示此 PDF?这是我的页面
这是我使用APEX_APPLICATION_TEMP_FILES
. 希望这就是您想要实现的目标。https://apex.oracle.com/pls/apex/f?p=34781
用户名:demo
密码:demo
这使用了Mozilla的PDF.js项目。这是您可能需要的快速食谱。
File Browse
页面项并将存储类型设置为Table APEX_APPLICATION_TEMP_FILES
。创建一个经典报告区域并输入以下查询:
select
id
, filename
from apex_application_temp_files
where application_id = :APP_ID
添加一个虚拟列并设置 HTML 表达式:
<button type="button" class="btn-preview-pdf" data-id="#ID#">Preview</button>
创建一个区域并在源中输入以下内容:
<canvas id="preview-pane"></canvas>
创建 Click 动态操作。
一种。将选择类型设置为jQuery Selector
。
湾 输入 jQuery 选择器.btn-preview-pdf
。
Execute JavaScript Code
使用以下 JS 代码添加一个操作(查看 PDF.js 网站上的示例,了解有关代码功能的更多详细信息):
var fileId = $(this.triggeringElement).data('id');
var docUrl = 'f?p=&APP_ID.:0:&APP_SESSION.:APPLICATION_PROCESS=DOWNLOADPDF:::FILE_ID:' + fileId;
var previewPane = this.affectedElements[0];
// from PDF.js examples
pdfjsLib.getDocument(docUrl).then(function(pdf) {
var pageNumber = 1;
pdf.getPage(pageNumber).then(function(page) {
console.log('Page loaded');
var scale = 1.5;
var viewport = page.getViewport(scale);
// Prepare canvas using PDF page dimensions
var canvas = previewPane;
var context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;
// Render PDF page into canvas context
var renderContext = {
canvasContext: context,
viewport: viewport
};
var renderTask = page.render(renderContext);
renderTask.then(function () {
console.log('Page rendered');
});
})
}, function(reason) {
console.error(reason);
});
对于动作,还要设置受影响的元素:
一种。选择类型:jQuery Selector
湾 jQuery 选择器:#preview-pane
关注 Joel Kallman关于创建链接以下载文件的帖子。您将需要一个申请流程 ( DOWNLOADPDF
) 和一个申请项目 ( FILE_ID
) 申请流程的修改代码DOWNLOADPDF
如下所示:
begin
for file in (select *
from apex_application_temp_files
where id = :FILE_ID) loop
--
sys.htp.init;
sys.owa_util.mime_header( file.mime_type, FALSE );
sys.htp.p('Content-length: ' || sys.dbms_lob.getlength( file.blob_content));
sys.htp.p('Content-Disposition: attachment; filename="' || file.filename || '"' );
sys.htp.p('Cache-Control: max-age=3600'); -- tell the browser to cache for one hour, adjust as necessary
sys.owa_util.http_header_close;
sys.wpg_docload.download_file( file.blob_content );
apex_application.stop_apex_engine;
end loop;
end;
差点错过了这个。在页面属性上,将 JavaScript 文件 URL 设置为列出的任何 CDN 。例如:
//cdnjs.cloudflare.com/ajax/libs/pdf.js/2.0.550/pdf.min.js
请注意,这是一个非常基本的原型。预览只允许您查看第一页。您将需要弄清楚API,然后执行必要的操作以允许多页查看。我会让你弄清楚。
应该是这样。如果它对您不起作用,请告诉我。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句