Closed fincatto closed 6 years ago
Eu tenho um jrxml (Jasper/iReport) da DANFe, que modifiquei de um outro projeto, porém não está atualizado, mas pode ser útil pelo menos para não começar o layout do zero.. Interessa?
Será que o ideal não seria gerar uma página em html/css com elemento page para gerar a impressão?
Vocês que sabem, mas acredito que um PDF seria tranquilo e teria boa parte do layout pronto.. é uma ideia..
Ajuda sim Érico, muito obrigado! Quanto ao layout html, podemos fazer "exportadores" distintos em que o usuário solicita o tipo que ele deseja, mas, por hora, precisamos do PDF.
On Fri, Apr 15, 2016 at 2:29 PM, Érico Knapp Lutzer < notifications@github.com> wrote:
Vocês que sabem, mas acredito que um PDF seria tranquilo e teria boa parte do layout pronto.. é uma ideia..
— You are receiving this because you authored the thread. Reply to this email directly or view it on GitHub https://github.com/wmixvideo/nfe/issues/121#issuecomment-210555865
Bom dia Pessoal ... a biblioteca já está gerando DANFE?
Ainda não conseguimos algum desenvolvedor pra fazer a feature. Se tiver interesse, seria ótimo! []s
On Tue, May 3, 2016 at 11:27 AM, waldandrade notifications@github.com wrote:
Bom dia Pessoal ... a biblioteca já está gerando DANFE?
— You are receiving this because you authored the thread. Reply to this email directly or view it on GitHub https://github.com/wmixvideo/nfe/issues/121#issuecomment-216545946
hummm rapaz ... eu tenho mais que interesse, tenho necessidade ... kkkkkk
Preciso apenas de instruções de como trabalhar com o repositório de vocês. Não creio que seja só sair dando commit kkkkkk
Existe alguma coisa contra apenas integrar a biblioteca a outra biblioteca já existente?
Encontrei esse link do JAVAC.
http://www.javac.com.br/jc/posts/list/1790-jrxml-danfe-nfe-v310-resolvido.page
Olá pessoal, vou colaborar com o projeto, eu tenho um ERP que gera a NFe com o DANFE atualizado da versão 3.10, meu sistema era em java mas toda a lógica de emissão da NFe estava em uma dll compilada no Delphi 7, lá eu usava o componente da ACBr pra gerar a nota. O sistema funciona, mas eu perco a vantagem da multiplataforma. O meu DANFE tem uma label que traz os dados do meu sistema, então alteram pra incluir a personalização de vocês, ele funciona baseado no conteúdo do xml.
Vou deixar aqui minha classe do emissor de NFe pra servir de referencia no uso do DANFE, qualquer dúvida me procurem, assim que possível vou testar o projeto no meu sistema e submeto algumas coisas pra colaborar.
`package system.core.nfe;
import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map;
import javafx.application.Platform; import javafx.concurrent.Task; import javafx.scene.Cursor;
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory;
import org.apache.commons.mail.DefaultAuthenticator; import org.apache.commons.mail.EmailAttachment; import org.apache.commons.mail.HtmlEmail; import org.controlsfx.dialog.Dialog.Actions; import org.w3c.dom.Document;
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; import net.sf.jasperreports.engine.data.JRXmlDataSource; import net.sf.jasperreports.view.JasperViewer;
import br.inf.portalfiscal.nfe.schema.consstatserv.TRetConsStatServ; import system.core.SystemController; import application.controller.MainController; import application.entities.DoctoFiscal; import application.helpers.Configurations; import application.model.DoctoFiscalDAO; import application.model.ServidorModel;
public class EmissorNFe extends SystemController{
private String pathNFe;
static{
Runtime.getRuntime().load(new File("resources/EmissorNFe.dll").getAbsolutePath());
}
private native boolean PreparaAmbiente(Object[] configs);
private native TRetConsStatServ StatusWebService();
private native boolean GerarNFe(int iNrDoctoFiscal);
private native boolean CancelarNFe(int iNrDoctoFiscal);
private boolean setConfig(){
ServidorModel server = Configurations.getDefaultServer();
Object[] params = {
server.getHostname(), // IP
server.getDatabase(), // Instancia
toString(MainController.loggedEnterprise.getId()), // Empresa Ativa
};
return PreparaAmbiente(params);
}
public void assinaXML(){
}
public TRetConsStatServ ConsultaStatusServico(){
TRetConsStatServ status = new TRetConsStatServ();
//Inicializa/ Verifica configurações
boolean isConfigured = setConfig();
//Executa a consulta do Status;
if (isConfigured)
status = StatusWebService();
//devolve o resultado
return status;
}
public boolean geraNFe(DoctoFiscal doctoFiscal) throws Exception{
/*-- prepara o ambiente para geração da NFe --*/
boolean isConfigured = setConfig();
//Executa a consulta do Status;
if (!isConfigured)
return false;
mensagemUsuario("Gerando NFe...");
return GerarNFe(doctoFiscal.getId());
}
public boolean cancelaNFe(DoctoFiscal doctoFiscal) throws Exception{
/*-- prepara o ambiente para geração da NFe --*/
boolean isConfigured = setConfig();
//Executa a consulta do Status;
if (!isConfigured)
return false;
mensagemUsuario("Cancelando NFe...");
return CancelarNFe(doctoFiscal.getId());
}
public void geraPDF(final DoctoFiscal doctoFiscal) throws Exception{
mensagemUsuario("Gerando PDF...");
Task<Object> task = new Task<Object>(){
@Override
protected Object call() throws Exception {
//Muda o cursor
MainController.primaryStage.getScene().setCursor(Cursor.WAIT);
//Executa tarefa
String pathNFe = (MainController.configAmbiente.getTipoAmbienteNFe() == 0) ? MainController.configAmbiente.getPathNFeHom() : MainController.configAmbiente.getPathNFeProd();
pathNFe = pathNFe + "/EMP" + zeroEsquerda(MainController.loggedEnterprise.getId(),3) + "/PDF/";
OutputStream out = new FileOutputStream(pathNFe + doctoFiscal.getChaveNFe() + ".pdf");
JasperPrint relatorio = geraDanfe(doctoFiscal);
JasperExportManager.exportReportToPdfStream(relatorio, out);
//Depois que a Thread encerrar executa ações na interface
Platform.runLater(new Runnable() {
@Override
public void run() {
try {
mensagemUsuario("");
sendNFeMail(doctoFiscal);
} catch (Exception e) {
new Throwable(e);
}
}
});
//Retorna para o cursor default
MainController.primaryStage.getScene().setCursor(Cursor.DEFAULT);
return null;
}
};
Thread th = new Thread(task);
th.setDaemon(true);
th.start();
}
private JasperPrint geraDanfe(DoctoFiscal doctoFiscal) throws Exception{
InputStream imgInputStream = null;
byte[] bLogo = MainController.loggedEnterprise.getLogo();
if (bLogo != null){
imgInputStream = new ByteArrayInputStream(bLogo);
}
Document doc = getXml(doctoFiscal.getxMLNFe());
Map<String, Object> param = getFaturas(doc);
param.put("Logo", imgInputStream);
JasperPrint danfe = null;
try{
JRXmlDataSource ds = new JRXmlDataSource(doc,
"/nfeProc/NFe/infNFe/det");
JasperReport report = JasperCompileManager
.compileReport(getClass().getResourceAsStream("/application/view/danfeR.jrxml"));
danfe = JasperFillManager.fillReport(report, param, ds);
}catch(Exception e){
throw e;
}
return danfe;
}
public void imprimeDanfe(DoctoFiscal doctoFiscal) throws Exception{
if (!doctoFiscal.getxMLNFe().isEmpty()){
previewDanfe(doctoFiscal);
if (doctoFiscal.getDataImpressao() == null){
doctoFiscal.setDataImpressao(new Date());
doctoFiscal.setUsuarioImpr(MainController.loggedUser);
new DoctoFiscalDAO().save(doctoFiscal);
}
}
}
private Document getXml(String xml) {
try {
/**
* Gera um objeto DOM do xml
*/
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = dbf.newDocumentBuilder();
return docBuilder.parse(new ByteArrayInputStream(xml.getBytes()));
} catch (Exception e) {
mensagemErro("Erro ao formatar a string em xml.");
return null;
}
}
private Map<String, Object> getFaturas(Document doc) {
Map<String, Object> map = new HashMap<String, Object>();
for (int i = 0; i < doc.getElementsByTagName("dup").getLength(); i++) {
/**
* Seta uma duplicata
*/
org.w3c.dom.Node dup = doc.getElementsByTagName("dup").item(i);
/**
* Seta o numero
*/
org.w3c.dom.Node nDoc = dup.getChildNodes().item(0);
String numero = nDoc.getFirstChild().getNodeValue();
map.put("FAT_NUMERO" + (i + 1), numero);
/**
* Seta a data
*/
org.w3c.dom.Node nData = dup.getChildNodes().item(1);
String data = nData.getFirstChild().getNodeValue();
try {
map.put("FAT_VENCIMENTO" + (i + 1), new SimpleDateFormat("yyyy-MM-dd").parse(data));
} catch (Exception e) {
map.put("FAT_VENCIMENTO" + (i + 1), null);
}
/**
* Seta o valor
*/
org.w3c.dom.Node nValor = dup.getChildNodes().item(2);
String valor = nValor.getFirstChild().getNodeValue();
map.put("FAT_VALOR" + (i + 1), Double.parseDouble(valor));
}
return map;
}
private void previewDanfe(final DoctoFiscal doctoFiscal) {
mensagemUsuario("Gerando preview...");
Task<Object> task = new Task<Object>(){
@Override
protected Object call() throws Exception {
//Muda o cursor
MainController.primaryStage.getScene().setCursor(Cursor.WAIT);
//Executa tarefa
try{
JasperPrint relat = geraDanfe(doctoFiscal);
JasperViewer.viewReport(relat, false);
} catch (Exception e){
exceptionMessage(e.getCause());
}
//Depois que a Thread encerrar executa ações na interface
Platform.runLater(new Runnable() {
@Override
public void run() {
try {
mensagemUsuario("");
} catch (Exception e) {
new Throwable(e);
}
}
});
//Retorna para o cursor default
MainController.primaryStage.getScene().setCursor(Cursor.DEFAULT);
return null;
}
};
Thread th = new Thread(task);
th.setDaemon(true);
th.start();
}
public void sendNFeMail(DoctoFiscal doctoFiscal) throws Exception {
if (!doctoFiscal.getTerceiro().isEnviaNfeEmail()){
mensagemInfo("O terceiro não está configurado para receber a NFe por email.");
return;
}
if (mensagemConfirmacao("Gostaria de enviar a NFe por email?") != Actions.YES)
return;
HtmlEmail email = new HtmlEmail();
email.setHostName(MainController.configAmbiente.getServidorSMTP());
email.setSmtpPort(MainController.configAmbiente.getPortaSMTP());
email.setAuthenticator(new DefaultAuthenticator(MainController.configAmbiente.getEmail(), MainController.configAmbiente.getSenhaEmail()));
email.setStartTLSRequired(MainController.configAmbiente.isUsaSSL());
email.setStartTLSEnabled(MainController.configAmbiente.isUsaSSL());
email.setFrom(MainController.configAmbiente.getEmail(), MainController.loggedEnterprise.getDescricao());
email.setSubject("Entrega da NFe nº " + doctoFiscal.getNumeroDocto());
String emails = "";
email.addTo(doctoFiscal.getTerceiro().getEmailPrincipal(), doctoFiscal.getTerceiro().getRazaoSocial());
emails += doctoFiscal.getTerceiro().getEmailPrincipal();
if (doctoFiscal.getTerceiro().getEmailCopia() != null){
if (!doctoFiscal.getTerceiro().getEmailCopia().trim().equals("")){
email.addCc(doctoFiscal.getTerceiro().getEmailCopia(), doctoFiscal.getTerceiro().getRazaoSocial());
emails += ", " + doctoFiscal.getTerceiro().getEmailCopia();
}
}
//Mensagem no formato HTML
String msgHtml = "<html>";
msgHtml += " <head>";
msgHtml += " </head>";
msgHtml += " <body>";
msgHtml += " <p>" + doctoFiscal.getTerceiro().getRazaoSocial() + "</p>";
msgHtml += " <p>Entrega da NFe nº " + doctoFiscal.getNumeroDocto() + " com a chave " + doctoFiscal.getChaveNFe() + ".</p>" ;
msgHtml += " <p>Veja o XML em anexo, ou faça a consulta de autenticidade no portal nacional da NF-e <www.nfe.fazenda.gov.br/portal> ou no site da Sefaz.</p></br>";
msgHtml += " <p><http://www.tsinterative.com.br></p>";
msgHtml += " <p>Conheça o Sistema de Gestão Empresarial que integra sua empresa e seus parceiros de negócios com simplicidade.</p>";
msgHtml += " <p>O BlueWind Enterprise <http://www.tsinterative.com.br> é um sistema fácil de usar que atende totalmente as necessidades das empresas com baixo custo.</p>";
msgHtml += " <p>Ligue para a TS Interative e tenha maiores informações (11) 4052-9002/ (11) 95287-1588 ou acesse o site da TS Interative.</p>";
msgHtml += " </body>";
msgHtml += "</html>";
email.setHtmlMsg(msgHtml);
String pathNFe = (MainController.configAmbiente.getTipoAmbienteNFe() == 0) ? MainController.configAmbiente.getPathNFeHom() : MainController.configAmbiente.getPathNFeProd();
pathNFe = pathNFe + "EMP" + zeroEsquerda(MainController.loggedEnterprise.getId(),3) ;
EmailAttachment attachment = new EmailAttachment();
//XML
String CaminhoXML = pathNFe + "/Envio e Resposta/" + doctoFiscal.getArquivoXML();
File xml = new File(CaminhoXML);
if (!xml.exists()){
mensagemAlerta(CaminhoXML + " parace ser um caminho inválido, a mensagem não pode ser enviada.");
return;
}
attachment = new EmailAttachment();
attachment.setPath(CaminhoXML);
attachment.setDisposition(EmailAttachment.ATTACHMENT);
email.attach(attachment);
//PDF
String CaminhoPDF = pathNFe + "/PDF/" + doctoFiscal.getChaveNFe() + ".pdf";
File pdf = new File(CaminhoPDF);
if (!pdf.exists()){
if (mensagemConfirmacao(CaminhoPDF + " parace ser um caminho inválido, Deseja enviar apenas o XML. Confirma ?") != Actions.YES)
return;
}else{
attachment = new EmailAttachment();
attachment.setPath(CaminhoPDF);
attachment.setDisposition(EmailAttachment.ATTACHMENT);
email.attach(attachment);
}
email.send();
mensagemInfo("Email enviado com sucesso para " + emails);
}
public void sendNFeCancMail(DoctoFiscal doctoFiscal) throws Exception {
if (!doctoFiscal.getTerceiro().isEnviaNfeEmail()){
mensagemInfo("O terceiro não está configurado para receber a NFe por email.");
return;
}
if (mensagemConfirmacao("Desejar enviar o protocolo de cancelmanto da NFe por e-mail?") != Actions.YES)
return;
HtmlEmail email = new HtmlEmail();
email.setHostName(MainController.configAmbiente.getServidorSMTP());
email.setSmtpPort(MainController.configAmbiente.getPortaSMTP());
email.setAuthenticator(new DefaultAuthenticator(MainController.configAmbiente.getEmail(), MainController.configAmbiente.getSenhaEmail()));
email.setStartTLSRequired(MainController.configAmbiente.isUsaSSL());
email.setStartTLSEnabled(MainController.configAmbiente.isUsaSSL());
email.setFrom(MainController.configAmbiente.getEmail(), MainController.loggedEnterprise.getDescricao());
email.setSubject("Protocolo de Cancelamento da NFe nº " + doctoFiscal.getNumeroDocto());
String emails = "";
email.addTo(doctoFiscal.getTerceiro().getEmailPrincipal(), doctoFiscal.getTerceiro().getRazaoSocial());
emails += doctoFiscal.getTerceiro().getEmailPrincipal();
if (doctoFiscal.getTerceiro().getEmailCopia() != null){
if (!doctoFiscal.getTerceiro().getEmailCopia().trim().equals("")){
email.addCc(doctoFiscal.getTerceiro().getEmailCopia(), doctoFiscal.getTerceiro().getRazaoSocial());
emails += ", " + doctoFiscal.getTerceiro().getEmailCopia();
}
}
//Mensagem no formato HTML
String msgHtml = "<html>";
msgHtml += " <head>";
msgHtml += " </head>";
msgHtml += " <body>";
msgHtml += " <p>" + doctoFiscal.getTerceiro().getRazaoSocial() + "</p>";
msgHtml += " <p>Protocolo de Cancelamento da NFe nº " + doctoFiscal.getNumeroDocto() + " com a chave " + doctoFiscal.getChaveNFe() + ".</p>" ;
msgHtml += " <p>Veja o XML em anexo, ou faça a consulta de autenticidade no portal nacional da NF-e <www.nfe.fazenda.gov.br/portal> ou no site da Sefaz.</p></br>";
msgHtml += " <p><http://www.tsinterative.com.br></p>";
msgHtml += " <p>Conheça o Sistema de Gestão Empresarial que integra sua empresa e seus parceiros de negócios com simplicidade.</p>";
msgHtml += " <p>O BlueWind Enterprise <http://www.tsinterative.com.br> é um sistema fácil de usar que atende totalmente as necessidades das empresas com baixo custo.</p>";
msgHtml += " <p>Ligue para a TS Interative e tenha maiores informações (11) 4052-9002/ (11) 95287-1588 ou acesse o site da TS Interative.</p>";
msgHtml += " </body>";
msgHtml += "</html>";
email.setHtmlMsg(msgHtml);
String pathNFe = (MainController.configAmbiente.getTipoAmbienteNFe() == 0) ? MainController.configAmbiente.getPathNFeHom() : MainController.configAmbiente.getPathNFeProd();
pathNFe = pathNFe + "EMP" + zeroEsquerda(MainController.loggedEnterprise.getId(),3) ;
EmailAttachment attachment = new EmailAttachment();
//XML
String CaminhoXML = pathNFe + "/NFeCan/" + doctoFiscal.getChaveNFe() + "-can.xml";
File xml = new File(CaminhoXML);
if (!xml.exists()){
mensagemAlerta(CaminhoXML + " parace ser um caminho inválido, a mensagem não pode ser enviada.");
return;
}
attachment = new EmailAttachment();
attachment.setPath(CaminhoXML);
attachment.setDisposition(EmailAttachment.ATTACHMENT);
email.attach(attachment);
//PDF
String CaminhoPDF = pathNFe + "/PDF/" + doctoFiscal.getChaveNFe() + ".pdf";
File pdf = new File(CaminhoPDF);
if (!pdf.exists()){
if (mensagemConfirmacao(CaminhoPDF + " parace ser um caminho inválido, Deseja enviar apenas o XML. Confirma ?") != Actions.YES)
return;
}else{
attachment = new EmailAttachment();
attachment.setPath(CaminhoPDF);
attachment.setDisposition(EmailAttachment.ATTACHMENT);
email.attach(attachment);
}
email.send();
mensagemInfo("Email enviado com sucesso para " + emails);
}
} `
Olá pessoal, Essa issue foi finalizada?
Ainda não.
On Tue, May 17, 2016 at 9:48 PM, Felipe Martins notifications@github.com wrote:
Olá pessoal, Essa issue foi finalizada?
— You are receiving this because you authored the thread. Reply to this email directly or view it on GitHub https://github.com/wmixvideo/nfe/issues/121#issuecomment-219896090
:+1: Eu gostaria de trabalhar nela @fincatto :)
Ótimo @felipewmartins, fique a vontade! Nossa política de código é ter o menor acoplamento possível e usar o mínimo de dependências externas possíveis também.Também gostamos de ter uma boa cobertura de testes. Se precisar de ajuda ou tiver alguma dúvida, estamos a disposição. Att, Diego
Bacana @fincatto ! Eu pensei em montar um layout padrão a partir da documentação da receita, utilizando o Ireport. O que você acha dessa abordagem?
Parece interessante! Tenho pouca experiência com PDF, então o @flppsilva está encarregado deste. Nossa única preocupação é adicionar o mínimo de dependência possível e testes. Mas acho que o caminho é esse mesmo!
Lembrando que já existe um modelo da DANF-e no pacote de resources do projeto (criado com iReport). Talvez daria pra partir dele..
Abraço!
Sim @klutzer estou aproveitando ele :smile: Abraço!
Pessoal, Não estou conseguindo colocar a fonte Courier New na geração do pdf do danfe. Pelo que li na documentação ela é o padrão a ser utilizado. Alguém tem alguma dica sobre como carregar essa fonte diretamente na compilação do jasper?
A fonte não aparece no teu editor? Ou quando tu executa ele troca pra outra? Talvez pra essa fonte tenhas que adicionar mais essa dependência: http://mvnrepository.com/artifact/net.sf.jasperreports/jasperreports-fonts/6.0.0
@flppsilva Ela aparece sim. O problema é no momento em que o danfe é exportado para PDF. Eu até havia inserido essa dependência, mas notei que ela só contem fontes DejaVu.
Então deve ser teu sistema operacional que não contém a fonte. Se for linux tens que instalar o pacote de fontes da microsoft.
Vou fazer o teste no windows, para ver se o problema é esse mesmo.
@felipewmartins pra fonte ser utilizada na compilação precisa incluir ela dentro do jar do jasperreports-fonts
Existe também a opção de adicionar as fontes em "$JAVA_HOME/jre/lib/fonts", conforme documentação do JasperReports.
Ter que colocar uma fonte em lugar especifico torna pouco prático o uso. Há alguma outra alternativa? Alguma outra biblioteca para gerar esse pdf, talvez?
On Mon, May 30, 2016 at 9:52 AM, Gyowanny Pessatto Queiroz < notifications@github.com> wrote:
Existe também a opção de adicionar as fontes em "$JAVA_HOME/jre/lib/fonts", conforme documentação do JasperReports.
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/wmixvideo/nfe/issues/121#issuecomment-222486198, or mute the thread https://github.com/notifications/unsubscribe/AADj8LYzPkStkO4PB-qyVrUxYxulafBdks5qGt1wgaJpZM4IHxbz .
Pois é @fincatto estive procurando alternativas. Vi algo sobre o DynamicReports, mas não achei ele muito prático para montar um report.
Neste blog, que é mais antigo mas talvez lhe dê umas dicas: http://javaskeleton.blogspot.com.br/2010/12/embedding-fonts-into-pdf-generated-by.html Basicamente é um arquivo properties.
@gyowanny Bacana! Vou testar esse procedimento! Valeu.
To acompanhando o caso, mas não acho que entendi direito o problema .... Uso jasper desde 2010 e nunca tive esse tipo de impedimento, seguindo as documentações.
2016-05-30 10:27 GMT-03:00 Gyowanny Pessatto Queiroz < notifications@github.com>:
Neste blog, que é mais antigo mas talvez lhe dê umas dicas: http://javaskeleton.blogspot.com.br/2010/12/embedding-fonts-into-pdf-generated-by.html Basicamente é um arquivo properties.
— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/wmixvideo/nfe/issues/121#issuecomment-222492679, or mute the thread https://github.com/notifications/unsubscribe/ALSmmRPs2eUjIgaIOOnug_4l57_XYiXgks5qGuXWgaJpZM4IHxbz .
Waldney Souza de Andrade compengi engenharia & sistemas waldney.andrade@gmail.com waldney.andrade@gmail.com
+55(84)8894-3405 +55(84)9447-7354
São para casos aonde a fonte o Jasper não possui creio eu, tem que instalar de maneira externa.
Olá,
O Manual orienta:
7.7 Padrões de Caracteres (Tipos de Fontes) Todos os caracteres deverão estar impressos na fonte Times New Roman ou na fonte Courier New. A impressão dos dados variáveis feitas por Impressoras de Impacto (Matricial e de Linha) deverá estar entre 10 e 17 CPP (Caracteres por Polegada).
Ou seja, pode ser Courier ou Times, mas gostaria de levantar algumas questões:
1 - Que licenças estas fontes tem? Podem ser utilizadas livremente dentro deste projeto sem legalmente oferecer riscos?
2 - A renderização da fonte é realmente um problema deste projeto?
Em relação ao item 2 eu acredito que poderíamos apenas informar ao usuário que adotamos Courier New (como está sendo feito) mas que o servidor da aplicação deverá fornecer a fonte. Assim abstraímos este "problema" que no meu ponto de vista não deveria ser tratado no âmbito desta library.
Aqui onde trabalho quando precisamos de fontes específicas para o jasper nós empacotamos todas num JAR (bem fácil e efetuado na própria IDE do Jasper) e colocamos este JAR nas dependências do projeto para que não tenha um acoplamento direto as fontes instaladas no servidor.
2016-05-30 14:08 GMT-03:00 Jeferson Viana Perito notifications@github.com:
São para casos aonde a fonte o Jasper não possui creio eu, tem que instalar de maneira externa.
— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/wmixvideo/nfe/issues/121#issuecomment-222529149, or mute the thread https://github.com/notifications/unsubscribe/AG74HdJpSK7WJi9llvjRLjDpbzrVrmTwks5qGxmhgaJpZM4IHxbz .
Higo Soares Matos +55 86 99934-3237 - TIM +55 86 98882-3796 - OI
Seria interessante se conseguirmos definir esta geração da DANF-e utilizando as bibliotecas do Jasper (iReport), pois o mesmo caso vai ocorrer pra DANF-e NFC-e que vamos ter que implementar também, e com os dois modelos criados, a forma de gerar o PDF, ou até mesmo abrir um JFrame (em caso de aplicação desktop), seria exatamente a mesmo para ambos os casos..
Como estou mais envolvido com as implementações pertinentes à NFC-e, é provável que nos próximos dias eu já esteja fabricando o layout e a geração da DANF-e NFC-e aqui no projeto também.
O Layout do danfe está bacana. Só estou tendo problemas mesmo é com a geração do PDF.
@felipewmartins esta atividade está sendo executada em qual branch? Como podemos testar e contribuir? O que já foi feito?
Bom dia @higomatos Estou trabalhando em um branch no meu fork. Já montei o layout do danfe e estou vendo uma solução para aquele problema da geração do pdf. O @fincatto pode criar um branch no repositório principal e eu submeter um PR para esse branch, para que você possa contribuir também.
Bom dia amigos. Segue branch solicitado: https://github.com/wmixvideo/nfe/tree/danfe Att, Diego
2016-06-02 8:33 GMT-03:00 Felipe Martins notifications@github.com:
Bom dia @higomatos https://github.com/higomatos Estou trabalhando em um branch no meu fork. Já montei o layout do danfe e estou vendo uma solução para aquele problema da geração do pdf. O @fincatto https://github.com/fincatto pode criar um branch no repositório principal e eu submeter um PR para esse branch, para que você possa contribuir também.
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/wmixvideo/nfe/issues/121#issuecomment-223266195, or mute the thread https://github.com/notifications/unsubscribe/AADj8LGa15wlvfJDlfZbtMegPyiCu60aks5qHr-egaJpZM4IHxbz .
@fincatto Você consegue ir fazendo testes na funcionalidade? Ou quem esteja utilizando a lib em algum projeto. Vai ajudar bastante pra ajustes e melhorias.
Abraço.
Podemos iniciar alguns testes sim, mas antes precisamos que as exceções não sejam "engolidas" pela lib (NFDanfeReport.java). Outra coisa interessante é garantir que os recursos abertos sejam fechados, usando try-with-resources (NFGeraDanfeTest.java). Isso vai facilitar os testes pois saberemos o que realmente ocorre. Att, Diego
2016-06-13 11:16 GMT-03:00 Felipe Martins notifications@github.com:
@fincatto https://github.com/fincatto Você consegue ir fazendo testes na funcionalidade? Ou quem esteja utilizando a lib em algum projeto. Vai ajudar bastante pra ajustes e melhorias.
Abraço.
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/wmixvideo/nfe/issues/121#issuecomment-225593987, or mute the thread https://github.com/notifications/unsubscribe/AADj8LYoUq1c2dbUQ-Ch-MpW76XpWUxpks5qLWY_gaJpZM4IHxbz .
Verdade @fincatto Farei os ajutes necessários!
Olá galera, em que parte desta tarefa vocês estão? E como posso contribuir para a conclusão dela?
Opa @clarel Ela já está gerando um modelo de danfe, mas que pode ser melhorado com ajuste de layout. Acredito que seria bacana implementar outro modelos de danfe existentes na legislação.
Estou concluindo a DANFe NFCe, porém aguardo a implementação de vocês para adequar a NFDanfeReport gerando também DANFe do modelo 65
Obs.: Utilizei ZXing para gerar o QRCode
Estou readequando o layout, para tratar de acordo com o Bean da NF. Seguindo orientações do @klutzer . Breve estarei liberando o layout.
Pessoal, o branche Danfe está quebrando, pelo uso de uma fonte não disponível para todos os SOs. Alguém está verificando isso? Está ficando meio feio la na home.
Pessoal, como está o andamento deste trabalho?
@felipewmartins você chegou a mudar o relatório para pegar os dados dos objetos (JRBeanCollectionDataSource) ao invés do XML?
Caso não tenha evoluído, vou começar a lidar nisso agora, criando um subrelatório separado para os itens e ajustando a classe NFDanfeReport pra ficar ok com ambos os modelos
@klutzer observei que vc fez um commit "Fonte da DANF-e NF-e alterada para SansSerif (mesma da NFC-e)" porém acredito que está em desacordo com o Manual de Orientação do Contribuinte versão 6.0.0 que informa o seguinte:
7.7 Padrões de Caracteres (Tipos de Fontes) Todos os caracteres deverão estar impressos na fonte Times New Roman ou na fonte Courier New.
Eu entendi que a ideia seria compatibilizar porém se a fonte está em desacordo com o Manual acredito que deveremos reverter a mudança.
Dado um XML, gerar um Danfe padronizado.