0
点赞
收藏
分享

微信扫一扫

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

无愠色 2022-04-29 阅读 43

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");

举报

相关推荐

0 条评论