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中控制器的动态注册与卸载》在项目开发中,通过动态注册和卸载控制器功能,可以根据业务场景和项目需要实现功能的动态增加、删除,提高系统的灵活性和可扩展性,下面我们就来看看Sp... 目录项目结构1. 创建 Spring Boot 启动类2. 创建一个测试控制器3. 创建动态控制器注

python删除xml中的w:ascii属性的步骤

《python删除xml中的w:ascii属性的步骤》使用xml.etree.ElementTree删除WordXML中w:ascii属性,需注册命名空间并定位rFonts元素,通过del操作删除属... 可以使用python的XML.etree.ElementTree模块通过以下步骤删除XML中的w:as

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

XML重复查询一条Sql语句的解决方法

《XML重复查询一条Sql语句的解决方法》文章分析了XML重复查询与日志失效问题,指出因DTO缺少@Data注解导致日志无法格式化、空指针风险及参数穿透,进而引发性能灾难,解决方案为在Controll... 目录一、核心问题:从SQL重复执行到日志失效二、根因剖析:DTO断裂引发的级联故障三、解决方案:修复

Oracle 数据库数据操作如何精通 INSERT, UPDATE, DELETE

《Oracle数据库数据操作如何精通INSERT,UPDATE,DELETE》在Oracle数据库中,对表内数据进行增加、修改和删除操作是通过数据操作语言来完成的,下面给大家介绍Oracle数... 目录思维导图一、插入数据 (INSERT)1.1 插入单行数据,指定所有列的值语法:1.2 插入单行数据,指

Python中图片与PDF识别文本(OCR)的全面指南

《Python中图片与PDF识别文本(OCR)的全面指南》在数据爆炸时代,80%的企业数据以非结构化形式存在,其中PDF和图像是最主要的载体,本文将深入探索Python中OCR技术如何将这些数字纸张转... 目录一、OCR技术核心原理二、python图像识别四大工具库1. Pytesseract - 经典O

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.

C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式

《C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式》Markdown凭借简洁的语法、优良的可读性,以及对版本控制系统的高度兼容性,逐渐成为最受欢迎的文档格式... 目录为什么要将文档转换为 Markdown 格式使用工具将 Word 文档转换为 Markdown(.