Генерация pdf на ubuntu 14.04 server

Обсуждение Stimulsoft Reports.JAVA
muzuro
Сообщения: 10
Зарегистрирован: 21 окт 2014, 18:41

Генерация pdf на ubuntu 14.04 server

Сообщение muzuro »

Здравствуйте, при генерации отчёта на серверной убунте(без графических пакетов) некорректно отображаються шрифты любого элемента(см вложение).
Есть предположение что для корректно генерации нужны какието дополнительные пакеты(пробовали на десктопной - там вроде генерились). Подскажите в этом ли причина, и какие пакеты нужно поставить, чтоб отображалось корректно?
Вложения
incorrect.png
incorrect.png (11.74 КБ) 6061 просмотр
HighAley
Сообщения: 1998
Зарегистрирован: 08 июн 2011, 11:36
Откуда: Stimulsoft Office

Re: Генерация pdf на ubuntu 14.04 server

Сообщение HighAley »

Здравствуйте.

В PDF задаётся ширина каждого символа, которая возвращается системой на основе данных из файлы шрифта.
Похоже, что проблема в отсутствии необходимых шрифтов с кириллицей.
Экспортируйте отчёт в PDF с включенной опцией Embedded Fonts и пришлите его нами для анализа.

Спасибо.
lexun
Сообщения: 16
Зарегистрирован: 22 дек 2014, 19:05

Re: Генерация pdf на ubuntu 14.04 server

Сообщение lexun »

muzuro писал(а):Здравствуйте, при генерации отчёта на серверной убунте(без графических пакетов) некорректно отображаються шрифты любого элемента(см вложение).
Есть предположение что для корректно генерации нужны какието дополнительные пакеты(пробовали на десктопной - там вроде генерились). Подскажите в этом ли причина, и какие пакеты нужно поставить, чтоб отображалось корректно?
Прошу прощения за офтоп, у меня задача в общем схожая с вашей - генерация отчетов на стороне сервера. Мы выбрали изначально продукт Stimulsoft Reports.Fx for PHP, и уже разработали шаблоны документов, но эта версия идет только с клиентским генератором и теперь приходится разбираться как сделать на Java. К сожалению опыта разработки на Java совсем нет, и постоянно возникают трудности связанные с этим.
Вопрос собственно в следующем - не могли бы вы поделится пилотным проектом который бы показал как и что подключать чтобы реализовать генерацию отчета по заданному шаблону mrt c возвратом pdf(например) документа.
Заранее благодарен.
Aleksey
Сообщения: 2784
Зарегистрирован: 22 апр 2010, 06:57

Re: Генерация pdf на ubuntu 14.04 server

Сообщение Aleksey »

Здравствуйте,

Пожалуйста, посмотрите следующие разделы в нашей документации:
http://www.stimulsoft.com/ru/documentat ... eports.htm
http://www.stimulsoft.com/ru/documentat ... t_code.htm

Дайте знать если возникнут вопросы.
Спасибо.
lexun
Сообщения: 16
Зарегистрирован: 22 дек 2014, 19:05

Re: Генерация pdf на ubuntu 14.04 server

Сообщение lexun »

Пример сгенерированного на PHP отчета:
http://reports.storencash.com/index.php ... E3NTM5In0=
тут есть параметр spzSID=1
который используется в DataSources:
WHERE msus.spz_sid = '{spzSID}'
AND msus.ost > 0
GROUP BY
msus.id
ORDER BY snon.art
) as tmp</SqlCommand>
</List>
</DataSources>

Как мне добавить этот параметр в Java чтобы конвертер построил отчет так же как на php?

Код: Выделить всё

	    	    
renderReport.getDictionary().getDatabases().add(new StiMySqlDatabase("dbConnect", "dbConnect", "host=" + host + ";port=3306;database=" + domain + ";user=" + username + ";password=" + password + ";"));
	    	    StiVariablesCollection cv = new StiVariablesCollection();
	    	    cv.add("spzSID"); //добавляет в раздел Variables только значения value spzSID но не параметр
	    	    cv.add("spzSID1");
	    	    cv.add("spzSID2");
	    	    renderReport.getDictionary().getVariables().addAll(cv);
Пытался разными способами передать - никак не получается
Заранее благодарен.
Вложения
testFile2.mrt
(44.1 КБ) 477 скачиваний
Vadim
Сообщения: 107
Зарегистрирован: 04 апр 2013, 12:26

Re: Генерация pdf на ubuntu 14.04 server

Сообщение Vadim »

Здравствуйте.
Вам нужно в отчете создать переменную (Variable) spzSID
Использовать её, как у вас уже готово, в sql-запросе ...WHERE msus.spz_sid = '{spzSID}'....
Пример использования переменных на JSP странице:
<%
Map<String, String> variableMap = new HashMap<String, String>();
variableMap.put("spzSID", request.getParameter("spzSID"));
request.setAttribute("map",variableMap);
%>
<stiviewerfx:iframe report="c:\0\params.mrt" variableMap="map"
width="100%" height="100%" align="top" scrolling="no" />
lexun писал(а):Пример сгенерированного на PHP отчета:
http://reports.storencash.com/index.php ... E3NTM5In0=
тут есть параметр spzSID=1
который используется в DataSources:
WHERE msus.spz_sid = '{spzSID}'
AND msus.ost > 0
GROUP BY
msus.id
ORDER BY snon.art
) as tmp</SqlCommand>
</List>
</DataSources>

Как мне добавить этот параметр в Java чтобы конвертер построил отчет так же как на php?

Код: Выделить всё

	    	    
renderReport.getDictionary().getDatabases().add(new StiMySqlDatabase("dbConnect", "dbConnect", "host=" + host + ";port=3306;database=" + domain + ";user=" + username + ";password=" + password + ";"));
	    	    StiVariablesCollection cv = new StiVariablesCollection();
	    	    cv.add("spzSID"); //добавляет в раздел Variables только значения value spzSID но не параметр
	    	    cv.add("spzSID1");
	    	    cv.add("spzSID2");
	    	    renderReport.getDictionary().getVariables().addAll(cv);
Пытался разными способами передать - никак не получается
Заранее благодарен.
lexun
Сообщения: 16
Зарегистрирован: 22 дек 2014, 19:05

Re: Генерация pdf на ubuntu 14.04 server

Сообщение lexun »

У меня есть готовый mrt - который генерируется на php, в него передается get параметр spzSID
так вот вопрос в том что у меня теперь отчет на Java строится на сервере а не на клиенте и мне нужно как-то передать этот параметр в шаблон, как это сделать на Java?

Код: Выделить всё


//Сервлет генерирующий на сервере по указанному шаблону PDF документ 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
/**
 * некий код
 */
    StiReport renderReport = StiSerializeManager.deserializeReport(bis);
    if (!mParams.isEmpty()) {
        for (Map.Entry<String, String> entry : mParams.entrySet()) {
            //Что-то нужно сделать чтобы передать в отчет переменные со значениями????
            //renderReport.setVariable(entry.getKey(), entry.getValue());
        }
    }
    renderReport.Render(false);
    ByteArrayOutputStream bos = new ByteArrayOutputStream();  
    StiPdfExportSettings settingsPdf = new StiPdfExportSettings();
    response.setContentType("application/pdf; charset=cp1251");
    StiExportManager.exportPdf(renderReport, settingsPdf, bos);
    byte[] binaryData = bos.toByteArray();
    response.addHeader("Content-Length", String.valueOf(binaryData.length));
    StiIOUtil.writeInputStream(response.getOutputStream(), new ByteArrayInputStream(binaryData));
}
Vadim
Сообщения: 107
Зарегистрирован: 04 апр 2013, 12:26

Re: Генерация pdf на ubuntu 14.04 server

Сообщение Vadim »

Здравствуйте.
Вы можете использовать следующий пример кода:

report.getDictionary().getVariables().get("Variable1").setValue("3");
report.getVariables().put("Variable1", "3");

lexun писал(а):У меня есть готовый mrt - который генерируется на php, в него передается get параметр spzSID
так вот вопрос в том что у меня теперь отчет на Java строится на сервере а не на клиенте и мне нужно как-то передать этот параметр в шаблон, как это сделать на Java?

Код: Выделить всё


//Сервлет генерирующий на сервере по указанному шаблону PDF документ 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
/**
 * некий код
 */
    StiReport renderReport = StiSerializeManager.deserializeReport(bis);
    if (!mParams.isEmpty()) {
        for (Map.Entry<String, String> entry : mParams.entrySet()) {
            //Что-то нужно сделать чтобы передать в отчет переменные со значениями????
            //renderReport.setVariable(entry.getKey(), entry.getValue());
        }
    }
    renderReport.Render(false);
    ByteArrayOutputStream bos = new ByteArrayOutputStream();  
    StiPdfExportSettings settingsPdf = new StiPdfExportSettings();
    response.setContentType("application/pdf; charset=cp1251");
    StiExportManager.exportPdf(renderReport, settingsPdf, bos);
    byte[] binaryData = bos.toByteArray();
    response.addHeader("Content-Length", String.valueOf(binaryData.length));
    StiIOUtil.writeInputStream(response.getOutputStream(), new ByteArrayInputStream(binaryData));
}
lexun
Сообщения: 16
Зарегистрирован: 22 дек 2014, 19:05

Re: Генерация pdf на ubuntu 14.04 server

Сообщение lexun »

Это рабочий отчет на PHP:
http://reports.storencash.com/index.php ... E3NTM5In0=
Это тот же отчет c попыткой формирования на Java (на сервере):
http://ec2-54-194-133-188.eu-west-1.com ... =&spzSID=1

Вот точно такой же отчет только без параметров:
http://ec2-54-194-133-188.eu-west-1.com ... =&spzSID=1

Такой же отчет без параметров но экспортированный в HTML:
http://ec2-54-194-133-188.eu-west-1.com ... =&spzSID=1

Тут видна еще проблема с кодировкой, но это следующая задача.

Ошибка формирования отчета с параметром:

Код: Выделить всё

java.lang.RuntimeException: com.stimulsoft.base.exception.StiException: StiJDBCDatabase [connectionString=host=localhost;port=3306;database=***;user=***;password=***;, promptUserNameAndPassword=false, url=jdbc:mysql://localhost:3306/***, user=***, password=***, driver=com.mysql.jdbc.Driver, other={}]
	at com.stimulsoft.report.dictionary.StiDictionary.connect(StiDictionary.java:1218)
	at com.stimulsoft.report.engine.engineV2.StiRenderProviderV2.ConnectToData(StiRenderProviderV2.java:387)
	at com.stimulsoft.report.engine.engineV2.StiRenderProviderV2.Render(StiRenderProviderV2.java:124)
	at com.stimulsoft.report.engine.engineV2.builders.StiReportV2Builder.RenderSingleReport(StiReportV2Builder.java:64)
	at com.stimulsoft.report.StiReport.RenderReport(StiReport.java:1939)
	at com.stimulsoft.report.StiReport.Render(StiReport.java:1840)
	at com.stimulsoft.report.StiReport.Render(StiReport.java:1775)
	at com.stimulsoft.report.StiReport.Render(StiReport.java:1765)
	at my.servlet.ApplicationInitializer.doGet(ApplicationInitializer.java:167)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:620)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Unknown Source)
Caused by: com.stimulsoft.base.exception.StiException: StiJDBCDatabase [connectionString=host=localhost;port=3306;database=***;user=***;password=***;, promptUserNameAndPassword=false, url=jdbc:mysql://localhost:3306/***, user=***, password=***, driver=com.mysql.jdbc.Driver, other={}]
	at com.stimulsoft.report.dictionary.databases.StiJDBCDatabase.connect(StiJDBCDatabase.java:245)
	at com.stimulsoft.report.dictionary.databases.StiJDBCDatabase.connect(StiJDBCDatabase.java:229)
	at com.stimulsoft.report.dictionary.dataSources.StiDataStoreSource.connect(StiDataStoreSource.java:92)
	at com.stimulsoft.report.dictionary.dataSources.StiDataSourcesCollection.connect(StiDataSourcesCollection.java:82)
	at com.stimulsoft.report.dictionary.StiDictionary.connect(StiDictionary.java:1216)
	... 22 more
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: Parser error: The name '{0}' does not exist in the current context, spzSID, , ,  
	at com.stimulsoft.report.dictionary.databases.StiJDBCDatabase.fillTable(StiJDBCDatabase.java:260)
	at com.stimulsoft.report.dictionary.databases.StiJDBCDatabase.connect(StiJDBCDatabase.java:242)
	... 26 more
Caused by: java.lang.RuntimeException: Parser error: The name '{0}' does not exist in the current context, spzSID, , ,  
	at com.stimulsoft.report.engine.parser.StiParser.ThrowError(StiParser.java:824)
	at com.stimulsoft.report.engine.parser.StiParser.ThrowError(StiParser.java:808)
	at com.stimulsoft.report.engine.parser.StiParser.postProcessTokensList(StiParser.java:1121)
	at com.stimulsoft.report.engine.parser.StiParser.MakeTokensList(StiParser.java:1148)
	at com.stimulsoft.report.engine.parser.StiParser.ParseToAsm(StiParser.java:2144)
	at com.stimulsoft.report.engine.parser.StiParser.ParseTextValue(StiParser.java:2097)
	at com.stimulsoft.report.engine.parser.StiParser.ParseTextValue(StiParser.java:2032)
	at com.stimulsoft.report.engine.parser.StiParser.ParseTextValue(StiParser.java:2021)
	at com.stimulsoft.report.dictionary.databases.StiJDBCDatabase.getPreparedStatement(StiJDBCDatabase.java:296)
	at com.stimulsoft.report.dictionary.databases.StiJDBCDatabase.fillTable(StiJDBCDatabase.java:256)
	... 27 more
Vadim
Сообщения: 107
Зарегистрирован: 04 апр 2013, 12:26

Re: Генерация pdf на ubuntu 14.04 server

Сообщение Vadim »

Здравствуйте.
Пришлите пожалуйста нам отчет для анализа.
lexun писал(а):Это рабочий отчет на PHP:
http://reports.storencash.com/index.php ... E3NTM5In0=
Это тот же отчет c попыткой формирования на Java (на сервере):
http://ec2-54-194-133-188.eu-west-1.com ... =&spzSID=1

Вот точно такой же отчет только без параметров:
http://ec2-54-194-133-188.eu-west-1.com ... =&spzSID=1

Такой же отчет без параметров но экспортированный в HTML:
http://ec2-54-194-133-188.eu-west-1.com ... =&spzSID=1

Тут видна еще проблема с кодировкой, но это следующая задача.

Ошибка формирования отчета с параметром:

Код: Выделить всё

java.lang.RuntimeException: com.stimulsoft.base.exception.StiException: StiJDBCDatabase [connectionString=host=localhost;port=3306;database=***;user=***;password=***;, promptUserNameAndPassword=false, url=jdbc:mysql://localhost:3306/***, user=***, password=***, driver=com.mysql.jdbc.Driver, other={}]
	at com.stimulsoft.report.dictionary.StiDictionary.connect(StiDictionary.java:1218)
	at com.stimulsoft.report.engine.engineV2.StiRenderProviderV2.ConnectToData(StiRenderProviderV2.java:387)
	at com.stimulsoft.report.engine.engineV2.StiRenderProviderV2.Render(StiRenderProviderV2.java:124)
	at com.stimulsoft.report.engine.engineV2.builders.StiReportV2Builder.RenderSingleReport(StiReportV2Builder.java:64)
	at com.stimulsoft.report.StiReport.RenderReport(StiReport.java:1939)
	at com.stimulsoft.report.StiReport.Render(StiReport.java:1840)
	at com.stimulsoft.report.StiReport.Render(StiReport.java:1775)
	at com.stimulsoft.report.StiReport.Render(StiReport.java:1765)
	at my.servlet.ApplicationInitializer.doGet(ApplicationInitializer.java:167)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:620)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Unknown Source)
Caused by: com.stimulsoft.base.exception.StiException: StiJDBCDatabase [connectionString=host=localhost;port=3306;database=***;user=***;password=***;, promptUserNameAndPassword=false, url=jdbc:mysql://localhost:3306/***, user=***, password=***, driver=com.mysql.jdbc.Driver, other={}]
	at com.stimulsoft.report.dictionary.databases.StiJDBCDatabase.connect(StiJDBCDatabase.java:245)
	at com.stimulsoft.report.dictionary.databases.StiJDBCDatabase.connect(StiJDBCDatabase.java:229)
	at com.stimulsoft.report.dictionary.dataSources.StiDataStoreSource.connect(StiDataStoreSource.java:92)
	at com.stimulsoft.report.dictionary.dataSources.StiDataSourcesCollection.connect(StiDataSourcesCollection.java:82)
	at com.stimulsoft.report.dictionary.StiDictionary.connect(StiDictionary.java:1216)
	... 22 more
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: Parser error: The name '{0}' does not exist in the current context, spzSID, , ,  
	at com.stimulsoft.report.dictionary.databases.StiJDBCDatabase.fillTable(StiJDBCDatabase.java:260)
	at com.stimulsoft.report.dictionary.databases.StiJDBCDatabase.connect(StiJDBCDatabase.java:242)
	... 26 more
Caused by: java.lang.RuntimeException: Parser error: The name '{0}' does not exist in the current context, spzSID, , ,  
	at com.stimulsoft.report.engine.parser.StiParser.ThrowError(StiParser.java:824)
	at com.stimulsoft.report.engine.parser.StiParser.ThrowError(StiParser.java:808)
	at com.stimulsoft.report.engine.parser.StiParser.postProcessTokensList(StiParser.java:1121)
	at com.stimulsoft.report.engine.parser.StiParser.MakeTokensList(StiParser.java:1148)
	at com.stimulsoft.report.engine.parser.StiParser.ParseToAsm(StiParser.java:2144)
	at com.stimulsoft.report.engine.parser.StiParser.ParseTextValue(StiParser.java:2097)
	at com.stimulsoft.report.engine.parser.StiParser.ParseTextValue(StiParser.java:2032)
	at com.stimulsoft.report.engine.parser.StiParser.ParseTextValue(StiParser.java:2021)
	at com.stimulsoft.report.dictionary.databases.StiJDBCDatabase.getPreparedStatement(StiJDBCDatabase.java:296)
	at com.stimulsoft.report.dictionary.databases.StiJDBCDatabase.fillTable(StiJDBCDatabase.java:256)
	... 27 more
Ответить