Jasper Reports是Crystal Reports的绝佳开源替代品.它非常适用于单页PDF页面,例如多页报告的字母和发票.然而,它不是非常友好的.NET,并且让C#/ Mono与JasperServer玩得很好并不富有成效.
有没有人从C#获得有关如何在JasperServer上运行报告的代码示例,并附加带有SOAP请求的XML数据集?它需要在Mono上运行,因此Microsoft.Web.Services2是不可能的.
我试图推出自己的肥皂请求.Jasper Server似乎接受了它,但我似乎无法得到任何响应,而不是服务器500错误.我没有附加一个MTOM附件.
var sb = new StringBuilder();
sb.AppendLine("<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">");
sb.AppendLine("<s:Body s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">");
sb.AppendLine("<q1:runReport xmlns:q1=\"http://axis2.ws.jasperserver.jaspersoft.com\">");
sb.AppendLine("<requestXmlString xsi:type=\"xsd:string\">");
sb.AppendLine("<request operationName=\"runReport\" locale=\"en\">");
sb.AppendLine(" <argument name=\"RUN_OUTPUT_FORMAT\">PDF</argument>");
sb.AppendFormat(" <resourceDescriptor name=\"\" wsType=\"\" uriString=\"{0}\" isNew=\"false\">", "/JourneyReport");
sb.AppendLine(" <label>null</label>");
sb.AppendLine(" <parameter name=\"testparam\">1</parameter>");
sb.AppendLine(" </resourceDescriptor>");
sb.AppendLine(" </request>");
sb.AppendLine("</requestXmlString>");
sb.AppendLine("</q1:runReport>");
sb.AppendLine("</s:Body></s:Envelope>");
var webRequest = (HttpWebRequest)WebRequest.Create("http://localhost:8080/jasperserver/services/repository");
webRequest.Credentials = new NetworkCredential("jasperadmin","jasperadmin");
webRequest.PreAuthenticate = true;
webRequest.Headers.Add("SOAPAction","");
//Set HttpWebRequest properties
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(sb.ToString());
webRequest.Method = "POST";
webRequest.ContentLength = bytes.Length;
webRequest.ContentType = "text/xml; encoding='utf-8'";
//Get Stream object
var …
Run Code Online (Sandbox Code Playgroud) 将iReport v4.0.1与Jasperserver v4.1.0一起使用我正在尝试找到一种语法,用于将子报告链接到主报告,让我在iReport中测试它,然后通过存储库浏览器部署到服务器.
iReport中子报表的子报表的默认语法类似于
$P{SUBREPORT_DIR} + "mySubReport.jasper"
Run Code Online (Sandbox Code Playgroud)
当你从iReport部署它时,它足够聪明,可以选择它并建议将其更改为
"repo:mySubReport.jrxml"
Run Code Online (Sandbox Code Playgroud)
然后将所有子报表部署到主报表的Resources文件夹中.
这很好,但不幸的是它然后在iReport中编辑文件以保存此更改,这意味着您无法再在iReport中运行报告而无需手动重新编辑所有子报表表达式 - 这使得测试和部署到服务器的过程成为可能非常痛苦,特别是当报告中有多个子报告时.
我以为我至少可以将$ P {SUBREPORT}的值设置为"repo:"或"My\local\filepath",这样至少我只有一个地方可以更改它,但是编译器没有像那样.
是否有一个替代结构或表达式将解析为repo:*.jrxml或My\local\filepath*.jasper,具体取决于您运行报告的位置?
有没有办法将JasperServer集成/嵌入到另一个Web应用程序中?问题是应该以某种方式绕过JasperServer的登录页面.是否可以通过Web服务/ REST进行身份验证,跳过登录页面,然后在iframe中显示主服务器页面,或者出现这种情况?
谢谢.
您可以使用jasperservers webservices(SOAP和REST可用)从Web应用程序获取管理和运行报告.SOAP wsdl与asp.net c#不兼容(至少,我不能让它工作),所以我决定使用REST webservice.
我几乎在那里,但我无法检索报告本身.有谁知道出了什么问题?我在Linux上使用jasperserver CE 4.5.
// Setup WebClient
WebClient httpclient = new WebClient();
//Basic Auth
httpclient.Credentials = new NetworkCredential("NAME", "PASSWD");
httpclient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
// Build resourceDescriptor
string requestXml;
requestXml = "<resourceDescriptor name="budget_overzicht_per_klant" wsType="reportUnit" uriString="/Declaraties/12change/Klant/budget_overzicht_per_klant"n";
requestXml += " isNew="false">n";
requestXml += " <label>null</label>n";
requestXml += " <parameter name="klantid">14</parameter>n";
requestXml += " <parameter name="start">20120101</parameter>n";
requestXml += " <parameter name="eind">20120302'</parameter>n";
requestXml += " <parameter name="Titel">Test 123</parameter>n";
requestXml += "</resourceDescriptor>n";
// Send PUT
string requestAllResult = httpclient.UploadString("http://website/jasperserver/rest/report/Declaraties/12change/Klant/budget_overzicht_per_klant?RUN_OUTPUT_FORMAT=PDF", "PUT", requestXml);
// requestAllResult contains: …
Run Code Online (Sandbox Code Playgroud) 这里我们讨论三个主要产品: JasperReports:它只是一个生成报告的库并填充它 iReport:这是用于开发上述库JasperServer使用的模板的GUI工具 :这是一个带有Web界面的完整应用程序,用于管理用户的报告权限和其他功能,
文档真的不是那么好,我想使用上面提到的最好的产品来集成JasperReports
我的应用程序(Spring
/ Hibernate
),所以请建议最好的方法来做到这一点,
1-设计报告使用iReport
嵌入式sql生成,并将其作为一个单独的项目,我尝试使用Hibernate
或Spring
内部,iReport
但我也面临很多问题,没有明确的文档,这部分
2-将它与我的项目连接,使用相同的Hibernate
配置,已经创建的实体
3-尝试使用JasperServer
似乎很复杂的,然后将报告公开为webservices
或者任何其他更好的保证方法,我知道这取决于我的项目处理方式,但我的时间不足,所以这取决于具有更好的文档或教程的方法.
我正在开发一个旨在用JasperReports Server替换当前PDF生成器的项目.计划是使用REST/HTTP API实现系统之间的高级抽象.
最理想的是,我们不希望让JasperReports Server从数据库中提取数据,因为这会绕过调用应用程序架构中的现有日志记录和授权.相反,我们首先要在调用应用程序中提取内容,然后将该内容传递给JasperReports Server.
我们已经做了相当多的调查,缺乏相关结果表明这不是您通常使用JasperReports Server的方式.我们发现的教程中的输入参数通常是标量值(整数,布尔值或字符串),而不是复杂的结构或对象.此外,似乎每个样本或多或少都假设您希望让JasperReports Server连接到数据库.
如果可以传递复杂的结构(比如一组地图,其中一些地图元素是数组或地图本身),那么这样做的最佳做法是什么?我不知道如何在请求体中格式化这样的结构.SOAP API更适合吗?
如果您不应该如何设计JasperReports服务器解决方案,那么哪种替代产品/解决方案更合适?
提前感谢任何输入.
我们使用nginx进行https流量卸载,代理到在端口8080上运行的本地安装的jasperserver(5.2).
internet ---(https/443)---> nginx ---(http/8080)---> tomcat/jasperserver
Run Code Online (Sandbox Code Playgroud)
当直接在其端口上访问jasperserver时,一切都很好.当通过nginx访问服务时,某些功能被破坏(例如,在jasperserver UI中编辑用户),jasperserver日志具有如下条目:
CSRFGuard: potential cross-site request forgery (CSRF) attack thwarted (user:%user%, ip:%remote_ip%, uri:%request_uri%, error:%exception_message%)
Run Code Online (Sandbox Code Playgroud)
经过一些调试后,我们找到了原因:
在其标准配置中,nginx不转发其名称中包含下划线的请求标头.然而,Jasperserver(和OWASP框架)默认使用下划线来传输csrf令牌(JASPER_CSRF_TOKEN
和OWASP_CSRFTOKEN
分别).
解决方案是:
nginx:允许标题中的下划线
server {
...
underscores_in_headers on;
Run Code Online (Sandbox Code Playgroud)jasperserver-pro/WEB-INF/esapi/Owasp.CsrfGuard.properties
另见:
我使用的是Windows 7操作系统.我刚刚安装了jaspersoft服务器,它安装了Apache Tomcat和mysql作为一个捆绑包.
我去了, http://localhost:8080
并且有一条消息说网页不可用.
我是初学者,我想知道Tomcat是否首次安装在我的计算机上.你能告诉我怎么做吗?(我还想知道是否必须启动它以及安装它的端口.)
UPDATE
这是我做过的事情.我现在真的很困惑.我找到了tomcat服务器的位置.我找到了server.xml文件.server.xml文件中的端口列为8005.我还发现了我运行的start.bat.我现在看到它http://localhost:8080
有效,但不是http://localhost:8005
.你知道为什么吗?端口8005应该工作,因为这是server.xml中列出的内容
突然因某种原因tomcat服务器没有运行/启动/停止.
下面是我运行启动命令时得到的结果,
C:\Program Files\jasperserver-3.5.0\apache-tomcat\bin>startup
Using CATALINA_BASE: C:\Program Files\jasperserver-3.5.0\apache-tomcat
Using CATALINA_HOME: C:\Program Files\jasperserver-3.5.0\apache-tomcat
Using CATALINA_TMPDIR: C:\Program Files\jasperserver-3.5.0\apache-tomcat\temp
Using JRE_HOME: C:\PROGRA~1\JASPER~1.0\java\jre
Run Code Online (Sandbox Code Playgroud)
tomcat窗口弹出一秒钟然后消失.
(我在c:\ program files下安装了另一个java实例)
救命!!!
更新:
来自catalina文件的日志
Mar 22, 2011 3:41:50 AM org.apache.coyote.http11.Http11BaseProtocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
Mar 22, 2011 3:41:50 AM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1017 ms
Mar 22, 2011 3:41:51 AM org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
Mar 22, 2011 3:41:51 AM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/5.5.20
Mar 22, 2011 3:41:51 …
Run Code Online (Sandbox Code Playgroud) 我写了一些Java类,创建了jar文件.我想将它添加到JasperReports Server.当我确定我的jar文件的路径时,使用我的iReport中的工具 - >首选项 - >类路径菜单,它可以正常工作.但是,当我从另一台主机访问JR Server时,它不起作用.
我必须做什么,从这个JR服务器上随处可用这个jar文件?