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

相关文章

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

Java高效实现Word转PDF的完整指南

《Java高效实现Word转PDF的完整指南》这篇文章主要为大家详细介绍了如何用Spire.DocforJava库实现Word到PDF文档的快速转换,并解析其转换选项的灵活配置技巧,希望对大家有所帮助... 目录方法一:三步实现核心功能方法二:高级选项配置性能优化建议方法补充ASPose 实现方案Libre

Python使用python-pptx自动化操作和生成PPT

《Python使用python-pptx自动化操作和生成PPT》这篇文章主要为大家详细介绍了如何使用python-pptx库实现PPT自动化,并提供实用的代码示例和应用场景,感兴趣的小伙伴可以跟随小编... 目录使用python-pptx操作PPT文档安装python-pptx基础概念创建新的PPT文档查看