我使用Oracle Publisher解决方案进行打印,我在共享组件中为它们编写了oracle apex报告和查询,这与通常的打印配置(Oracle Publisher解决方案)唯一不同的配置是保留RTF布局文件不是在顶点本身中,而是在我自己创建的表中。现在我遇到了一个问题,我不知道是什么原因造成的。当我想将报告打印为pdf格式时,会看到错误“无效的lob定位器”。现在我有一个线索是,如果我在APEX中上传RTF文件,一切正常,并且打印的pdf看起来还可以,但是如果我在报告查询中选择“使用通用报告布局”,那么应用程序过程中的代码将得到从数据库的布局中,我看到“无效的lob定位符”错误。
问题不在桌子上,因为我已经检查了数千次。 因此,可能导致此问题的因素是连接到DB并获取布局然后发送打印命令的PLSQL应用程序过程代码。
这是代码:
declare
l_file_as_clob CLOB ;
l_layout BLOB;
l_asdsad CLOB;
l_dest_offset integer := 1;
l_src_offset integer := 1;
l_lang_context integer := dbms_lob.default_lang_ctx;
l_warning integer;
BEGIN
select layout into l_layout
from B5REPORTS
where code = :APP_PRINT_LAYOUT_CODE
AND APEX_APP_ALIAS = :APP_ALIAS
AND APEX_PAGE_ID = :APP_PAGE_ID ;
dbms_lob.createtemporary(lob_loc => l_file_as_clob , cache => false);
dbms_lob.converttoclob(
dest_lob => l_file_as_clob
, src_blob => l_layout
, amount => dbms_lob.lobmaxsize
, dest_offset => l_dest_offset
, src_offset => l_src_offset
, blob_csid => dbms_lob.default_csid
, lang_context => l_lang_context
, warning => l_warning);
l_file_as_clob:= replace(l_file_as_clob,'+','%2B');
l_file_as_clob:= replace(l_file_as_clob,'/','%2F');
l_file_as_clob:= replace(l_file_as_clob,'=','%3D');
--signature 2
apex_util.download_print_document (
p_file_name => :APP_PRINT_NAME
, p_content_disposition => 'inline'
, p_application_id => :APP_ID
, p_report_query_name => :APP_PRINT_NAME
, p_report_layout => l_file_as_clob
, p_report_layout_type => 'rtf'
, p_document_format => 'PDF'
);
END;
这也是存储BLOBS(RTF布局文件)的表:
ALTER TABLE FARA.B5REPORTS
ADD CONSTRAINT B5REPORTS_UK1 UNIQUE
(
CODE
)
USING INDEX B5REPORTS_UK1
ENABLEALTER TABLE FARA.B5REPORTS
ADD CONSTRAINT B5REPORTS_PK PRIMARY KEY
(
ID
)
USING INDEX B5REPORTS_PK
ENABLECREATE UNIQUE INDEX FARA.B5REPORTS_PK ON FARA.B5REPORTS (ID ASC)
LOGGING
TABLESPACE APEX
PCTFREE 10
INITRANS 2
STORAGE
(
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS UNLIMITED
BUFFER_POOL DEFAULT
)
NOPARALLEL
CREATE UNIQUE INDEX FARA.B5REPORTS_UK1 ON FARA.B5REPORTS (CODE ASC)
LOGGING
TABLESPACE APEX
PCTFREE 10
INITRANS 2
STORAGE
(
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS UNLIMITED
BUFFER_POOL DEFAULT
)
NOPARALLELCREATE TABLE FARA.B5REPORTS
(
ID NUMBER NOT NULL
, CODE VARCHAR2(100 BYTE) NOT NULL
, LAYOUT BLOB NOT NULL
, DESCRIPTION VARCHAR2(4000 BYTE) NOT NULL
, NAME VARCHAR2(4000 BYTE) NOT NULL
, APEX_APP_ALIAS VARCHAR2(100 BYTE) NOT NULL
, APEX_PAGE_ID NUMBER NOT NULL
)
LOGGING
TABLESPACE APEX
PCTFREE 10
INITRANS 1
STORAGE
(
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS UNLIMITED
BUFFER_POOL DEFAULT
)
NOCOMPRESS
NOPARALLEL
LOB (LAYOUT) STORE AS SYS_LOB0000103483C00003$$
(
ENABLE STORAGE IN ROW
CHUNK 8192
NOCACHE
LOGGING
)
我还将添加一些示例数据的图片。