如何在纯文本输出格式 (.txt) 的记录之间画线?

How to draw lines between records for plain text output format (.txt)?

我的问题是,当我尝试将 jasperprint 导出为文本时,lines/rectangles 没有出现在 .txt 文件中,尽管它适用于 pdf 文件。

我尝试修改笔宽但没有出现。

我的代码是:

JRDesignLine ltest = new JRDesignLine();
ltest.setBackcolor(Color.black);
ltest.setForecolor(Color.black);
ltest.setX(10);
ltest.setY(200);
ltest.setMode(JRDesignStaticText.MODE_OPAQUE);
ltest.setWidth(500);
ltest.setHeight(10);
ltest.setPen(JRDesignLine.FILL_SOLID);
bandHeader.addElement(ltest);

有什么建议吗

你问的是plain text format,很简单。

问题

JRTextExporter 正在跳过 JRLine 元素并且不绘制边框 (JRLineBox)。

JRTextExporter的片段:

protected void exportElements(List<JRPrintElement> elements) {
    for (int i = 0; i < elements.size(); i++) {
        Object element = elements.get(i);
        if (element instanceof JRPrintText) {
            exportText((JRPrintText) element);
        } else if (element instanceof JRPrintFrame) {
            JRPrintFrame frame = (JRPrintFrame) element;
            setFrameElementsOffset(frame, false);
            try {
                exportElements(frame.getElements());
            } finally {
                restoreElementOffsets();
            }
        }
    }

如您所见,只会打印 JRPrintTextprotected void exportText(JRPrintText) 方法对 Boxes 一无所知。您可以将它与 JRRtfExporter.exportText(JRPrintText) 方法的来源进行比较。

解决方案

  • 你可以尝试使用rtf输出格式(JRRtfExporter)
  • 另一种思路(不优雅,有点难看)是用staticTexttextField(带条件或不带条件)模拟边框。
  • 你可以尝试设置net.sf.jasperreports.export.text.line.separator属性。例如,您可以设置值:&#xD;&#xA;_________________________________________________________&#xD;&#xA;。开头是\r\n,行尾是一些下划线和\r\n。报告属性可以是这样的:
<property name="net.sf.jasperreports.export.text.page.height" value="66"/>
<property name="net.sf.jasperreports.export.text.page.width" value="94"/>
<property name="net.sf.jasperreports.export.text.line.separator" value="&#xD;&#xA;_________________________________________________________&#xD;&#xA;"/>