如何在纯文本输出格式 (.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();
}
}
}
如您所见,只会打印 JRPrintText。 protected void exportText(JRPrintText) 方法对 Boxes 一无所知。您可以将它与 JRRtfExporter.exportText(JRPrintText) 方法的来源进行比较。
解决方案
- 你可以尝试使用rtf输出格式(JRRtfExporter)
- 另一种思路(不优雅,有点难看)是用staticText或textField(带条件或不带条件)模拟边框。
- 你可以尝试设置net.sf.jasperreports.export.text.line.separator属性。例如,您可以设置值:

_________________________________________________________

。开头是\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="
_________________________________________________________
"/>
- 使用 JRCsvExporter 和 net.sf.jasperreports.csv.field.delimiter, net.sf.jasperreports.csv.record.delimiter 属性
可以使输出看起来更好
我的问题是,当我尝试将 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();
}
}
}
如您所见,只会打印 JRPrintText。 protected void exportText(JRPrintText) 方法对 Boxes 一无所知。您可以将它与 JRRtfExporter.exportText(JRPrintText) 方法的来源进行比较。
解决方案
- 你可以尝试使用rtf输出格式(JRRtfExporter)
- 另一种思路(不优雅,有点难看)是用staticText或textField(带条件或不带条件)模拟边框。
- 你可以尝试设置net.sf.jasperreports.export.text.line.separator属性。例如,您可以设置值:

_________________________________________________________

。开头是\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="
_________________________________________________________
"/>
- 使用 JRCsvExporter 和 net.sf.jasperreports.csv.field.delimiter, net.sf.jasperreports.csv.record.delimiter 属性 可以使输出看起来更好