There are several libraries used JasperReports Java API for creating reports with Java:
This libraries/frameworks can build reports "on fly" with or without using report's template (jrxml file)
To render fonts correctly in pdf font-extensions should always be used (in classpath)
Subreports can be used for constructing complex reports. The reusing of existing reports is another goal of using subreports.
The subreport will be shown as a part of master report in case using of <subreport>
element.
The value of subreportExpression parameter is differ for using at JasperReports Server or just by JasperReports framework (some API using or using in IDE).
For JasperReports Server it looks like:
<subreportExpression><![CDATA["repo:subreport.jrxml"]]></subreportExpression>
For using by just JasperReports engine:
<subreportExpression><![CDATA["/somePath/subreport.jasper"]]></subreportExpression>
The great explanation by @AndreasDietrich can be found at JasperServer: Unable to locate the subreport exception post
For some reasons the subreport can be used as a common report - without calling from the master report (with help of <subreport>
element). The subreport is always a report.