Some Oracle APEX customers prefer to view embedded PDF documents directly within a page in their application rather than having to download.
My current case study allows users to upload a .pdf document, save directly to a file location (rather than a DB Column) and view same embedded on the current page as shown above.
Steps taken:
1. Identify the physical location of the #IMAGE_PREFIX# (/i/), in my case it is/u01/userhome/oracle/apex/images
2. Create a folder called 'docs' in the directory logged in as user SYS
3. Create a database directory called MY_DOCS
5. Create a PL/SQL Page Process to be fired after user clicks on the save button
Header Text - < div style="overflow: auto; height: 700px;" >
Footer Text - < /div >
My current case study allows users to upload a .pdf document, save directly to a file location (rather than a DB Column) and view same embedded on the current page as shown above.
Steps taken:
1. Identify the physical location of the #IMAGE_PREFIX# (/i/), in my case it is/u01/userhome/oracle/apex/images
2. Create a folder called 'docs' in the directory logged in as user SYS
$ cd /u01/userhome/oracle/apex/images $ mkdir docs
3. Create a database directory called MY_DOCS
create or replace directory MY_DOCS as '/u01/userhome/oracle/apex/images/docs';
Directory MY_DOCS created.
grant read,write on directory MY_DOCS to {WORKSPACE_SCHEMA};
Grant succeeded.
4. Create a page within your application with following create page items PXX_FIRST_NAME (Textfield),
PXX_LAST_NAME (Textfield), PXX_UPLOAD_DOC (File Browse), PXX_FILENAME (Hidden) and a 'Save' Button for submission
declare
l_file utl_file.file_type;
l_buffer raw(32000);
l_amount binary_integer := 32000;
l_pos integer := 1;
l_blob blob;
l_blob_left number;
l_blob_length number;
l_file_name varchar2(50);
l_directory varchar2(50):='MY_DOCS';
l_seq number;
begin
APEX_COLLECTION.CREATE_OR_TRUNCATE_COLLECTION(
p_collection_name => 'INFO');
select blob_content,filename,filename
into l_blob,l_file_name,:P100_FILENAME
from apex_application_temp_files;
l_seq := APEX_COLLECTION.ADD_MEMBER(
p_collection_name => 'INFO',
p_c001 => :P100_FIRST_NAME,
p_c002 => :P100_LAST_NAME,
p_c003 => l_file_name,
p_blob001 => l_blob );
l_blob_length := dbms_lob.getlength(l_blob);
l_blob_left := l_blob_length;
l_file := utl_file.fopen(l_directory,l_file_name,'WB', 32760);
if l_blob_length < 32760 then
utl_file.put_raw(l_file,l_blob);
utl_file.fflush(l_file);
else
l_pos := 1;
while l_pos < l_blob_length
loop
dbms_lob.read(l_blob,l_amount,l_pos,l_buffer);
utl_file.put_raw(l_file,l_buffer);
utl_file.fflush(l_file);
-- set the start position for the next cut
l_pos := l_pos + l_amount;
-- set the end position if less than 32000 bytes
l_blob_left := l_blob_left - l_amount;
if l_blob_left < 32000 then
l_amount := l_blob_left;
end if;
end loop;
end if;
utl_file.fclose(l_file);
exception
when others then
-- close the file if something goes wrong.
if utl_file.is_open(l_file) then
utl_file.fclose(l_file);
end if;
raise;
end;
6. On the 'Uploaded Document' static content region add below to the source
< embed height="800%" src="#IMAGE_PREFIX#docs/&P100_FILENAME." type="application/pdf" width="100%" > < /embed >< /span >
Header Text - < div style="overflow: auto; height: 700px;" >
Footer Text - < /div >
7. Ensure 'After Processing' redirects to the current page
I hope someone out there finds this helpful!
Comments
Post a Comment