(RESOLVIDO)net.sf.jasperreports.engine.JRException:

Bom dia a todos, estou tentando fazer com que o Java pegue o arquivo jrxml e converta em pdf, mas estou recebendo este stack: Alguem sabe como fazer esta conversão da maneira correta? Ou caso eu esteja fazendo da forma correta, que erro é esse?

código do metodo

private void generatePdfButton() throws JRException {

		JasperReport document = JasperCompileManager.compileReport(
				"C:\\Users\\fjd2320\\Downloads\\Vaadin-Application-Sales-master\\src\\main\\resources\\Relatorios\\RelatorioVendas.jrxml");

		JRDataSource jrDataSource = new JREmptyDataSource();

		JasperPrint print = JasperFillManager.fillReport(document, null, jrDataSource);

		JasperExportManager.exportReportToPdfFile(print,
				"C:\\\\Users\\\\fjd2320\\\\Downloads\\\\Vaadin-Application-Sales-master\\\\src\\\\main\\\\resources\\\\Relatorios\\RelatorioVendas.pdf");

	}

chamada no botão

exportarRelatorio.addClickListener(event -> {
			
			try {
				generatePdfButton();
			} catch (JRException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

Stack

net.sf.jasperreports.engine.JRException: org.xml.sax.SAXParseException; lineNumber: 127; columnNumber: 42; cvc-complex-type.3.2.2: Attribute 'textAdjust' is not allowed to appear in element 'textField'.
	at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:302)
	at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:285)
	at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:274)
	at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:219)
	at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:194)
	at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:185)
	at net.sf.jasperreports.engine.JasperCompileManager.compile(JasperCompileManager.java:288)
	at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:575)
	at br.com.fjsistemas.relatorios.RelatorioVendaView.generatePdfButton(RelatorioVendaView.java:158)
	at br.com.fjsistemas.relatorios.RelatorioVendaView.lambda$5(RelatorioVendaView.java:128)
	at com.vaadin.flow.component.ComponentEventBus.fireEventForListener(ComponentEventBus.java:205)
	at com.vaadin.flow.component.ComponentEventBus.handleDomEvent(ComponentEventBus.java:373)
	at com.vaadin.flow.component.ComponentEventBus.lambda$addDomTrigger$dd1b7957$1(ComponentEventBus.java:264)
	at com.vaadin.flow.internal.nodefeature.ElementListenerMap.lambda$fireEvent$2(ElementListenerMap.java:441)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1507)
	at com.vaadin.flow.internal.nodefeature.ElementListenerMap.fireEvent(ElementListenerMap.java:441)
	at com.vaadin.flow.server.communication.rpc.EventRpcHandler.handleNode(EventRpcHandler.java:59)
	at com.vaadin.flow.server.communication.rpc.AbstractRpcInvocationHandler.handle(AbstractRpcInvocationHandler.java:64)
	at com.vaadin.flow.server.communication.ServerRpcHandler.handleInvocationData(ServerRpcHandler.java:409)
	at com.vaadin.flow.server.communication.ServerRpcHandler.lambda$handleInvocations$1(ServerRpcHandler.java:390)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1507)
	at com.vaadin.flow.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:390)
	at com.vaadin.flow.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:317)
	at com.vaadin.flow.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:89)
	at com.vaadin.flow.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40)
	at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1547)
	at com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:247)
	at com.vaadin.flow.spring.SpringServlet.service(SpringServlet.java:111)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:352)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
	at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:141)
	at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177)
	at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.base/java.lang.Thread.run(Thread.java:830)
Caused by: org.xml.sax.SAXParseException; lineNumber: 127; columnNumber: 42; cvc-complex-type.3.2.2: Attribute 'textAdjust' is not allowed to appear in element 'textField'.
	at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
	at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:135)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:396)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:284)
	at java.xml/com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(XMLSchemaValidator.java:511)
	at java.xml/com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.reportSchemaError(XMLSchemaValidator.java:3587)
	at java.xml/com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.processAttributes(XMLSchemaValidator.java:2992)
	at java.xml/com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java:2286)
	at java.xml/com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:829)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:374)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2725)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:541)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
	at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
	at org.apache.commons.digester.Digester.parse(Digester.java:1892)
	at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:298)
	... 77 more

também tentei fazer a mesma conversão de outra forma:

metodo

private byte[] generatePdfButton() throws JRException {

	InputStream fonte = RelatorioVendaView.class.getResourceAsStream(
			"C:\\Users\\fjd2320\\Downloads\\Vaadin-Application-Sales-master\\src\\main\\resources\\Relatorios\\RelatorioVendas.jrxml");

	JasperReport report = JasperCompileManager.compileReport(fonte);

	JRDataSource jrDataSource = new JREmptyDataSource();

	JasperPrint print = JasperFillManager.fillReport(report, null, jrDataSource);

	byte[] relatorio = JasperExportManager.exportReportToPdf(print);

	return relatorio;

}

Stack:

net.sf.jasperreports.engine.JRException: java.net.MalformedURLException
	at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:306)
	at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:285)
	at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:274)
	at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:248)
	at net.sf.jasperreports.engine.JasperCompileManager.compile(JasperCompileManager.java:341)
	at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:608)
	at br.com.fjsistemas.relatorios.RelatorioVendaView.generatePdfButton(RelatorioVendaView.java:162)
	at br.com.fjsistemas.relatorios.RelatorioVendaView.lambda$5(RelatorioVendaView.java:129)
	at com.vaadin.flow.component.ComponentEventBus.fireEventForListener(ComponentEventBus.java:205)
	at com.vaadin.flow.component.ComponentEventBus.handleDomEvent(ComponentEventBus.java:373)
	at com.vaadin.flow.component.ComponentEventBus.lambda$addDomTrigger$dd1b7957$1(ComponentEventBus.java:264)
	at com.vaadin.flow.internal.nodefeature.ElementListenerMap.lambda$fireEvent$2(ElementListenerMap.java:441)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1507)
	at com.vaadin.flow.internal.nodefeature.ElementListenerMap.fireEvent(ElementListenerMap.java:441)
	at com.vaadin.flow.server.communication.rpc.EventRpcHandler.handleNode(EventRpcHandler.java:59)
	at com.vaadin.flow.server.communication.rpc.AbstractRpcInvocationHandler.handle(AbstractRpcInvocationHandler.java:64)
	at com.vaadin.flow.server.communication.ServerRpcHandler.handleInvocationData(ServerRpcHandler.java:409)
	at com.vaadin.flow.server.communication.ServerRpcHandler.lambda$handleInvocations$1(ServerRpcHandler.java:390)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1507)
	at com.vaadin.flow.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:390)
	at com.vaadin.flow.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:317)
	at com.vaadin.flow.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:89)
	at com.vaadin.flow.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40)
	at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1547)
	at com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:247)
	at com.vaadin.flow.spring.SpringServlet.service(SpringServlet.java:111)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:352)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
	at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:141)
	at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177)
	at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.base/java.lang.Thread.run(Thread.java:830)
Caused by: java.net.MalformedURLException
	at java.base/java.net.URL.<init>(URL.java:701)
	at java.base/java.net.URL.<init>(URL.java:563)
	at java.base/java.net.URL.<init>(URL.java:510)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:649)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:150)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:860)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
	at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
	at org.apache.commons.digester.Digester.parse(Digester.java:1892)
	at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:298)
	... 75 more
Caused by: java.lang.NullPointerException
	at java.base/java.net.URL.<init>(URL.java:607)
	... 86 more

Parece um problema de versão da lib do jasper usada no projeto, e a versão do jasper na ferramenta que usou para modelar o projeto. Pesquisando aqui, parece que algumas propriedades mudaram de nome em umas versões.

  • Vc sabe qual a versão da lib do jasper no projeto que vc está usando?
  • E qual a versão da ferramenta que vc modelou o relatório?
1 curtida

@Lucas_Camara

no meu pom.xml

    <groupId>net.sf.jasperreports</groupId>
        	<artifactId>jasperreports</artifactId>
        	<version>6.17.0</version>

a ferramenta:
tbm é 6.17.0

Vc está usando o JasperStudio?

1 curtida

@Lucas_Camara

sim

Procure pela propriedade textAdjust em algum campo no relatório e tente mudar ele para testar.

1 curtida

<textField textAdjust="StretchHeight">

em 5 linhas tenho esta expressão, quando vc falar em mudar, vc quer dizer comentar, excluir?

@Lucas_Camara

Tente comentar primeiro para ver se funciona (se não der para comentar, remove msm).

1 curtida

@Lucas_Camara

Mano, tentei de tudo e vários stacks e apareceram, então resolvi começar do zero(a parte do jasper)

Conversei agora pouco com a equipe Vaadin, ele me orientaram no seguinte aspecto:

1º O Vaadin é um Front, ele em si não vai pegar o arquivo.jasper e converte-lo para .pdf

2º para fazer esta conversão devo utilizar uma biblioteca, no meu caso o próprio jasper deve converter para pdf.

3º e ultimo, o que o Vaadin irá fazer é, pegar este arquivo pdf e jogar no navegador com um dos vários Add-On deles, que posso escolher conforme minha necessidade

Então, o que eu preciso agora é saber como fazer com o jasper essa conversão, pois eu acho que os stacks estão dando pois devo estar pulando alguma informação

A conversão para PDF via jasper é esse código que vc tinha feito: JasperReports com App Web + SpringBoot (classe GerarRelatorioVenda).

1 curtida

@Lucas_Camara

então neste código eu estou em duvida no seguinte

código:

	public byte[] gerarRelatorioVendas(List<Venda> lista) throws JRException { 
		
		//referencia ao arquivo, carregar no objeto
		InputStream fonte = GerarRelatorioPDF.class.getResourceAsStream("C:/Users/fjd2320/eclipse-workspace/fjsistemas/src/main/resources/Relatorios/RelatorioVendas.jrxml");
		
		//Declarando objeto do tipo JasperReports
		JasperReport report = JasperCompileManager.compileReport(fonte);
		
		//preenchendo o relatorio 1º parametro relatorio compilado, 2º null pois não havera imagens no logo, 3º passando a lista transformando-a em um datasource informando qual fonte de dados
		//o relatorio vai pegar as informações
		JasperPrint print = JasperFillManager.fillReport(report, null, new JRBeanCollectionDataSource(lista));
		
		//exibir
		byte[] relatorio = JasperExportManager.exportReportToPdf(print);
		
		return relatorio;
		
	}

Duvida: Eu informo de onde vem os dados(do arquivo .jrxml), não deveria informar para onde o arquivo .pdf deve ir tbm? Se sim, como?

Quem vai informar para onde o arquivo pdf vai (que está como um array de bytes) será o vaadin. Ele quem monta sua tela.

O vaadin vai ter um mecanismo que será responsável por iniciar o download do arquivo quando o botão for acionado. Porém, para o download funcionar, vc precisar ter pronto o conteúdo que será baixado, e esse conteúdo é esse array de bytes (byte[])

Por exemplo, se não tivesse usando o vaadin nem qualquer outro framework, vc provavelmente teria um <button> ou um <a> (link html), que iria acessar uma URL que iria disponibilizar algum arquivo como download.

1 curtida

Quando vc clica em algum botão ou link numa página web, basicamente, o que acontece é isso:

1 - usuário clica em botão (ou link)
2 - navegador acessa determinada URL configurada na ação
3 - servidor recebe a requisição com os parâmetros, se existir
4 - servidor processa a requisição e prepara o retorno (no seu caso, um array de bytes que é o arquivo PDF)
5 - servidor retorna os dados solicitados para o navegador
6 - navegador recebe o retorno e apresenta para o usuário (ou já realiza o download se for o caso)

  • Para o seu relatório, vc já tem a etapa 4 (que é montar o relatorio e obter o array de bytes do pdf).
  • As etapas 1, 2 e 3, o vaadin já resolve para vc com os componentes de botão.

Vc precisa implementar a etapa 5 e 6, que o vaadin já deve ter algo para isso também.

Tudo isso é abstraído pelo framework que vc está usando. Caso estivesse fazendo tudo de forma mais crua (no caso de java seria usando servlets), vc teria que escrever bem mais código para processar as requisições e seus detalhes (retorno, tratamento de erro, validações, etc.).

1 curtida

Resolvido:

Metodo

package br.com.fjsistemas.relatorios;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;

public class PDF {
	
	public void generatePdfButton() throws JRException {

		JasperReport document = JasperCompileManager.compileReport(
				"C:\\Users\\fjd2320\\eclipse-workspace\\fjsistemas\\src\\main\\resources\\META-INF\\resources\\RelatorioVendas.jrxml");

		JRDataSource jrDataSource = new JREmptyDataSource();

		JasperPrint print = JasperFillManager.fillReport(document, null, jrDataSource);

		JasperExportManager.exportReportToPdfFile(print,
				"C:\\Users\\fjd2320\\eclipse-workspace\\fjsistemas\\src\\main\\resources\\META-INF\\resources\\RelatorioVendas.pdf");

	}

}

Botão

	exportarRelatorio.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
		exportarRelatorio.getStyle().set("margin-top", "37px");
		exportarRelatorio.setWidth("180px");
		exportarRelatorio.addClickListener(event -> {
			try {
				pdf.generatePdfButton();
			} catch (JRException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		});