在页面和请求中分别使用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地址, ...
随机推荐
- LightBGM之Dataset
最近使用了LightBGM的Dataset,记录一下: 1.说明: classlightgbm.Dataset(data, label=None, reference=None, weight=Non ...
- 2014年web页面上的3D新产品介绍
地图对于数据的可视化展现有独到的显示方式,首先是底图.地图提供了一个定位的蓝图,让用例数据可以有参考的背景,因此底图通常是线画矢量图或者影像图.互联网上提供这种服务的基本以Google风格,也就是Ti ...
- ManyToMany参数(through,db_constraint)
through : 指定自己写好的第三张表,我们可以给第三张表添加字段了(告诉Django不用建第三张表了,我们都给他配好了) class Book(models.Model): name=model ...
- mysql 数据操作 单表查询 练习
查出所有员工的名字,薪资,格式为 <名字:egon>,<薪资:3000> mysql> select concat('<姓名:',name,'>') as n ...
- oracle 安装,登陆,配置
1:查看: https://blog.csdn.net/u014177640/article/details/71023380/ 2:登陆 https://zhidao.baidu.com/ques ...
- java基础语法this关键字
未经允许,禁止转载!!!!!!!! this关键词在java里面很重要,想了解清楚this就必须对 类:对象:this:成员变量:方法:构造方法 都了解清楚. 一.使用this调用本类中的成员变量( ...
- ReactNative Ios报出 'React/RCTBundleURLProvider.h' file not found错误
我在创建react-native项目时 npm了一个第三方库 结果一打开 xcode 竟然报错 React/RCTBundleURLProvider.h' file not found: 然后 我 ...
- Java实现最基本的集中排序
排序是一个很重要的概念,现实生活中,我们需要为很多的东西排序.下面我们就介绍几种简单的排序的方法和最基本的思想. 1.冒泡排序:假设一个数组中有10个数字,从左边开始
- java基础类型中的char和byte的辨析及Unicode编码和UTF-8的区别
在平常工作中使用到char和byte的场景不多,但是如果项目中使用到IO流操作时,则必定会涉及到这两个类型,下面让我们一起来回顾一下这两个类型吧. char和byte的对比 byte byte 字节, ...
- VS2010/MFC编程入门之十七(对话框:文件对话框)
上一讲鸡啄米介绍的是消息对话框,本节讲解文件对话框.文件对话框也是很常用的一类对话框. 文件对话框的分类 文件对话框分为打开文件对话框和保存文件对话框,相信大家在Windows系统中经常见 ...