xml publisher笔记

本文介绍了一种从数据库中动态获取并打印图片的方法。利用Oracle PL/SQL过程将BLOB类型的数据转换为CLOB,并通过XML转换语言(XSL)在Word模板中显示。此过程涉及数据库查询、BLOB到CLOB的转换、以及使用特定函数处理每3000字节进行打印。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模板文件对应的数据库表:

select * from xdo_lobs 

动态打印图片

word模板中:

<?if:SHOW_TYPE=0?><fo:instream-foreign-object content-type="image/gif"><xsl:value-of select="FILE_DATA"/></fo:instream-foreign-object><?end if?>

主要是这段:<fo:instream-foreign-object content-type="image/gif"><xsl:value-of select="FILE_DATA"/></fo:instream-foreign-object>

 

图片在数据库中是以BLOB存储的,查出后需转换成CLOB

FUNCTION Get_Pictrue RETURN CLOB IS
l_Result CLOB;
l_Blob BLOB;
BEGIN
BEGIN
SELECT Fl.File_Data
INTO l_Blob
FROM Fnd_Attached_Documents Fad,
Fnd_Documents Fd,
Fnd_Lobs Fl,
Fnd_Document_Categories_Tl Dct
WHERE Dct.Category_Id = Fd.Category_Id
AND Dct.Language = Userenv('LANG')
AND Fl.File_Id = Fd.Media_Id
AND Fad.Document_Id = Fd.Document_Id
AND Fad.Entity_Name = 'CUX.CUX_QA_REPORT_HEADERS'
AND Fad.Pk1_Value = Gn_Header_Id
AND Dct.User_Name = 'QA:图片';
EXCEPTION
WHEN OTHERS THEN
RETURN NULL;
END;

Dbms_Lob.Createtemporary(Lob_Loc => l_Result, Cache => FALSE, Dur => 0);
Wf_Mail_Util.Encodeblob(l_Blob, l_Result);
RETURN(l_Result);
END Get_Pictrue;

打印时分行打印,3000字节一行

PROCEDURE Print_Picture IS
Ln_Start NUMBER;
Ln_Count NUMBER;
Lv_Show VARCHAR2(4000);
BEGIN
Ln_Count := 0;
Fnd_File.Put(Fnd_File.Output, '<FILE_DATA>');
LOOP
Ln_Start := Ln_Count * 3000 + 1;
Ln_Count := Ln_Count + 1;
SELECT Substr(Get_Pictrue, Ln_Start, 3000) File_Data
INTO Lv_Show
FROM Dual;
EXIT WHEN Lv_Show IS NULL;
Fnd_File.Put(Fnd_File.Output, Lv_Show);
END LOOP;
Fnd_File.Put(Fnd_File.Output, '</FILE_DATA>');
END Print_Picture;

注意:动态打印图片比较特殊,一定要把相应的窗体域放到For Each标签里面 (for-each HEMP),否则会报错:“java.lang.StringIndexOutOfBoundsException: String index out of range: -1”

 

“java.lang.StringIndexOutOfBoundsException: String index out of range: -1”这个错误的原因有两个:

1,图片的窗体域没放到for each标签里

2,如果是以下版本的话就需要打补丁。oracle官方的说法见 文档 ID 1251964.1

$COMMON_TOP/java/classes/oracle/dss/graph/version.txt

which will have something like the following:

ComponentBuildVersion=3.1.1.7.1
ComponentBuildMode=nondebug
Copyright=Copyright � 2001, 2008, Oracle.  All rights reserved.
ComponentNumber=na
ReleaseDescription=BI Beans 3.1.1.x

The fixed version is: BI 3.1.1.7.2

 

转载于:https://www.cnblogs.com/gary-bao/p/5015327.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值