在页面和请求中分别使用XML Publisher生成PDF报表且自动上传至附件服务器
两个技术要点:
1.使用TemplateHelper.processTemplate方法生成目标PDF的InputStream流,再使用ftp中上传流的方法将其上传至附件服务器。
2.在请求中调用AM。
其中最重要的方法便是在请求中调用AM。
SourcingPrintingAMImpl am = (SourcingPrintingAMImpl)getSourcingAppModule(cpContext);
OADBTransaction trans = am.getOADBTransaction();
protected OAApplicationModuleImpl getSourcingAppModule(CpContext cpcontext)
{
OAApplicationModuleImpl oaapplicationmoduleimpl =
(OAApplicationModuleImpl)
OAApplicationModuleFactory.createRootOAApplicationModule(
cpcontext, sourcingPrintingAmName);
return oaapplicationmoduleimpl;
}//End of getSourcingAppModule(CpContext)
一、在页面的CO中直接生成XML Publisher生成报表且自动上传至附件服务器
/**
* @param pageContext
* @param webBean
* @return
* 此方法中利用TemplateHelper.processTemplate生成了附件的流文件,
* Map 函数返回附件流文件,附件名称,以及附件大小
*/
public Map generatePreviewPDFFile(OAPageContext pageContext, OAWebBean webBean){
Map map = new java.util.HashMap(); String mappingId =
(String)pageContext.getTransactionValue("mappingId");
String suppCateMappingId =
pageContext.getParameter("CuxSuppCateMappingId"); LogUtil.of("generatePreviewPDFFile mappingId= "+mappingId+" suppCateMappingId="+suppCateMappingId,pageContext).print(pageContext); CLOB xmlClob =this.getSuppRegXMLClob(pageContext, webBean, mappingId, suppCateMappingId);
String fileName = "新供应商注册审核报告_"; try { Reader inputReader = xmlClob.getCharacterStream();
ByteArrayOutputStream pdfFile = new ByteArrayOutputStream();
OADBTransactionImpl oaTrans =
(OADBTransactionImpl)pageContext.getApplicationModule(webBean).getOADBTransaction();
String templateName = "CUX_NEW_SUPP_REG_APPR_RPT";
TemplateHelper.processTemplate(oaTrans.getAppsContext(), "CUX",
templateName,
oaTrans.getUserLocale().getLanguage(),
oaTrans.getUserLocale().getCountry(),
inputReader,
TemplateHelper.OUTPUT_TYPE_PDF,
null, pdfFile); byte[] b = pdfFile.toByteArray(); InputStream input =
new ByteArrayInputStream(pdfFile.toByteArray()); String ftpFileName = fileName + suppCateMappingId + ".pdf"; map.put("ftpInputStream",input);
map.put("ftpFileName",ftpFileName);
map.put("ftpFileLength",String.valueOf(b.length)); previewPDFStream = input;
previewPDFFileName = ftpFileName;
previewPDFFileLength = String.valueOf(b.length); pdfFile.flush();
pdfFile.close(); } catch (Exception e) {
throw new OAException("generatePreviewPDFFile Error", OAException.ERROR);
}
return map;
}
只要得到附件的流文件之后,一切的操作就变得简单了,使用ftp上传附件的方法上传此流文件即可。
注意:
// 命名文件,将文件名编码转为标准编码,否则中文文件名上载后为乱码文件名
// TelnetOutputStream os = ftpClient.put(fileName);
TelnetOutputStream os = null;
os = ftpClient.put(new String(fileName.getBytes("GBK"), "ISO-8859-1"));
二、在请求的代码中中直接生成XML Publisher生成报表且自动上传至附件服务器
和页面中的generatePDFFile方法大致相同,唯一不同的就是在请求中不能直接调用AM,需要使用前文的方法初始化一个AM。
在页面和请求中分别使用XML Publisher生成PDF报表且自动上传至附件服务器的更多相关文章
- OAF 中下载使用XML Publisher下载PDF附件
OAF doesn't readily expose the Controller Servlet's HttpRequest and HttpResponse objects so you need ...
- 使用XML Publisher导出PDF报表
生成XML数据源有两种方式. 一种是使用存储过程,返回一个clob作为xml数据源. 另一种是直接使用VO中的数据生成xml数据源. 方法一参考: Oracle XML Publisher技巧集锦 O ...
- 使用JSP页面生成PDF报表
转自:http://developer.51cto.com/art/200907/134261.htm 1.iText简介 iText是一个开放源码的Java类库,可以用来方便地生成PDF文件.大家通 ...
- 在spring boot 中使用itext和itextrender生成pdf文件
转载请注明出处 https://www.cnblogs.com/majianming/p/9539376.html 项目中需要对订单生成pdf文件,在第一版本其实已经有了比较满意的pdf文档,但是还是 ...
- 在请求中使用XML Publisher生成文件报错
在页面上使用按钮生成该文件不报错,但是使用请求就报错. 错误内容如下 Error : No corresponding LOB data found :SELECT L.FILE_DATA FILE_ ...
- HTTP请求中的form data,request payload,query string parameters以及在node服务器中如何接收这些参数
http://www.cnblogs.com/hsp-blog/p/5919877.html 今天,在工作(倒腾微信小程序)的时候,发现发送post请求到node后台服务器接收不到前端传来的参数.其实 ...
- freemark+ITextRenderer 生成PDF,设置pdf的页面大小
在html中添加样式,仅生成pdf是生效,浏览器展示时是不会生效的: <style> @page{ size : 200mm 300 mm; } </style>
- C# 动态创建SQL数据库(二) 在.net core web项目中生成二维码 后台Post/Get 请求接口 方式 WebForm 页面ajax 请求后台页面 方法 实现输入框小数多 自动进位展示,编辑时实际值不变 快速掌握Gif动态图实现代码 C#处理和对接HTTP接口请求
C# 动态创建SQL数据库(二) 使用Entity Framework 创建数据库与表 前面文章有说到使用SQL语句动态创建数据库与数据表,这次直接使用Entriy Framwork 的ORM对象关 ...
- Http请求中POST与GET的区别——前端面试
一.原理区别 Http定义了与服务器交互的方法,其中最基本的四种是:GET,POST,PUT,DELETE,正对应着对资源的查,改,增,删.URL的全称是资源描述符,我们可以这样认为,一个URL地址, ...
随机推荐
- ubuntu16.04下安装pcl点云库
安装依赖项 sudo apt-get update sudo apt-get install git build-essential linux-libc-dev sudo apt-get insta ...
- oracle goldengate技术架构-简单试验(全)
一 GoldenGate简介 Oracle Golden Gate软件是一种基于日志的结构化数据复制备份软件,它通过解析源 数据库在线日志或归档日志获得数据的增量变化,再将这些变化应用到目标数据库, ...
- code sandbox & mlflow
https://codesandbox.io/ https://www.jianshu.com/p/d70b25bf3cf4 https://my.oschina.net/u/2306127/blog ...
- python三层架构
conf/setting(配置文件) 一般是对utility进行相关设置 index(主文件) main函数触发某个对象的业务逻辑方法 model(数据库) admin 是对数据库的操 ...
- Silverlight中ListBox的数据绑定
在Silverlight中ListBox是一个非常强大的控件.总结下ListBox的绑定数据的方式. 首先,新建一个Book类, public class Book { public string B ...
- capistranorb
远程服务器自动部署工具 https://capistranorb.com/
- 32Sql数据库的插入
上一节讲了数据库的连接,本例直接将数据库的插入操作,重点还是QSqlQuery类 QSqlQuery query; //新建二维表 query.exec("CREATE TABLE stud ...
- cocos2dx 3.x 拼图小游戏
.h #define IMAGE_MAX 2 //图片的个数.. //图片结构体 属性 struct IMAGE_DATA { cocos2d::Sprite *m_pImage; bool m_bO ...
- ubuntu下 adb devices找不到devices
不同手机用数据线与ubuntu连接后,执行adb devices,好多出现找不到devices的情况. 这里解决措施: 1. 执行lsusb(连接手机前与后) 找到显示内容的差异项: root@loc ...
- vw 、vh、vmin 、vmax
转自:https://blog.csdn.net/romantic_love/article/details/80868909 vw.vh.vmin.vmax是一种视窗单位,也是相对单位. 它相对的不 ...