Как использовать штрих-коды в JasperReport?
Я хочу показать на своем JasperRepost один штрих-код EAN13. У меня есть 13-значный ввод в списке полей для него (SQL-запрос также в порядке), но в JasperSoft Studio 6.6.0 элемент "Штрих-код" в палитре, кажется, не работает с перетаскиванием (не делает) не делай ничего печального...). Итак... Я пошел в исходный вид и сделал несколько поисков в Google, как должен выглядеть элемент штрих-кода, и нашел это:
<componentElement>
<reportElement x="0" y="100" width="200" height="50" uuid="48d9d636-7e04-43df-9fa2-5c3f6edf27da"/>
<c:barbecue xmlns:c="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" type="EAN13" drawText="true" checksumRequired="false">
<c:codeExpression><![CDATA[$F{EAN}]]></c:codeExpression>
</c:barbecue>
</componentElement>
Но, это также, кажется, не в порядке, потому что я получил эту ошибку, если я хочу просмотреть ее:
net.sf.jasperreports.engine.JRException: net.sf.jasperreports.engine.JRRuntimeException: Error creating barcode.
at com.jaspersoft.studio.editor.preview.view.control.ReportController.fillReport(ReportController.java:536)
at com.jaspersoft.studio.editor.preview.view.control.ReportController.access$17(ReportController.java:511)
at com.jaspersoft.studio.editor.preview.view.control.ReportController$1.run(ReportController.java:429)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)
Caused by: net.sf.jasperreports.engine.JRRuntimeException: Error creating barcode.
at net.sf.jasperreports.components.barbecue.BarcodeProviders.createBarcode(BarcodeProviders.java:114)
at net.sf.jasperreports.components.barbecue.BarbecueFillComponent.setBarcodeImage(BarbecueFillComponent.java:142)
at net.sf.jasperreports.components.barbecue.BarbecueFillComponent.fill(BarbecueFillComponent.java:111)
at net.sf.jasperreports.engine.fill.JRFillComponentElement.fill(JRFillComponentElement.java:198)
at net.sf.jasperreports.engine.fill.JRFillElementContainer.fillElements(JRFillElementContainer.java:1039)
at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:469)
at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:417)
at net.sf.jasperreports.engine.fill.JRHorizontalFiller.fillFixedBand(JRHorizontalFiller.java:2553)
at net.sf.jasperreports.engine.fill.JRHorizontalFiller.fillDetail(JRHorizontalFiller.java:853)
at net.sf.jasperreports.engine.fill.JRHorizontalFiller.fillReportStart(JRHorizontalFiller.java:264)
at net.sf.jasperreports.engine.fill.JRHorizontalFiller.fillReport(JRHorizontalFiller.java:116)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:615)
at net.sf.jasperreports.engine.fill.BaseFillHandle$ReportFill.run(BaseFillHandle.java:135)
at java.lang.Thread.run(Thread.java:748)
Caused by: net.sourceforge.barbecue.BarcodeException: Invalid data length
at net.sourceforge.barbecue.linear.upc.UPCABarcode.<init>(Unknown Source)
at net.sourceforge.barbecue.linear.upc.UPCABarcode.<init>(Unknown Source)
at net.sourceforge.barbecue.linear.ean.EAN13Barcode.<init>(Unknown Source)
at net.sourceforge.barbecue.BarcodeFactory.createEAN13(Unknown Source)
at net.sf.jasperreports.components.barbecue.BarcodeProviders$EAN13Provider.createBaseBarcode(BarcodeProviders.java:241)
at net.sf.jasperreports.components.barbecue.BaseBarcodeProvider.createBarcode(BaseBarcodeProvider.java:40)
at net.sf.jasperreports.components.barbecue.BarcodeProviders.createBarcode(BarcodeProviders.java:110)
... 13 more
Ват может быть проблема? Неверная длина данных? Мое тестовое значение штрих-кода действительно таково: 6941057402314, ровно 13 цифр. Это значение хранится в БД как VARCHAR, может ли это быть проблемой?
РЕДАКТИРОВАТЬ.:
Хорошо, я узнал, что это может быть проблема с барбекю: исключение Babrbecue, но это 10 лет...
Спасибо.
1 ответ
Как оказалось, длина штрих-кода EAN13 на самом деле составляет 12 цифр, рассчитывается 13-я цифра. Так что, если я изменил его до 12 цифр, штрих-код генерируется.