oracle.xdo.template.FOProcessor根据xml、xsl(rtf)动态生成pdf

2023-12-11 13:20

本文主要是介绍oracle.xdo.template.FOProcessor根据xml、xsl(rtf)动态生成pdf,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.制作模板

使用Oracle_BI_Publisher

Oracle_BI_Publisher中文开发教程(创建RTF模板)

2.用xml,xsl(rtf)动态生成pdf

api文档:

FOProcessor (Oracle Fusion Middleware Java API Reference for Oracle Business Intelligence Publisher)

3.分析模板使用office插件,用32位,64位用不了:

Oracle Analytics Publisher - Downloads | Oracle Technology Network | Oracle

 

打开rtf模板

 

4.根据rtf模板构建xml


Node root = Node.getDefault();
root.addNode("_XDONFSEPARATORS",".");
root.addNode("COMPANY_NAME","公司名称");
root.addNode("ASN_HEADER_QR_CODE","公司名称");
root.addNode("ASN_NUM","公司名称");
root.addNode("SUPPLIER_NAME","公司名称");
root.addNode("SHIP_DATE","公司名称");
root.addNode("ORGANIZATION_NAME","公司名称");
root.addNode("PURCHASECONTACTOR","公司名称");
root.addNode("EXPECTED_ARRIVE_DATE","公司名称");
root.addNode("SHIP_TO_LOCATION_ADDRESS","公司名称");
root.addNode("ATTRIBUTE_VARCHAR37","公司名称");
Node asnLines = root.addNodeGroup("asnLines");
asnLines.addNode("ASN_LINE_NUM","行数据");
asnLines.addNode("DISPLAY_PO_NUM","行数据");
asnLines.addNode("DISPLAY_LINE_NUM","行数据");
asnLines.addNode("ITEM_CODE","行数据");
asnLines.addNode("ITEM_NAME","行数据");
asnLines.addNode("SHIP_QUANTITY","行数据");
asnLines.addNode("UOM_NAME","行数据");
asnLines.addNode("LOT_NUM","行数据");
asnLines.addNode("PACKAGE_QUANTITY","行数据");
asnLines.addNode("PRODUCTION_DATE","行数据");
asnLines.addNode("TANKNUMBER","行数据");
asnLines.addNode("QUANTITYTYPE","行数据");
asnLines.addNode("REMARK","行数据");
Node asnLines2 = root.addNodeGroup("asnLines");
asnLines2.addNode("ASN_LINE_NUM","行数据2");
asnLines2.addNode("DISPLAY_PO_NUM","行数据2");
asnLines2.addNode("DISPLAY_LINE_NUM","行数据");
asnLines2.addNode("ITEM_CODE","行数据");
asnLines2.addNode("ITEM_NAME","行数据");
asnLines2.addNode("SHIP_QUANTITY","行数据");
asnLines2.addNode("UOM_NAME","行数据");
asnLines2.addNode("LOT_NUM","行数据");
asnLines2.addNode("PACKAGE_QUANTITY","行数据");
asnLines2.addNode("PRODUCTION_DATE","行数据");
asnLines2.addNode("TANKNUMBER","行数据");
asnLines2.addNode("QUANTITYTYPE","行数据");
asnLines2.addNode("REMARK","行数据");
System.out.println(root.asXML());

//本地测试
public void localTest(Node node){InputStream xslByteArrayInputStream = null;try {//本地测试用到,后期删除ByteArrayOutputStream xslByteArrayOutputStream = new ByteArrayOutputStream();RTFProcessor rtfProc = new RTFProcessor("D://test.rtf");rtfProc.setOutput(xslByteArrayOutputStream);rtfProc.process();xslByteArrayInputStream = new ByteArrayInputStream(xslByteArrayOutputStream.toByteArray());InputStream xmlInputStream = generateXML(node.asXML());FOProcessor processor = new FOProcessor();processor.setData(xmlInputStream);processor.setTemplate(xslByteArrayInputStream);processor.setOutputFormat(FOProcessor.FORMAT_PDF);processor.setOutput("D://test.pdf");processor.setLocale(Locale.CHINA);processor.setConfig(getProperties());processor.generate();} catch (Exception e) {throw new CommonException(e.getMessage());}
}/*** 自定义配置* 本地测试* @return*/
public Properties getProperties() {Properties prop = new Properties();setFontProperties(prop);return prop;
}//设置pdf可以支持的字体,本地测试
public void setFontProperties(Properties prop) {String resourcePath = PdfUtil.class.getClassLoader().getResource("fonts").getPath();prop.put("font.黑体.normal.normal", "truetype." +resourcePath + "/simhei.ttf");prop.put("font.仿宋.normal.normal", "truetype." +resourcePath + "/simfang.ttf");prop.put("font.楷体.normal.normal", "truetype." +resourcePath + "/simkai.ttf");prop.put("font.宋体.normal.normal", "truetype." +resourcePath + "/simsun.ttc");
}

5.本地调试可能导出都是?乱码,原因:字体文件没找到

prop.put("font.黑体.normal.normal", "truetype.D://simhei.ttf");

这篇关于oracle.xdo.template.FOProcessor根据xml、xsl(rtf)动态生成pdf的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/480831

相关文章

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.

Spring 基于XML配置 bean管理 Bean-IOC的方法

《Spring基于XML配置bean管理Bean-IOC的方法》:本文主要介绍Spring基于XML配置bean管理Bean-IOC的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录一. spring学习的核心内容二. 基于 XML 配置 bean1. 通过类型来获取 bean2. 通过

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++