2015-11-17 2 views
1

Проблема: существующая система, которая печатает введенное пользователем содержимое (на разных языках) в отчете в формате pdf, в некоторых случаях приводит к неправильному разбиению слов, например "exampl-e".JasperReports: поддержка мягкого дефиса

Мягкий дефис - это особый невидимый символ, который помещается между словами, а когда слово не подходит и должно быть сломано, этот символ намекает на систему, где имеет смысл сделать перерыв.

Если пользователь ввел "exam<theMagicSymbol>ple", то, если бы слово было сломанно, это было бы как "examp-ple".

Вопрос: Есть ли в продаже существующие решения для jasperReprots?

Примечание Я новичок в этой библиотеке, но я не мог найти что-нибудь близко к мягкой поддержки обертывания ...

ответ

1

Самый простой способ заключается в использовании непосредственно textFieldExpression (в вашем примере использовать регулярное выражение "<[^>]*>" перед тем печать текста).

<textFieldExpression><![CDATA[$F{field1}.replaceAll("<[^>]*>", "")]]></textFieldExpression> 

Другие решения:

На яшмы textField вы задаете markup="html"

Пример:

<textField> 
    <reportElement x="0" y="4" width="100" height="20" uuid="2cfd9640-f7ce-4bbe-a024-7b1b53d3b72b"/> 
    <textElement markup="html"> 
     <paragraph lineSpacing="Single"/> 
    </textElement> 
    <textFieldExpression><![CDATA[$F{field1}]]></textFieldExpression> 
</textField> 

Это будет обрабатывать текст, как если бы это был HTML, весь текст код форматирования будет работать как es. <b>Test</b> приведет к этому Тестирование и все код форматирования текста будет удален (например, таблица, img ecc).

Окончательное решение

Если вы все еще не довольны, что вам нужно более продвинутый код для форматирования текста, решение собственный класс, что форматирование текста.

Простой пример:

<textField> 
    <reportElement x="0" y="4" width="100" height="20" uuid="2cfd9640-f7ce-4bbe-a024-7b1b53d3b72b"/> 
    <textElement markup="none"> 
    <paragraph lineSpacing="Single"/> 
    </textElement> 
    <textFieldExpression><![CDATA[com.my.package.JasperReportTextHandler.format($F{field1})]]></textFieldExpression> 
</textField> 

Создание класса Java JasperReportTextHandler в пакете com.my.package со статическим методом:

class JasperReportTextHandler{ 
    public static String format(String value){ 
    //... do your stuff regEx, split... 
    return value; 
    } 
} 

Просто убедитесь, что JasperReportTextHandler находится в пути к классам при выполнении отчета.

Have Fun

+0

удивительным спасибо, кажется, нет никаких ограничений :) – vach

+0

Petter могли бы вы дать мне несколько подсказок, с чего начать, я пытаюсь использовать библиотеку яшма без XML просто чисто Java API ... Мне нужно создать образец страницы с таблицей в ней (экспериментировать с делом). – vach

+0

Я использую 3.5.1 (причина некоторых проблем в будущих выпусках, которые не позволяют нам обновляться), но я не могу найти подходящую документацию для этой версии или любого учебника для чистого использования Java ... – vach

Смежные вопросы