JasperReports

Тема в разделе "Lotus + Java + LS2J", создана пользователем erdi, 5 янв 2011.

  1. erdi

    erdi Well-Known Member

    Регистрация:
    20 авг 2008
    Сообщения:
    261
    Симпатии:
    36
    Пытаюсь для вывода отчетов подключить Jasper, но пока никак не выходит.
    Все библиотеки, которые были в jasper положил в клиента в jvm/lib/ext(пока пытаюсь на клиенте поднять отчеты, клиент 8.5.1)
    В дизайнере в параметрах Java эти библиотеки подхватываются
    Создаю Java агента и вставляю код для экспорта в pdf(docx, html и т.д.) в тело агента.
    Агент сохраняется все замечательно, никаких ошибок, все необходимые классы импортнулись в проект, но при выполнении агента возникает ошибка - "net.sf.jasperreports.engine.JRException: Error loading expression class - ...."
    При чем этот самый код в чистом эклипсе работает на ура.
    Пробовал из тела агента вызывать класс, в котором описано все взаимодействия с jasper. но результат тот же. точнее ошибка такая же.
    Но, если этот класс вызывать не в агенте, а выполнить этот класс, то все нормально выгружается, значит проблема именно во взаимодействии Lotus агента и jasper. Причем, кажется проблема в доступе куда-то, но куда - я так и не нашел.

    Может кто направит в нужном направлении, где поискать или что куда-нибудь прикрутить.
     
  2. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.074
    Симпатии:
    300
    это как? ничё импортить не надо (или я чё не понял)
     
  3. erdi

    erdi Well-Known Member

    Регистрация:
    20 авг 2008
    Сообщения:
    261
    Симпатии:
    36
    скорее не так понял...речь идет об обычном import в классе(например - import net.sf.jasperreports.engine.JRException). В 7-ке даже на эту запись ругалось из-за старой ява машины(1,3) в лотусе, а вот в 8.5.1 все гуд....
    для наглядности приведу код
    есть 2 класса:
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">jasper и JavaAgent</div></div><div class="sp-body"><div class="sp-content">код класса jasper
    <!--shcode--><pre><code class='java'>import java.io.File;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Map;
    import java.util.Set;

    import net.sf.jasperreports.engine.JRException;
    import net.sf.jasperreports.engine.JRExporterParameter;
    import net.sf.jasperreports.engine.JasperExportManager;
    import net.sf.jasperreports.engine.JasperFillManager;
    import net.sf.jasperreports.engine.JasperPrint;
    import net.sf.jasperreports.engine.data.JRCsvDataSource;
    import net.sf.jasperreports.engine.export.ooxml.JRDocxExporter;
    import net.sf.jasperreports.engine.util.JRLoader;

    public class jasper {

    private static JRCsvDataSource getDataSource() throws JRException {
    String[] columnNames = new String[]{"city", "id", "name", "address", "state"};
    JRCsvDataSource ds = new JRCsvDataSource(JRLoader.getLocationInputStream("c:/CsvDataSource.txt"));
    ds.setRecordDelimiter("\r\n");
    ds.setColumnNames(columnNames);
    return ds;
    }

    public static void docx() throws JRException {
    long start = System.currentTimeMillis();
    File sourceFile = new File("c:/CsvDataSourceReport.jrprint");

    JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile);

    File destFile = new File(sourceFile.getParent(), jasperPrint.getName() + ".docx");

    JRDocxExporter exporter = new JRDocxExporter();

    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
    exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, destFile.toString());

    exporter.exportReport();

    System.err.println("DOCX creation time : " + (System.currentTimeMillis() - start));
    }

    public static void pdf() throws JRException {
    long start = System.currentTimeMillis();
    //Preparing parameters
    Map parameters = new HashMap();
    parameters.put("ReportTitle", "Address Report");
    parameters.put("DataFile", "CsvDataSource.txt - CSV data source");
    Set states = new HashSet();
    states.add("Active");
    states.add("Trial");
    parameters.put("IncludedStates", states);

    String file = JasperFillManager.fillReportToFile("c:/CsvDataSourceReport.jasper", parameters, getDataSource());
    JasperExportManager.exportReportToPdfFile(file, "c:/hello_report.pdf");
    System.err.println("PDF creation time : " + (System.currentTimeMillis() - start));
    }

    public static void main(String[] args) {
    try {
    pdf();
    docx();
    System.out.println("готово");
    }
    catch (JRException e) {
    e.printStackTrace();
    }
    }

    }[/CODE]
    код класса JavaAgent
    <!--shcode--><pre><code class='java'>import lotus.domino.*;

    public class JavaAgent extends AgentBase {
    public void NotesMain() {
    try {
    jasper.pdf();
    }
    catch (Exception e) {
    e.printStackTrace();
    }
    }
    }[/CODE]
    если класс jasper выполнить самостоятельно, то все нормально, а если вызвать этот класс в классе JavaAgent, то ошибка :(
     
  4. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    искать лучше всего здесь ;-)
    Первая же ссылка... А в четвертой - вообще ваш случай: JasperReports Problem Lotus Notes/Domino Agent
    добавьте в файле jvm/lib/security/java.policy в секцию grant:
    Код (Text):
    permission java.lang.RuntimePermission "createClassLoader";
    permission java.lang.RuntimePermission "getProtectionDomain";
     
  5. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.074
    Симпатии:
    300
    она там 1.4!
    хотя к вопросу это не относится ;)
     
  6. erdi

    erdi Well-Known Member

    Регистрация:
    20 авг 2008
    Сообщения:
    261
    Симпатии:
    36
    спасибо, сработало
    в гугл идти по названию ошибки это правило хорошего тона, само-самой разумеющиеся....
    и ссылку я эту видел, но там меня смутил последний не отвеченный вопрос о том что "Как вы ее решили в конце концов?", посчитал что решение неокончательное
     
  7. vitte

    vitte Well-Known Member

    Регистрация:
    17 ноя 2011
    Сообщения:
    55
    Симпатии:
    0
    Пробую использовать JasperReports. Клиент LN v. 7.0.3. Если использовать последние версии JasperReports LN выдает ошибку при компиляции: class file has wrong version 49.0 should be 48.0.
    Не ругается на версии JasperReports <= 3.7.1.
    Существует ли возможность использовать в LN 7.0.3 JasperReports последних версий?
    Подскажите где можно смотреть/почитать?
     
  8. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.074
    Симпатии:
    300
  9. vitte

    vitte Well-Known Member

    Регистрация:
    17 ноя 2011
    Сообщения:
    55
    Симпатии:
    0
    Понятно (. Спасибо. Переписывать, это конечно врядли, я явой недели 2 занимаюсь. Буду пытаться 3.7.1 использовать. Пока тоже не получается , на фонты ругается, зараза.
     
  10. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.074
    Симпатии:
    300
    если там используется FOP (я не помню) - то фонты надопрописывать в его (ФОПа) конфиге...
    я здесь код выкладывал, для ФОПа, в нём это есть, возможно что в jasperreports есть надстройка, но я не знаю о ней
    для ФОПа делал так:<!--shcode--><pre><code class='java'> ByteArrayInputStream iscfg = new ByteArrayInputStream(sUserConfig.getBytes());
    DefaultConfigurationBuilder cfgBuilder = new DefaultConfigurationBuilder();
    Configuration cfg = cfgBuilder.build(new InputSource(iscfg));
    fopFactory.setUserConfig(cfg);[/CODE]
    где sUserConfig - стринг определённый в классе, по сути содержит хмл
    вот так я "брал" из вайна (в линухах), т.е. основное - font-base:
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">xml-код</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='xml'><fop version='1.0'>
    <font-base>/home/mike/.wine/drive_c/windows/</font-base>
    <default-page-settings height="11in" width="8.26in"/>
    <renderers>
    <renderer mime='application/pdf'>
    <fonts>
    <!-- TTF fonts -->
    <!-- Arial -->
    <font kerning='yes' embed-url='Fonts/arial.ttf'>
    <font-triplet name='Arial' style='normal' weight='normal'/>
    </font>
    <font kerning='yes' embed-url='Fonts/arialbd.ttf'>
    <font-triplet name='Arial' style='normal' weight='bold'/>
    </font>
    <font kerning='yes' embed-url='Fonts/ariali.ttf'>
    <font-triplet name='Arial' style='italic' weight='normal'/>
    </font>
    <font kerning='yes' embed-url='Fonts/arialbi.ttf'>
    <font-triplet name='Arial' style='italic' weight='bold'/>
    </font>
    <font kerning='yes' embed-url='Fonts/times.ttf'>
    <font-triplet name='TimesNewRoman' style='normal' weight='normal'/>
    </font>
    <font kerning='yes' embed-url='Fonts/timesbd.ttf'>
    <font-triplet name='TimesNewRoman' style='normal' weight='bold'/>
    </font>
    <font kerning='yes' embed-url='Fonts/timesi.ttf'>
    <font-triplet name='TimesNewRoman' style='italic' weight='normal'/>
    </font>
    <font kerning='yes' embed-url='Fonts/timesbi.ttf'>
    <font-triplet name='TimesNewRoman' style='italic' weight='bold'/>
    </font>
    <font kerning='yes' embed-url='Fonts/cour.ttf'>
    <font-triplet name='Courier' style='normal' weight='normal'/>
    </font>
    <font kerning='yes' embed-url='Fonts/courbd.ttf'>
    <font-triplet name='Courier' style='normal' weight='bold'/>
    </font>
    <font kerning='yes' embed-url='Fonts/couri.ttf'>
    <font-triplet name='Courier' style='italic' weight='normal'/>
    </font>
    <font kerning='yes' embed-url='Fonts/courbi.ttf'>
    <font-triplet name='Courier' style='italic' weight='bold'/>
    </font>
    <font kerning='yes' embed-url='Fonts/verdana.ttf'>
    <font-triplet name='Verdana' style='normal' weight='normal'/>
    </font>
    <font kerning='yes' embed-url='Fonts/verdanab.ttf'>
    <font-triplet name='Verdana' style='normal' weight='bold'/>
    </font>
    <font kerning='yes' embed-url='Fonts/verdanai.ttf'>
    <font-triplet name='Verdana' style='italic' weight='normal'/>
    </font>
    <font kerning='yes' embed-url='Fonts/verdanaz.ttf'>
    <font-triplet name='Verdana' style='italic' weight='bold'/>
    </font>
    </fonts>
    </renderer>
    </renderers>
    </fop>[/CODE]
     
  11. vitte

    vitte Well-Known Member

    Регистрация:
    17 ноя 2011
    Сообщения:
    55
    Симпатии:
    0
    нет у меня другая ошибка вылазит:
    <...Running com.ixtlansoft.myjasper.JasperExampleTest
    янв 11, 2012 1:32:10 PM net.sf.jasperreports.extensions.DefaultExtensionsRegistry loadRegistries
    SEVERE: Error instantiating extensions registry for fonts
    net.sf.jasperreports.engine.JRRuntimeException: Could not load class net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
    at net.sf.jasperreports.engine.util.ClassUtils.instantiateClass(ClassUtils.java:64)
    at net.sf.jasperreports.extensions.DefaultExtensionsRegistry.instantiateRegistry(De
    faultExtensionsRegistry.java:198).....>
     
  12. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.074
    Симпатии:
    300
    куда положили либы? если не в jvm/lib/ext (это такой каталог не диске, где установлена нотусня) - могут быть разные траблы
     
  13. vitte

    vitte Well-Known Member

    Регистрация:
    17 ноя 2011
    Сообщения:
    55
    Симпатии:
    0
    да это даже ещё не лотус.. простой пример запустить не могу в нетбтне
     
  14. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.074
    Симпатии:
    300
    странно апример-то откудова - сами сочиняли или готовый из сорцов взяли?
     
  15. vitte

    vitte Well-Known Member

    Регистрация:
    17 ноя 2011
    Сообщения:
    55
    Симпатии:
    0
  16. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.074
    Симпатии:
    300
    turumbay рассказывает про более актуальную версию...
    и не факт, что строки:
    jasperreports_extension.properties:
    net.sf.jasperreports.extension.registry.factory.fonts=net.sf.jasperreports.engin
    e.fonts.SimpleFontExtensionsRegistryFactory
    net.sf.jasperreports.extension.simple.font.families.ireport=irfonts.xml
    будут дейстоввать в ранней - надо смореть классы (могут иметь др. архитектуру)
    исходя из сообщения (ою ошибке) - именно этот класс и не находит
     
  17. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    http://www.jarvana.com/jarvana/view/net/sf....java?format=ok
    Попробуйте создать собственный класс по образу и подобию и подключить в jasperreports_extension.properties вместо родного.
    Как-то оно взлетало и в семерке, но кода под рукой нету, а на память не скажу. Но версию пришлось понижать - это факт. Возможно, как раз до 3.7.
    Я, помница, брал соответствующую версию ireport и смотрел проект, который она генерит. На основании этого клеил под R7.
    Вечером попробую найти, отпишусь...

    P.S. с джаспером( и прочими, использующими Apache Common Logging ) есть еще один хитрый нюанс: если будете включать либы в агента - получите утечку памяти. Для решения проблемы нужно отпустить класслоадер:
    Код (Text):
     ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
    LogFactory.release(contextClassLoader);
    Подробнее тут
     
  18. vitte

    vitte Well-Known Member

    Регистрация:
    17 ноя 2011
    Сообщения:
    55
    Симпатии:
    0
    включил в проект 3 класса по образу и подобию:
    FontExtensionsRegistry
    SimpleFontExtensionHelper
    SimpleFontExtensionsRegistryFactory
    подключил их, и вроде нормально создался jar, но под java 7. При построении под под java 4
    выдает <!--QuoteBegin-ошибку+-->
    <table border="0" cellpadding="0" cellspacing="0" align="center" width="98%"> [tr] <td class="vbquote"> <table border="0" cellpadding="0" cellspacing="0" width="100%"> [tr] <td class="vbquote" width="75" valign="bottom"> <table border="0" cellpadding="0" cellspacing="0" width="50px"> [tr] <td class="vbquote" width="28" valign="top">[​IMG]</td> <td class="vbquote" width="100%" style="background-image: url('style_images/ckr/quotes/quote-bg.gif'); background-position: center;" valign="middle"><span class="vbquote">Цитата:</span></td> <td class="vbquote" valign="top">[​IMG]</td> [/tr] </table> </td> <td class="vbquote" align="left" style="background-image: url('style_images/ckr/quotes/quot-lr-bg.gif')" valign="bottom"></td><td class="vbquote" width="0" align="left" valign="bottom"> <table border="0" cellpadding="0" cellspacing="0" width="200"> [tr] <td class="vbquote" valign="top">[​IMG]</td> <td class="vbquote" width="100%" style="background-image: url('style_images/ckr/quotes/quot-bye-bg.gif')" align="left" valign="middle" nowrap="nowrap"><span class="vbquote">(ошибку)</span></td> <td class="vbquote" valign="top">[​IMG]</td> [/tr] </table> </td><td class="vbquote" width="100%" align="right" valign="bottom"> <table border="0" cellpadding="0" cellspacing="0" width="100%"> [tr] <td class="vbquote" width="100%"> <table border="0" cellpadding="0" cellspacing="0" width="100%"> [tr] <td class="vbquote" style="background-image: url('style_images/ckr/quotes/quot-top-bg.gif')" width="100%" valign="middle"></td> <td class="vbquote" align="left" valign="top">[​IMG]</td> [/tr] </table> </td> [/tr] </table> </td> [/tr] </table> <table border="0" cellpadding="0" cellspacing="0" width="100%"> [tr] <td class="vbquote" width="10" style="background-image: url('style_images/ckr/quotes/quoting-left.gif')"></td> <td class="vbquotemain" width="100%" valign="top"></td> <td class="vbquote" width="10" style="background-image: url('style_images/ckr/quotes/quoting-right.gif')"></td> [/tr] [tr] <td class="vbquote" width="10" style="background-image: url('style_images/ckr/quotes/quot-left-bg.gif')"></td> <td class="vbquotemain" width="100%" valign="top"><!--QuoteEBegin-->cd D:\temp\myJasper\myJasper; "JAVA_HOME=C:\\Program Files\\Java\\j2sdk1.4.2_16" "\"C:\\Program Files\\NetBeans 7.0.1\\java\\maven\\bin\\mvn.bat\"" clean install
    java.lang.UnsupportedClassVersionError: org/apache/maven/cli/MavenCli (Unsupported major.minor version 49.0)<!--QuoteEnd--></td> [/tr] [tr] [/tr] </table> </td> [/tr] </table>
    <!--QuoteEEnd--><div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">остальной стек-трейс</div></div><div class="sp-body"><div class="sp-content">
    сейчас ищу способы как это препятствие обойти (
     
  19. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    Вариант 1:(как было у меня) тупо понизить версию jasperreports до 3.0.0
    В 3.0.0 нету font extension и достаточно положить файл шрифта в classpath.

    Вариант 2: (более толковый, но слегка шаманский) найден по мотивам этого поста.
    чтобы в R7 взлетел jasper 3.7.1, можно выполнить следующий танец
    - добавить в проект классы из 3.7.2: FontExtensionRegistry, SimpleFontExtensionHelper и SimpleFontExtensionsRegistryFactory из пакета net/sf/jasperreports/engine/fonts/
    - поправить код класса SimpleFontExtensionHelper ( в семерке используется слегка древняя реализация org.w3c.dom.* )
    далее, по известной схеме.

    В аттачах - два проекта, под первый и второй вариант соответственно.

    В первом проекте, заодно продемонстрирована возможность тестирования мавеновского проекта прямо в нотусовой jvm.
    Для этого в pom.xml в настройках maven-surefire-plugin нужно указать путь к лотусовой java.exe ( у меня: c:\lotus\notes\jvm\bin\java.exe )
    Дать в папке проекта команду mvn clean test. В результате должен появится заветный preved.pdf
    Также в проекте настроен assembly-plugin - для сборки готового jar-ника ( подробности смотри в статье на постеросе )

    Если есть установленный эклипс (лучше 3.7, там поддержка мавена "из коробки") - то достаточно импортировать проект, заменить в build path проекта дефолтную jvm на лотусовую и запустить тесты.
    Именно так делался второй проект, поэтому там нет возни с секцией build вообще...
     

    Вложения:

  20. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    сам мавен требует версии java не ниже 1.5.
    при этом в качестве "рабочей"(той, под которой будет компилироваться или тестироваться) можно указать любую jvm.
    Т.о. обычно делается так: JAVA_HOME - указывает на нормальную jdk. ( рекомендуется последняя, т.е. на текущий момент 1.7-u2 ). Это ваша девелоперская jdk, в которой работает maven, eclipse и пр.

    В настройках проекта указывается нужная(проекту) версия компилятора:
    <properties>
    ...
    <maven.compiler.source>1.4</maven.compiler.source>
    <maven.compiler.target>1.4</maven.compiler.target>
    </properties>

    При желании, можно запустить компиляцию и/или тесты в jvm, отличной от JAVA_HOME. Описание конфигурации в предыдущем посте.
     
Загрузка...
Похожие Темы - JasperReports
  1. Num2
    Ответов:
    0
    Просмотров:
    1.706

Поделиться этой страницей