Boa tarde pessoal.
Estou tentando implementar a impressão de PDF GNRe em meu sistema:
public override async Task<FileResponse> GerarPdfAsync(Guid id)
{
try
{
var gnre = await _gnreService.GetByIdAsync(id.ToString());
if (gnre == null)
throw new Exception("GNRE não encontrado para o ID informado.");
//await ConfigurarComponente(gnre.EmpresaId!.Value, gnre.ContaId!.Value, false);
//Config Geral
DfeLib.Config.ExibirErroSchema = true;// ckbExibirErroSchema.Checked;
DfeLib.Config.FormatoAlerta = "TAG:%TAGNIVEL% ID:%ID%/%TAG%(%DESCRICAO%) - %MSG%.";
DfeLib.Config.FormaEmissao = TipoEmissao.teNormal;
DfeLib.Config.VersaoDF = VersaoGNRe.ve100;
DfeLib.Config.RetirarAcentos = true;
DfeLib.Config.SalvarWS = true;
DfeLib.Config.PathSalvar = "";
DfeLib.Config.PathSchemas = "";
//Config Webservice
DfeLib.Config.DFe.UF = "";
DfeLib.Config.SSLType = SSLType.LT_TLSv1_2;
DfeLib.Config.Timeout = 5000;
DfeLib.Config.Ambiente = TipoAmbiente.taHomologacao;
DfeLib.Config.Visualizar = true;
DfeLib.Config.SalvarWS = false;
DfeLib.Config.AjustaAguardaConsultaRet = true;
DfeLib.Config.AguardarConsultaRet = 0;
DfeLib.Config.Tentativas = 0;
DfeLib.Config.IntervaloTentativas = 0;
DfeLib.Config.Proxy.Servidor = "";
DfeLib.Config.Proxy.Porta = "";
DfeLib.Config.Proxy.Usuario = "";
DfeLib.Config.Proxy.Senha = "";
//Config Certificado
DfeLib.Config.DFe.SSLCryptLib = SSLCryptLib.cryNone;
DfeLib.Config.DFe.SSLHttpLib = SSLHttpLib.httpNone;
DfeLib.Config.DFe.SSLXmlSignLib = SSLXmlSignLib.xsNone;
DfeLib.Config.DFe.ArquivoPFX = "";
DfeLib.Config.DFe.Senha = "";
DfeLib.Config.DFe.NumeroSerie = "";
//Config Arquivos
DfeLib.Config.SalvarGer = true;
DfeLib.Config.SepararPorMes = false;
DfeLib.Config.AdicionarLiteral = false;
DfeLib.Config.EmissaoPathGNRe = false;
DfeLib.Config.SepararPorCNPJ = false;
DfeLib.Config.SepararPorModelo = false;
DfeLib.Config.PathGNRe = "";
//Config Email
DfeLib.Config.Email.Nome = "";
DfeLib.Config.Email.Conta = "";
DfeLib.Config.Email.Usuario = "";
DfeLib.Config.Email.Senha = "";
DfeLib.Config.Email.Servidor = "";
DfeLib.Config.Email.Porta = "";
DfeLib.Config.Email.SSL = false;
DfeLib.Config.Email.TLS = false;
DfeLib.ConfigGravar();
var path = Path.GetTempPath();
var ini = gnre.ToString();
DfeLib.Config.Guia.PathPDF = path;
DfeLib.LimparListaGuiaRetorno();
DfeLib.CarregarINI(ini);
var xml = DfeLib.ObterXml(0);
//DfeLib.CarregarXML(xml);
DfeLib.CarregarGuiaRetorno(xml);
//DfeLib.LimparLista();
DfeLib.ImprimirPDF();
var arquivoPdf = Directory
.GetFiles(path, "*.pdf")
.OrderByDescending(File.GetCreationTime)
.FirstOrDefault();
if (arquivoPdf == null)
throw new FileNotFoundException("Nenhum arquivo PDF foi gerado pela ACBrLib.");
var nomeArquivo = Path.GetFileName(arquivoPdf);
var fileStream = new FileStream(arquivoPdf, FileMode.Open, FileAccess.Read, FileShare.Read);
return new FileResponse(MIME.PDF, nomeArquivo, path, fileStream);
}
catch (Exception ex)
{
throw new Exception("Erro ao gerar PDF GNRE", ex);
}
}
Algumas observações:
Não estou com o certificado cadastrado.
Já estou com uma impressora configurada como padrão no meu computador.
Coloquei algumas configurações (inicio do metodo) na tentativa de sanar o erro.
Logo após, quando ele chega no método DfeLib.ImprimirPDF(); imprime o seguinte erro: RLGNRe: Erro durante a preparação do relatório EAccessViolation(Access violation).
E o PDF gerado está corrompido.