如何在图像周围环绕文字?
How to wrap text around an image?
我正在尝试将我的文本环绕在图像周围。
我需要创建的结构如下图所示:
这是我试过的
我试过使用 table 但没有成功。我很难将文本字段用作 html 并将图像传递给它并将对齐方式设置为左侧,但我发现无法在文本字段中传递图像。我开始使用 jaspersoft Studio pro 及其 html 元素 来解决问题。
但是我无法弄清楚如何将数据库中的图像字段作为 html 源传递。 html 元素中的表达式为:
"<img src= '$F{Image}' align='left'/> <p>"+$F{KN_Zusatzinfo_DV_Einleitungstext} +"</p>"
此代码不显示图像,而是显示一个框而不是图像。
并且打印的文本没有被拉伸。我使用的页面样式是两栏。 HTML输出如图
使用像下面这样的静态路径到图像是可行的,但这对我来说不是一个选项,因为我需要从数据库中读取图像:
"<style>.left { float: left; margin-left: 1em; width :40%;}</style><p><img class = left src= C:/Users/iman/JaspersoftWorkspace/Qreport/sample1.png />
如果我只使用 Image Element 和下面的文本框,输出和设计视图如下图所示:
HTML html 方法的来源 是:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style type="text/css">
a {
text-decoration: none
}
</style>
</head>
<body text="#000000" link="#000000" alink="#000000" vlink="#000000">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td width="50%"> </td>
<td align="center">
<a name="JR_PAGE_ANCHOR_0_1"></a>
<table class="jrPage" cellpadding="0" cellspacing="0" border="0" style="empty-cells: show; width: 595px; border-collapse: collapse; background-color: white;">
<tr valign="top" style="height:0">
<td style="width:10px"></td>
<td style="width:20px"></td>
<td style="width:40px"></td>
<td style="width:210px"></td>
<td style="width:32px"></td>
<td style="width:58px"></td>
<td style="width:10px"></td>
<td style="width:182px"></td>
<td style="width:9px"></td>
<td style="width:24px"></td>
</tr>
<tr valign="top" style="height:25px">
<td colspan="10">
</td>
</tr>
<tr valign="top" style="height:5px">
<td colspan="6">
</td>
<td colspan="3" rowspan="2" style="text-indent: 0px; text-align: right;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #6B66FA; font-size: 10px; line-height: 1.2578125;">HCH-A - Aortenklappenchirurgie, isoliert (Konventionell chirurgisch)</span>
</td>
<td>
</td>
</tr>
<tr valign="top" style="height:20px">
<td>
</td>
<td colspan="2" style="text-indent: 0px; text-align: left;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #BABABA; font-size: 10px; line-height: 1.2578125;">Ergebnisse</span>
</td>
<td colspan="3">
</td>
<td>
</td>
</tr>
<tr valign="top" style="height:20px">
<td colspan="7">
</td>
<td colspan="2" style="text-indent: 0px; text-align: right;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #000000; font-size: 10px; line-height: 1.2578125;">Dr XYZ</span>
</td>
<td>
</td>
</tr>
<tr valign="top" style="height:88px">
<td colspan="10">
</td>
</tr>
<tr valign="top" style="height:74px">
<td colspan="5">
</td>
<td colspan="3" rowspan="2">
<div style='width:250px;height:90px;background-color: #FFFFFF; overflow:hidden;'>
<img src='((java.awt.Image)field_Image.getValue())' align='left' />
<p>Bei der Aortenklappe handelt es sich um das „Ventil“ zwischen der linken HerzkeAortenklappenchirurgie, isoliert - konventionell - Aortenklappenchirurgie, isoliert - kathetergestützt Die Qualitätsindikatoren der k........
appenchirauch die Indikationsstellung betrachtet. Sofern nicht anders angegeben, ist die Beschreibung der Qualitätsindikatoren eine Fortschreibung der QIDB 2014 des AQUA-Institutes.</p>
</div>
</td>
<td colspan="2">
</td>
</tr>
<tr valign="top" style="height:16px">
<td colspan="2">
</td>
<td colspan="2" rowspan="2">
<div style='width:250px;height:90px;background-color: #FFFFFF; overflow:hidden;'>
<img src='((java.awt.Image)field_Image.getValue())' align='left' />
<p>Bei der Aortenklappe handelt es sich um das „Ventil“ zwischen der linken Herzkammer und der Hauptschlagader (Aorta). Schließt die Klappe nicht mehr dicht, spriitätsindikatoren der konventionellen Aortenklappenchirurgie fokussieren schwere Komplikationen und Sterblichkeit.
Bei der kathetergestützten Aortenklappenchirurgie wird darüber hinaus auch die Indikationsstellung betrachtet. Sofern nicht anders angegeben, ist die Beschreibung der Qualitätsindikatoren eine Fortschreibung der QIDB 2014 des AQUA-Institutes.</p>
</div>
</td>
<td>
</td>
<td colspan="2">
</td>
</tr>
<tr valign="top" style="height:74px">
<td colspan="2">
</td>
<td colspan="6">
</td>
</tr>
<tr valign="top" style="height:520px">
<td colspan="10">
</td>
</tr>
</table>
<br/>
<br/>
<a name="JR_PAGE_ANCHOR_0_2"></a>
<table class="jrPage" cellpadding="0" cellspacing="0" border="0" style="empty-cells: show; width: 595px; border-collapse: collapse; background-color: white;">
<tr valign="top" style="height:0">
<td style="width:10px"></td>
...
<td style="width:24px"></td>
</tr>
<tr valign="top" style="height:27px">
<td colspan="7">
</td>
</tr>
<tr valign="top" style="height:20px">
<td>
</td>
<td colspan="2" style="text-indent: 0px; text-align: left;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #BABABA; font-size: 10px; line-height: 1.2578125;">Ergebnisse</span>
</td>
<td colspan="4">
</td>
</tr>
<tr valign="top" style="height:7px">
<td colspan="7">
</td>
</tr>
<tr valign="top" style="height:21px">
<td colspan="5">
</td>
<td style="text-indent: 0px; text-align: right;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #6B66FA; font-size: 10px; line-height: 1.2578125;">HCH-A - Aortenklappenchirurgie, isoliert </span>
</td>
<td>
</td>
</tr>
<tr valign="top" style="height:125px">
<td colspan="7">
</td>
</tr>
<tr valign="top" style="height:90px">
<td colspan="2">
</td>
<td colspan="2">
<div style='width:250px;height:90px;background-color: #FFFFFF; overflow:hidden;'>
<img src='((java.awt.Image)field_Image.getValue())' align='left' />
<p>....deleted some text because it exceeded the limit..</p>
</div>
</td>
<td colspan="3">
</td>
</tr>
<tr valign="top" style="height:552px">
<td colspan="7">
</td>
</tr>
</table>
<br/>
<br/>
<a name="JR_PAGE_ANCHOR_0_3"></a>
<table class="jrPage" cellpadding="0" cellspacing="0" border="0" style="empty-cells: show; width: 595px; border-collapse: collapse; background-color: white;">
<tr valign="top" style="height:0">
<td style="width:595px"></td>
</tr>
<tr valign="top" style="height:842px">
<td>
</td>
</tr>
</table>
<![if IE]>
<script>
var links = document.querySelectorAll('link.jrWebFont');
setTimeout(function() {
if (links) {
for (var i = 0; i < links.length; i++) {
links.item(i).href = links.item(i).href;
}
}
}, 0);
</script>
<![endif]>
</td>
<td width="50%"> </td>
</tr>
</table>
</body>
</html>
图像元素加文本字段的 HTML 来源是:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style type="text/css">
a {
text-decoration: none
}
</style>
</head>
<body text="#000000" link="#000000" alink="#000000" vlink="#000000">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td width="50%"> </td>
<td align="center">
<a name="JR_PAGE_ANCHOR_0_1"></a>
<table class="jrPage" cellpadding="0" cellspacing="0" border="0" style="empty-cells: show; width: 595px; border-collapse: collapse; background-color: white;">
<tr valign="top" style="height:0">
<td style="width:10px"></td>
<td style="width:60px"></td>
<td style="width:232px"></td>
<td style="width:33px"></td>
<td style="width:35px"></td>
<td style="width:10px"></td>
<td style="width:5px"></td>
<td style="width:186px"></td>
<td style="width:1px"></td>
<td style="width:23px"></td>
</tr>
<tr valign="top" style="height:25px">
<td colspan="10">
</td>
</tr>
<tr valign="top" style="height:5px">
<td colspan="5">
</td>
<td colspan="3" rowspan="2" style="text-indent: 0px; text-align: right;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #6B66FA; font-size: 10px; line-height: 1.2578125;">HCH-A - Aortenklappenchirurgie, isoliert (Konventionell chirurgisch)</span>
</td>
<td colspan="2">
</td>
</tr>
<tr valign="top" style="height:20px">
<td>
</td>
<td style="text-indent: 0px; text-align: left;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #BABABA; font-size: 10px; line-height: 1.2578125;">Ergebnisse</span>
</td>
<td colspan="3">
</td>
<td colspan="2">
</td>
</tr>
<tr valign="top" style="height:20px">
<td colspan="6">
</td>
<td colspan="2" style="text-indent: 0px; text-align: right;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #000000; font-size: 10px; line-height: 1.2578125;">Dr XYZ</span>
</td>
<td colspan="2">
</td>
</tr>
<tr valign="top" style="height:94px">
<td colspan="10">
</td>
</tr>
<tr valign="top" style="height:50px">
<td colspan="4">
</td>
<td colspan="3">
<img src="report7921484792758494686.html_files/img_0_0_3" style="width: 50px" alt="" />
</td>
<td colspan="3">
</td>
</tr>
<tr valign="top" style="height:24px">
<td colspan="10">
</td>
</tr>
<tr valign="top" style="height:477px">
<td colspan="3">
</td>
<td colspan="6" style="text-indent: 0px; text-align: left;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #000000; font-size: 10px; line-height: 1.2578125;">Bei der Aortenklappe handelt es sinken Herzkammer und der Hauptschlagader (Aorta). Einsatz einer künstlichen Herzklappe behandelt.<br/><br/>Bei beiden kathetergestützten Methoden wird über ein spezielles Ballonkathetersystem zunächst der Bereich der </span>
</td>
<td>
</td>
</tr>
<tr valign="top" style="height:127px">
<td colspan="10">
</td>
</tr>
</table>
<br/>
<br/>
<a name="JR_PAGE_ANCHOR_0_2"></a>
<table class="jrPage" cellpadding="0" cellspacing="0" border="0" style="empty-cells: show; width: 595px; border-collapse: collapse; background-color: white;">
<tr valign="top" style="height:0">
<td style="width:10px"></td>
...
<td style="width:24px"></td>
</tr>
<tr valign="top" style="height:27px">
<td colspan="7">
</td>
</tr>
<tr valign="top" style="height:20px">
<td>
</td>
<td colspan="2" style="text-indent: 0px; text-align: left;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #BABABA; font-size: 10px; line-height: 1.2578125;">Ergebnisse</span>
</td>
<td colspan="4">
</td>
</tr>
<tr valign="top" style="height:7px">
<td colspan="7">
</td>
</tr>
<tr valign="top" style="height:21px">
<td colspan="5">
</td>
<td style="text-indent: 0px; text-align: right;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #6B66FA; font-size: 10px; line-height: 1.2578125;">HCH-A - Aortenklappenchirurgie, isoliert </span>
</td>
<td>
</td>
</tr>
<tr valign="top" style="height:139px">
<td colspan="7">
</td>
</tr>
<tr valign="top" style="height:264px">
<td colspan="2">
</td>
<td colspan="2" style="text-indent: 0px; text-align: left;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #000000; font-size: 10px; line-height: 1.2578125;">alten, verengten Aortenklappe erweitert. - des AQUA-Institutes.</span>
</td>
<td colspan="3">
</td>
</tr>
<tr valign="top" style="height:364px">
<td colspan="7">
</td>
</tr>
</table>
<br/>
<br/>
<a name="JR_PAGE_ANCHOR_0_3"></a>
<table class="jrPage" cellpadding="0" cellspacing="0" border="0" style="empty-cells: show; width: 595px; border-collapse: collapse; background-color: white;">
<tr valign="top" style="height:0">
<td style="width:10px"></td>
<td style="width:10px"></td>
...
<td style="width:1px"></td>
<td style="width:23px"></td>
</tr>
<tr valign="top" style="height:27px">
<td colspan="11">
</td>
</tr>
<tr valign="top" style="height:20px">
<td>
</td>
<td colspan="3" style="text-indent: 0px; text-align: left;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #BABABA; font-size: 10px; line-height: 1.2578125;">Ergebnisse</span>
</td>
<td colspan="7">
</td>
</tr>
<tr valign="top" style="height:7px">
<td colspan="11">
</td>
</tr>
<tr valign="top" style="height:21px">
<td colspan="8">
</td>
<td style="text-indent: 0px; text-align: right;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #6B66FA; font-size: 10px; line-height: 1.2578125;">HCH-A - Aortenklappenchirurgie, isoliert </span>
</td>
<td colspan="2">
</td>
</tr>
<tr valign="top" style="height:65px">
<td colspan="11">
</td>
</tr>
<tr valign="top" style="height:66px">
<td colspan="7">
</td>
<td colspan="3" rowspan="4" style="text-indent: 0px; text-align: left;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #000000; font-size: 10px; line-height: 1.2578125;"><br/>Bei beiden kathetergestützten Me die Indikationsstellung betrachtet.<br/><br/>Sofern nicht anders angegeben, ist die Beschreibung der Qualitätsindikatoren eine Fortschreibung der QIDB 2014 des AQUA-Institutes.</span>
</td>
<td>
</td>
</tr>
<tr valign="top" style="height:50px">
<td colspan="3">
</td>
<td colspan="2">
<img src="report7921484792758494686.html_files/img_0_2_2" style="width: 50px" alt="" />
</td>
<td colspan="2">
</td>
<td>
</td>
</tr>
<tr valign="top" style="height:24px">
<td colspan="7">
</td>
<td>
</td>
</tr>
<tr valign="top" style="height:161px">
<td colspan="2">
</td>
<td colspan="4" rowspan="2" style="text-indent: 0px; text-align: left;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #000000; font-size: 10px; line-height: 1.2578125;">Bei der Aortenklapprzspitze über einen 3 bis 5 cm langen Hautschnitt im Rippenbereich (linker Brustkorb, im 4. oder 5. Rippenzwischenraum) freigelegt. <br/>- Beim endovaskulären Aortenklappenersatz ist lediglich ein gezielter Einstich (Punktion), zumeist in die Leistenarterie, notwendig. <br/></span>
</td>
<td>
</td>
<td>
</td>
</tr>
<tr valign="top" style="height:279px">
<td colspan="2">
</td>
<td colspan="5">
</td>
</tr>
<tr valign="top" style="height:122px">
<td colspan="11">
</td>
</tr>
</table>
<br/>
<br/>
<a name="JR_PAGE_ANCHOR_0_4"></a>
<table class="jrPage" cellpadding="0" cellspacing="0" border="0" style="empty-cells: show; width: 595px; border-collapse: collapse; background-color: white;">
<tr valign="top" style="height:0">
<td style="width:10px"></td>
<td style="width:60px"></td>
...
<td style="width:1px"></td>
<td style="width:23px"></td>
</tr>
<tr valign="top" style="height:27px">
<td colspan="9">
</td>
</tr>
<tr valign="top" style="height:20px">
<td>
</td>
<td style="text-indent: 0px; text-align: left;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #BABABA; font-size: 10px; line-height: 1.2578125;">Ergebnisse</span>
</td>
<td colspan="7">
</td>
</tr>
<tr valign="top" style="height:7px">
<td colspan="9">
</td>
</tr>
<tr valign="top" style="height:21px">
<td colspan="5">
</td>
<td colspan="2" style="text-indent: 0px; text-align: right;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #6B66FA; font-size: 10px; line-height: 1.2578125;">HCH-A - Aortenklappenchirurgie, isoliert </span>
</td>
<td colspan="2">
</td>
</tr>
<tr valign="top" style="height:91px">
<td colspan="9">
</td>
</tr>
<tr valign="top" style="height:50px">
<td colspan="4">
</td>
<td colspan="2">
<img src="report7921484792758494686.html_files/img_0_3_2" style="width: 50px" alt="" />
</td>
<td colspan="3">
</td>
</tr>
<tr valign="top" style="height:24px">
<td colspan="9">
</td>
</tr>
<tr valign="top" style="height:477px">
<td colspan="3">
</td>
<td colspan="5" style="text-indent: 0px; text-align: left;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif;r Brustkorb, im 4. oder 5. Rippenzwischenraum) freigelegt. <br/>- Beim endovaskulären Aortenklappenersatz ist lediglich ein gezielter Einstich (Punktion), zumeist in die Leistenarterie, notwendig. <br/><br/>Bei beiden kathetergestützten Methoden wird über ein spezielles Ballonkathetersystem zunächst der Bereich der </span>
</td>
<td>
</td>
</tr>
<tr valign="top" style="height:125px">
<td colspan="9">
</td>
</tr>
</table>
<br/>
<br/>
<a name="JR_PAGE_ANCHOR_0_5"></a>
<table class="jrPage" cellpadding="0" cellspacing="0" border="0" style="empty-cells: show; width: 595px; border-collapse: collapse; background-color: white;">
<tr valign="top" style="height:0">
<td style="width:10px"></td>
<td style="width:10px"></td>
<td style="width:50px"></td>
<td style="width:220px"></td>
<td style="width:80px"></td>
<td style="width:201px"></td>
<td style="width:24px"></td>
</tr>
<tr valign="top" style="height:27px">
<td colspan="7">
</td>
</tr>
<tr valign="top" style="height:20px">
<td>
</td>
<td colspan="2" style="text-indent: 0px; text-align: left;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #BABABA; font-size: 10px; line-height: 1.2578125;">Ergebnisse</span>
</td>
<td colspan="4">
</td>
</tr>
<tr valign="top" style="height:7px">
<td colspan="7">
</td>
</tr>
<tr valign="top" style="height:21px">
<td colspan="5">
</td>
<td style="text-indent: 0px; text-align: right;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #6B66FA; font-size: 10px; line-height: 1.2578125;">HCH-A - Aortenklappenchirurgie, isoliert </span>
</td>
<td>
</td>
</tr>
<tr valign="top" style="height:139px">
<td colspan="7">
</td>
</tr>
<tr valign="top" style="height:264px">
<td colspan="2">
</td>
<td colspan="2" style="text-indent: 0px; text-align: left;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #000000; font-size: 10px; line-height: 1.2578125;">alten, verengten Aortenklappe erweitert. Anschließend wird eine zusammengefaltete Herzklappenchirurgie fokussieren schwere Komplikationen und Sterblichkeit. Bei der kathetergestützten Aortenklappenchirurgie wird darüber hinaus auch die Indikationsstellung betrachtet.<br/><br/>Sofern nicht anders angegeben, ist die Beschreibung der Qualitätsindikatoren des AQUA-Institutes.</span>
</td>
<td colspan="3">
</td>
</tr>
<tr valign="top" style="height:364px">
<td colspan="7">
</td>
</tr>
</table>
<br/>
<br/>
<a name="JR_PAGE_ANCHOR_0_6"></a>
<table class="jrPage" cellpadding="0" cellspacing="0" border="0" style="empty-cells: show; width: 595px; border-collapse: collapse; background-color: white;">
<tr valign="top" style="height:0">
<td style="width:595px"></td>
</tr>
<tr valign="top" style="height:842px">
<td>
</td>
</tr>
</table>
<![if IE]>
<script>
var links = document.querySelectorAll('link.jrWebFont');
setTimeout(function() {
if (links) {
for (var i = 0; i < links.length; i++) {
links.item(i).href = links.item(i).href;
}
}
}, 0);
</script>
<![endif]>
</td>
<td width="50%"> </td>
</tr>
</table>
</body>
</html>
如何实现这个结构?
如果您使用 html 组件将文本环绕在图像周围,您不仅会遇到从数据库中提取图像的问题,html 组件还会创建 html,因此内容可能是 resized/clipped,具体取决于文本长度和 html(图像)组件上的设置。
我建议使用两个 textField
环绕图像(请参阅 jrxml),然后计算文本将在何处进入下一个字段,这样您就可以首先获得文本的第一部分 textField
和第二部分 textField
Java 计算文本断点的代码
此代码演示了如何使用 FontMetric
来计算 Jasper Report 将根据 textField
的大小中断文本的位置(代码说明在注释中)。该代码在 NullPointer
(null
文本)和非溢出文本上不是完全安全的,此外它可以优化,但我会把它留给 OP
import java.awt.Font;
import java.awt.font.FontRenderContext;
import java.awt.geom.AffineTransform;
public class WrapImage {
/**
* Get position where string will break
* @param text, the text
* @param width, the width of the component
* @param height, the height of the component
* @return the position
*/
public static int getBreakPosition(String text, int width, int height){
//Start font context
AffineTransform affinetransform = new AffineTransform();
FontRenderContext frc = new FontRenderContext(affinetransform,true,true);
//Set same font as used in jasper-report
Font font = new Font("SansSerif", Font.PLAIN, 10);
//Get height to understand how many lines
double textheight = font.getStringBounds(text, frc).getHeight();
int nrLines = (int)Math.floor(height/textheight);
//init variables
int breakPos = 0;
int line = 1;
//loop the lines
while (line<=nrLines){
//get remaining text
String textPart = text.substring(breakPos,text.length());
//get how much text will fit in line
breakPos += getLineBreakPosition(textPart, width, font, frc)+1;
line++;
}
return breakPos;
}
/**
* Get where a single line will break
* @param text, the text
* @param width, width of component
* @param font, the font used
* @param frc, the FontRenderContext
* @return
*/
protected static int getLineBreakPosition(String text, int width, Font font, FontRenderContext frc){
int breakPos = 0;
String tmpText = text;
while (font.getStringBounds(tmpText, frc).getWidth()>width){
//the break position is space
breakPos = tmpText.lastIndexOf(' ');
if (breakPos<=0){
breakPos = 0;
break;
}
tmpText = tmpText.substring(0,breakPos);
}
return breakPos;
}
}
jrxml 示例使用 java 代码
在这个简短的示例中,我使用了一个带有一些 arbitrary sample text. The WrapImage
class is in class path. I set a variable to the calculated break point. Then use substring
on the text to get first part in first textfield
, second in second textField
To simplify example, I'm using an image from desktop, for how to pull image from database see: Using images stored in database
的参数
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="wrappingText" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" isSummaryWithPageHeaderAndFooter="true" uuid="cd3e4316-a3c4-4847-a085-3bfa1d9425af">
<parameter name="longText" class="java.lang.String">
<defaultValueExpression><![CDATA["Whether you've come to ask questions, or to generously share what you know, remember that we’re all here to learn, together. Be welcoming and patient, especially with those who may not know everything you do. Oh, and bring your sense of humor. Just in case. That basically covers it. But these three guidelines may help: Rudeness and belittling language are not okay. Your tone should match the way you'd talk in person with someone you respect and whom you want to respect you. If you don't have time to say something politely, just leave it for someone who does. Be welcoming, be patient, and assume good intentions. Don't expect new users to know all the rules — they don't. And be patient while they learn. If you're here for help, make it as easy as possible for others to help you. Everyone here is volunteering, and no one responds well to demands for help. Don't be a jerk. These are just a few examples. If you see them, flag them. In summary, have fun, and be good to each other."]]></defaultValueExpression>
</parameter>
<variable name="breakPos" class="java.lang.Integer">
<initialValueExpression><![CDATA[WrapImage.getBreakPosition($P{longText}, 250, 100)]]></initialValueExpression>
</variable>
<title>
<band height="220" splitType="Stretch">
<image>
<reportElement x="10" y="20" width="80" height="80" uuid="6b4bb467-f7fd-4a15-994b-7c1a01b86428"/>
<imageExpression><![CDATA["C:\Users\pette\Desktop\queen_bee.jpg"]]></imageExpression>
</image>
<textField>
<reportElement x="100" y="0" width="250" height="100" uuid="f4507624-0410-4feb-9dc5-7d3342b882f0"/>
<textElement textAlignment="Justified" verticalAlignment="Bottom"/>
<textFieldExpression><![CDATA[$P{longText}.substring(0,$V{breakPos}.intValue())]]></textFieldExpression>
</textField>
<textField>
<reportElement x="0" y="100" width="350" height="120" uuid="8790bbdd-2066-4ceb-9fc9-dad6154df88c"/>
<textElement textAlignment="Justified"/>
<textFieldExpression><![CDATA[$P{longText}.substring($V{breakPos}.intValue()+1)]]></textFieldExpression>
</textField>
</band>
</title>
</jasperReport>
输出示例
我正在尝试将我的文本环绕在图像周围。
我需要创建的结构如下图所示:
这是我试过的
我试过使用 table 但没有成功。我很难将文本字段用作 html 并将图像传递给它并将对齐方式设置为左侧,但我发现无法在文本字段中传递图像。我开始使用 jaspersoft Studio pro 及其 html 元素 来解决问题。 但是我无法弄清楚如何将数据库中的图像字段作为 html 源传递。 html 元素中的表达式为:
"<img src= '$F{Image}' align='left'/> <p>"+$F{KN_Zusatzinfo_DV_Einleitungstext} +"</p>"
此代码不显示图像,而是显示一个框而不是图像。 并且打印的文本没有被拉伸。我使用的页面样式是两栏。 HTML输出如图
使用像下面这样的静态路径到图像是可行的,但这对我来说不是一个选项,因为我需要从数据库中读取图像:
"<style>.left { float: left; margin-left: 1em; width :40%;}</style><p><img class = left src= C:/Users/iman/JaspersoftWorkspace/Qreport/sample1.png />
如果我只使用 Image Element 和下面的文本框,输出和设计视图如下图所示:
HTML html 方法的来源 是:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style type="text/css">
a {
text-decoration: none
}
</style>
</head>
<body text="#000000" link="#000000" alink="#000000" vlink="#000000">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td width="50%"> </td>
<td align="center">
<a name="JR_PAGE_ANCHOR_0_1"></a>
<table class="jrPage" cellpadding="0" cellspacing="0" border="0" style="empty-cells: show; width: 595px; border-collapse: collapse; background-color: white;">
<tr valign="top" style="height:0">
<td style="width:10px"></td>
<td style="width:20px"></td>
<td style="width:40px"></td>
<td style="width:210px"></td>
<td style="width:32px"></td>
<td style="width:58px"></td>
<td style="width:10px"></td>
<td style="width:182px"></td>
<td style="width:9px"></td>
<td style="width:24px"></td>
</tr>
<tr valign="top" style="height:25px">
<td colspan="10">
</td>
</tr>
<tr valign="top" style="height:5px">
<td colspan="6">
</td>
<td colspan="3" rowspan="2" style="text-indent: 0px; text-align: right;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #6B66FA; font-size: 10px; line-height: 1.2578125;">HCH-A - Aortenklappenchirurgie, isoliert (Konventionell chirurgisch)</span>
</td>
<td>
</td>
</tr>
<tr valign="top" style="height:20px">
<td>
</td>
<td colspan="2" style="text-indent: 0px; text-align: left;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #BABABA; font-size: 10px; line-height: 1.2578125;">Ergebnisse</span>
</td>
<td colspan="3">
</td>
<td>
</td>
</tr>
<tr valign="top" style="height:20px">
<td colspan="7">
</td>
<td colspan="2" style="text-indent: 0px; text-align: right;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #000000; font-size: 10px; line-height: 1.2578125;">Dr XYZ</span>
</td>
<td>
</td>
</tr>
<tr valign="top" style="height:88px">
<td colspan="10">
</td>
</tr>
<tr valign="top" style="height:74px">
<td colspan="5">
</td>
<td colspan="3" rowspan="2">
<div style='width:250px;height:90px;background-color: #FFFFFF; overflow:hidden;'>
<img src='((java.awt.Image)field_Image.getValue())' align='left' />
<p>Bei der Aortenklappe handelt es sich um das „Ventil“ zwischen der linken HerzkeAortenklappenchirurgie, isoliert - konventionell - Aortenklappenchirurgie, isoliert - kathetergestützt Die Qualitätsindikatoren der k........
appenchirauch die Indikationsstellung betrachtet. Sofern nicht anders angegeben, ist die Beschreibung der Qualitätsindikatoren eine Fortschreibung der QIDB 2014 des AQUA-Institutes.</p>
</div>
</td>
<td colspan="2">
</td>
</tr>
<tr valign="top" style="height:16px">
<td colspan="2">
</td>
<td colspan="2" rowspan="2">
<div style='width:250px;height:90px;background-color: #FFFFFF; overflow:hidden;'>
<img src='((java.awt.Image)field_Image.getValue())' align='left' />
<p>Bei der Aortenklappe handelt es sich um das „Ventil“ zwischen der linken Herzkammer und der Hauptschlagader (Aorta). Schließt die Klappe nicht mehr dicht, spriitätsindikatoren der konventionellen Aortenklappenchirurgie fokussieren schwere Komplikationen und Sterblichkeit.
Bei der kathetergestützten Aortenklappenchirurgie wird darüber hinaus auch die Indikationsstellung betrachtet. Sofern nicht anders angegeben, ist die Beschreibung der Qualitätsindikatoren eine Fortschreibung der QIDB 2014 des AQUA-Institutes.</p>
</div>
</td>
<td>
</td>
<td colspan="2">
</td>
</tr>
<tr valign="top" style="height:74px">
<td colspan="2">
</td>
<td colspan="6">
</td>
</tr>
<tr valign="top" style="height:520px">
<td colspan="10">
</td>
</tr>
</table>
<br/>
<br/>
<a name="JR_PAGE_ANCHOR_0_2"></a>
<table class="jrPage" cellpadding="0" cellspacing="0" border="0" style="empty-cells: show; width: 595px; border-collapse: collapse; background-color: white;">
<tr valign="top" style="height:0">
<td style="width:10px"></td>
...
<td style="width:24px"></td>
</tr>
<tr valign="top" style="height:27px">
<td colspan="7">
</td>
</tr>
<tr valign="top" style="height:20px">
<td>
</td>
<td colspan="2" style="text-indent: 0px; text-align: left;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #BABABA; font-size: 10px; line-height: 1.2578125;">Ergebnisse</span>
</td>
<td colspan="4">
</td>
</tr>
<tr valign="top" style="height:7px">
<td colspan="7">
</td>
</tr>
<tr valign="top" style="height:21px">
<td colspan="5">
</td>
<td style="text-indent: 0px; text-align: right;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #6B66FA; font-size: 10px; line-height: 1.2578125;">HCH-A - Aortenklappenchirurgie, isoliert </span>
</td>
<td>
</td>
</tr>
<tr valign="top" style="height:125px">
<td colspan="7">
</td>
</tr>
<tr valign="top" style="height:90px">
<td colspan="2">
</td>
<td colspan="2">
<div style='width:250px;height:90px;background-color: #FFFFFF; overflow:hidden;'>
<img src='((java.awt.Image)field_Image.getValue())' align='left' />
<p>....deleted some text because it exceeded the limit..</p>
</div>
</td>
<td colspan="3">
</td>
</tr>
<tr valign="top" style="height:552px">
<td colspan="7">
</td>
</tr>
</table>
<br/>
<br/>
<a name="JR_PAGE_ANCHOR_0_3"></a>
<table class="jrPage" cellpadding="0" cellspacing="0" border="0" style="empty-cells: show; width: 595px; border-collapse: collapse; background-color: white;">
<tr valign="top" style="height:0">
<td style="width:595px"></td>
</tr>
<tr valign="top" style="height:842px">
<td>
</td>
</tr>
</table>
<![if IE]>
<script>
var links = document.querySelectorAll('link.jrWebFont');
setTimeout(function() {
if (links) {
for (var i = 0; i < links.length; i++) {
links.item(i).href = links.item(i).href;
}
}
}, 0);
</script>
<![endif]>
</td>
<td width="50%"> </td>
</tr>
</table>
</body>
</html>
图像元素加文本字段的 HTML 来源是:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style type="text/css">
a {
text-decoration: none
}
</style>
</head>
<body text="#000000" link="#000000" alink="#000000" vlink="#000000">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td width="50%"> </td>
<td align="center">
<a name="JR_PAGE_ANCHOR_0_1"></a>
<table class="jrPage" cellpadding="0" cellspacing="0" border="0" style="empty-cells: show; width: 595px; border-collapse: collapse; background-color: white;">
<tr valign="top" style="height:0">
<td style="width:10px"></td>
<td style="width:60px"></td>
<td style="width:232px"></td>
<td style="width:33px"></td>
<td style="width:35px"></td>
<td style="width:10px"></td>
<td style="width:5px"></td>
<td style="width:186px"></td>
<td style="width:1px"></td>
<td style="width:23px"></td>
</tr>
<tr valign="top" style="height:25px">
<td colspan="10">
</td>
</tr>
<tr valign="top" style="height:5px">
<td colspan="5">
</td>
<td colspan="3" rowspan="2" style="text-indent: 0px; text-align: right;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #6B66FA; font-size: 10px; line-height: 1.2578125;">HCH-A - Aortenklappenchirurgie, isoliert (Konventionell chirurgisch)</span>
</td>
<td colspan="2">
</td>
</tr>
<tr valign="top" style="height:20px">
<td>
</td>
<td style="text-indent: 0px; text-align: left;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #BABABA; font-size: 10px; line-height: 1.2578125;">Ergebnisse</span>
</td>
<td colspan="3">
</td>
<td colspan="2">
</td>
</tr>
<tr valign="top" style="height:20px">
<td colspan="6">
</td>
<td colspan="2" style="text-indent: 0px; text-align: right;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #000000; font-size: 10px; line-height: 1.2578125;">Dr XYZ</span>
</td>
<td colspan="2">
</td>
</tr>
<tr valign="top" style="height:94px">
<td colspan="10">
</td>
</tr>
<tr valign="top" style="height:50px">
<td colspan="4">
</td>
<td colspan="3">
<img src="report7921484792758494686.html_files/img_0_0_3" style="width: 50px" alt="" />
</td>
<td colspan="3">
</td>
</tr>
<tr valign="top" style="height:24px">
<td colspan="10">
</td>
</tr>
<tr valign="top" style="height:477px">
<td colspan="3">
</td>
<td colspan="6" style="text-indent: 0px; text-align: left;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #000000; font-size: 10px; line-height: 1.2578125;">Bei der Aortenklappe handelt es sinken Herzkammer und der Hauptschlagader (Aorta). Einsatz einer künstlichen Herzklappe behandelt.<br/><br/>Bei beiden kathetergestützten Methoden wird über ein spezielles Ballonkathetersystem zunächst der Bereich der </span>
</td>
<td>
</td>
</tr>
<tr valign="top" style="height:127px">
<td colspan="10">
</td>
</tr>
</table>
<br/>
<br/>
<a name="JR_PAGE_ANCHOR_0_2"></a>
<table class="jrPage" cellpadding="0" cellspacing="0" border="0" style="empty-cells: show; width: 595px; border-collapse: collapse; background-color: white;">
<tr valign="top" style="height:0">
<td style="width:10px"></td>
...
<td style="width:24px"></td>
</tr>
<tr valign="top" style="height:27px">
<td colspan="7">
</td>
</tr>
<tr valign="top" style="height:20px">
<td>
</td>
<td colspan="2" style="text-indent: 0px; text-align: left;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #BABABA; font-size: 10px; line-height: 1.2578125;">Ergebnisse</span>
</td>
<td colspan="4">
</td>
</tr>
<tr valign="top" style="height:7px">
<td colspan="7">
</td>
</tr>
<tr valign="top" style="height:21px">
<td colspan="5">
</td>
<td style="text-indent: 0px; text-align: right;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #6B66FA; font-size: 10px; line-height: 1.2578125;">HCH-A - Aortenklappenchirurgie, isoliert </span>
</td>
<td>
</td>
</tr>
<tr valign="top" style="height:139px">
<td colspan="7">
</td>
</tr>
<tr valign="top" style="height:264px">
<td colspan="2">
</td>
<td colspan="2" style="text-indent: 0px; text-align: left;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #000000; font-size: 10px; line-height: 1.2578125;">alten, verengten Aortenklappe erweitert. - des AQUA-Institutes.</span>
</td>
<td colspan="3">
</td>
</tr>
<tr valign="top" style="height:364px">
<td colspan="7">
</td>
</tr>
</table>
<br/>
<br/>
<a name="JR_PAGE_ANCHOR_0_3"></a>
<table class="jrPage" cellpadding="0" cellspacing="0" border="0" style="empty-cells: show; width: 595px; border-collapse: collapse; background-color: white;">
<tr valign="top" style="height:0">
<td style="width:10px"></td>
<td style="width:10px"></td>
...
<td style="width:1px"></td>
<td style="width:23px"></td>
</tr>
<tr valign="top" style="height:27px">
<td colspan="11">
</td>
</tr>
<tr valign="top" style="height:20px">
<td>
</td>
<td colspan="3" style="text-indent: 0px; text-align: left;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #BABABA; font-size: 10px; line-height: 1.2578125;">Ergebnisse</span>
</td>
<td colspan="7">
</td>
</tr>
<tr valign="top" style="height:7px">
<td colspan="11">
</td>
</tr>
<tr valign="top" style="height:21px">
<td colspan="8">
</td>
<td style="text-indent: 0px; text-align: right;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #6B66FA; font-size: 10px; line-height: 1.2578125;">HCH-A - Aortenklappenchirurgie, isoliert </span>
</td>
<td colspan="2">
</td>
</tr>
<tr valign="top" style="height:65px">
<td colspan="11">
</td>
</tr>
<tr valign="top" style="height:66px">
<td colspan="7">
</td>
<td colspan="3" rowspan="4" style="text-indent: 0px; text-align: left;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #000000; font-size: 10px; line-height: 1.2578125;"><br/>Bei beiden kathetergestützten Me die Indikationsstellung betrachtet.<br/><br/>Sofern nicht anders angegeben, ist die Beschreibung der Qualitätsindikatoren eine Fortschreibung der QIDB 2014 des AQUA-Institutes.</span>
</td>
<td>
</td>
</tr>
<tr valign="top" style="height:50px">
<td colspan="3">
</td>
<td colspan="2">
<img src="report7921484792758494686.html_files/img_0_2_2" style="width: 50px" alt="" />
</td>
<td colspan="2">
</td>
<td>
</td>
</tr>
<tr valign="top" style="height:24px">
<td colspan="7">
</td>
<td>
</td>
</tr>
<tr valign="top" style="height:161px">
<td colspan="2">
</td>
<td colspan="4" rowspan="2" style="text-indent: 0px; text-align: left;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #000000; font-size: 10px; line-height: 1.2578125;">Bei der Aortenklapprzspitze über einen 3 bis 5 cm langen Hautschnitt im Rippenbereich (linker Brustkorb, im 4. oder 5. Rippenzwischenraum) freigelegt. <br/>- Beim endovaskulären Aortenklappenersatz ist lediglich ein gezielter Einstich (Punktion), zumeist in die Leistenarterie, notwendig. <br/></span>
</td>
<td>
</td>
<td>
</td>
</tr>
<tr valign="top" style="height:279px">
<td colspan="2">
</td>
<td colspan="5">
</td>
</tr>
<tr valign="top" style="height:122px">
<td colspan="11">
</td>
</tr>
</table>
<br/>
<br/>
<a name="JR_PAGE_ANCHOR_0_4"></a>
<table class="jrPage" cellpadding="0" cellspacing="0" border="0" style="empty-cells: show; width: 595px; border-collapse: collapse; background-color: white;">
<tr valign="top" style="height:0">
<td style="width:10px"></td>
<td style="width:60px"></td>
...
<td style="width:1px"></td>
<td style="width:23px"></td>
</tr>
<tr valign="top" style="height:27px">
<td colspan="9">
</td>
</tr>
<tr valign="top" style="height:20px">
<td>
</td>
<td style="text-indent: 0px; text-align: left;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #BABABA; font-size: 10px; line-height: 1.2578125;">Ergebnisse</span>
</td>
<td colspan="7">
</td>
</tr>
<tr valign="top" style="height:7px">
<td colspan="9">
</td>
</tr>
<tr valign="top" style="height:21px">
<td colspan="5">
</td>
<td colspan="2" style="text-indent: 0px; text-align: right;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #6B66FA; font-size: 10px; line-height: 1.2578125;">HCH-A - Aortenklappenchirurgie, isoliert </span>
</td>
<td colspan="2">
</td>
</tr>
<tr valign="top" style="height:91px">
<td colspan="9">
</td>
</tr>
<tr valign="top" style="height:50px">
<td colspan="4">
</td>
<td colspan="2">
<img src="report7921484792758494686.html_files/img_0_3_2" style="width: 50px" alt="" />
</td>
<td colspan="3">
</td>
</tr>
<tr valign="top" style="height:24px">
<td colspan="9">
</td>
</tr>
<tr valign="top" style="height:477px">
<td colspan="3">
</td>
<td colspan="5" style="text-indent: 0px; text-align: left;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif;r Brustkorb, im 4. oder 5. Rippenzwischenraum) freigelegt. <br/>- Beim endovaskulären Aortenklappenersatz ist lediglich ein gezielter Einstich (Punktion), zumeist in die Leistenarterie, notwendig. <br/><br/>Bei beiden kathetergestützten Methoden wird über ein spezielles Ballonkathetersystem zunächst der Bereich der </span>
</td>
<td>
</td>
</tr>
<tr valign="top" style="height:125px">
<td colspan="9">
</td>
</tr>
</table>
<br/>
<br/>
<a name="JR_PAGE_ANCHOR_0_5"></a>
<table class="jrPage" cellpadding="0" cellspacing="0" border="0" style="empty-cells: show; width: 595px; border-collapse: collapse; background-color: white;">
<tr valign="top" style="height:0">
<td style="width:10px"></td>
<td style="width:10px"></td>
<td style="width:50px"></td>
<td style="width:220px"></td>
<td style="width:80px"></td>
<td style="width:201px"></td>
<td style="width:24px"></td>
</tr>
<tr valign="top" style="height:27px">
<td colspan="7">
</td>
</tr>
<tr valign="top" style="height:20px">
<td>
</td>
<td colspan="2" style="text-indent: 0px; text-align: left;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #BABABA; font-size: 10px; line-height: 1.2578125;">Ergebnisse</span>
</td>
<td colspan="4">
</td>
</tr>
<tr valign="top" style="height:7px">
<td colspan="7">
</td>
</tr>
<tr valign="top" style="height:21px">
<td colspan="5">
</td>
<td style="text-indent: 0px; text-align: right;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #6B66FA; font-size: 10px; line-height: 1.2578125;">HCH-A - Aortenklappenchirurgie, isoliert </span>
</td>
<td>
</td>
</tr>
<tr valign="top" style="height:139px">
<td colspan="7">
</td>
</tr>
<tr valign="top" style="height:264px">
<td colspan="2">
</td>
<td colspan="2" style="text-indent: 0px; text-align: left;">
<span style="font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; color: #000000; font-size: 10px; line-height: 1.2578125;">alten, verengten Aortenklappe erweitert. Anschließend wird eine zusammengefaltete Herzklappenchirurgie fokussieren schwere Komplikationen und Sterblichkeit. Bei der kathetergestützten Aortenklappenchirurgie wird darüber hinaus auch die Indikationsstellung betrachtet.<br/><br/>Sofern nicht anders angegeben, ist die Beschreibung der Qualitätsindikatoren des AQUA-Institutes.</span>
</td>
<td colspan="3">
</td>
</tr>
<tr valign="top" style="height:364px">
<td colspan="7">
</td>
</tr>
</table>
<br/>
<br/>
<a name="JR_PAGE_ANCHOR_0_6"></a>
<table class="jrPage" cellpadding="0" cellspacing="0" border="0" style="empty-cells: show; width: 595px; border-collapse: collapse; background-color: white;">
<tr valign="top" style="height:0">
<td style="width:595px"></td>
</tr>
<tr valign="top" style="height:842px">
<td>
</td>
</tr>
</table>
<![if IE]>
<script>
var links = document.querySelectorAll('link.jrWebFont');
setTimeout(function() {
if (links) {
for (var i = 0; i < links.length; i++) {
links.item(i).href = links.item(i).href;
}
}
}, 0);
</script>
<![endif]>
</td>
<td width="50%"> </td>
</tr>
</table>
</body>
</html>
如何实现这个结构?
如果您使用 html 组件将文本环绕在图像周围,您不仅会遇到从数据库中提取图像的问题,html 组件还会创建 html,因此内容可能是 resized/clipped,具体取决于文本长度和 html(图像)组件上的设置。
我建议使用两个 textField
环绕图像(请参阅 jrxml),然后计算文本将在何处进入下一个字段,这样您就可以首先获得文本的第一部分 textField
和第二部分 textField
Java 计算文本断点的代码
此代码演示了如何使用 FontMetric
来计算 Jasper Report 将根据 textField
的大小中断文本的位置(代码说明在注释中)。该代码在 NullPointer
(null
文本)和非溢出文本上不是完全安全的,此外它可以优化,但我会把它留给 OP
import java.awt.Font;
import java.awt.font.FontRenderContext;
import java.awt.geom.AffineTransform;
public class WrapImage {
/**
* Get position where string will break
* @param text, the text
* @param width, the width of the component
* @param height, the height of the component
* @return the position
*/
public static int getBreakPosition(String text, int width, int height){
//Start font context
AffineTransform affinetransform = new AffineTransform();
FontRenderContext frc = new FontRenderContext(affinetransform,true,true);
//Set same font as used in jasper-report
Font font = new Font("SansSerif", Font.PLAIN, 10);
//Get height to understand how many lines
double textheight = font.getStringBounds(text, frc).getHeight();
int nrLines = (int)Math.floor(height/textheight);
//init variables
int breakPos = 0;
int line = 1;
//loop the lines
while (line<=nrLines){
//get remaining text
String textPart = text.substring(breakPos,text.length());
//get how much text will fit in line
breakPos += getLineBreakPosition(textPart, width, font, frc)+1;
line++;
}
return breakPos;
}
/**
* Get where a single line will break
* @param text, the text
* @param width, width of component
* @param font, the font used
* @param frc, the FontRenderContext
* @return
*/
protected static int getLineBreakPosition(String text, int width, Font font, FontRenderContext frc){
int breakPos = 0;
String tmpText = text;
while (font.getStringBounds(tmpText, frc).getWidth()>width){
//the break position is space
breakPos = tmpText.lastIndexOf(' ');
if (breakPos<=0){
breakPos = 0;
break;
}
tmpText = tmpText.substring(0,breakPos);
}
return breakPos;
}
}
jrxml 示例使用 java 代码
在这个简短的示例中,我使用了一个带有一些 arbitrary sample text. The WrapImage
class is in class path. I set a variable to the calculated break point. Then use substring
on the text to get first part in first textfield
, second in second textField
To simplify example, I'm using an image from desktop, for how to pull image from database see: Using images stored in database
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="wrappingText" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" isSummaryWithPageHeaderAndFooter="true" uuid="cd3e4316-a3c4-4847-a085-3bfa1d9425af">
<parameter name="longText" class="java.lang.String">
<defaultValueExpression><![CDATA["Whether you've come to ask questions, or to generously share what you know, remember that we’re all here to learn, together. Be welcoming and patient, especially with those who may not know everything you do. Oh, and bring your sense of humor. Just in case. That basically covers it. But these three guidelines may help: Rudeness and belittling language are not okay. Your tone should match the way you'd talk in person with someone you respect and whom you want to respect you. If you don't have time to say something politely, just leave it for someone who does. Be welcoming, be patient, and assume good intentions. Don't expect new users to know all the rules — they don't. And be patient while they learn. If you're here for help, make it as easy as possible for others to help you. Everyone here is volunteering, and no one responds well to demands for help. Don't be a jerk. These are just a few examples. If you see them, flag them. In summary, have fun, and be good to each other."]]></defaultValueExpression>
</parameter>
<variable name="breakPos" class="java.lang.Integer">
<initialValueExpression><![CDATA[WrapImage.getBreakPosition($P{longText}, 250, 100)]]></initialValueExpression>
</variable>
<title>
<band height="220" splitType="Stretch">
<image>
<reportElement x="10" y="20" width="80" height="80" uuid="6b4bb467-f7fd-4a15-994b-7c1a01b86428"/>
<imageExpression><![CDATA["C:\Users\pette\Desktop\queen_bee.jpg"]]></imageExpression>
</image>
<textField>
<reportElement x="100" y="0" width="250" height="100" uuid="f4507624-0410-4feb-9dc5-7d3342b882f0"/>
<textElement textAlignment="Justified" verticalAlignment="Bottom"/>
<textFieldExpression><![CDATA[$P{longText}.substring(0,$V{breakPos}.intValue())]]></textFieldExpression>
</textField>
<textField>
<reportElement x="0" y="100" width="350" height="120" uuid="8790bbdd-2066-4ceb-9fc9-dad6154df88c"/>
<textElement textAlignment="Justified"/>
<textFieldExpression><![CDATA[$P{longText}.substring($V{breakPos}.intValue()+1)]]></textFieldExpression>
</textField>
</band>
</title>
</jasperReport>