Pular para o conteúdo principal

#API - PDF Bytes

Comentários

6 comentários

  • Comentário oficial
    Larissa Brancalhão

    Olá, Anderson. Tudo bem?

    Por favor, pedimos que abra um ticket com nosso time de Suporte para que eles possam ajudá-lo enviando um exemplo feito java. 

    Para abrir o ticket, você pode clicar em "Enviar uma Solicitação", no canto superior direito dessa página, ou enviar um e-mail para suporte@dootax.com.br.

  • Anderson (Sanavita)

    Mas seria de interesse comum de outros usuários essa informação, por qual motivo não compartilhar aqui? Ticket #6945

    -1
  • Larissa Brancalhão

    Anderson, precisamos enviar um documento anexo e, nesta seção, não é possível anexar arquivos. Por esse motivo, a equipe de suporte compartilhará com você por meio do ticket aberto.

    0
  • Anderson (Sanavita)

    @... simplifiquei o arquivo enviado para que seja usado por quem interessar.

    Código fonte de exemplo, basta alterar o valor da string na variavel

    pdfString

    com o valor que é obtido na API para que seja gerado o arquivo.pdf no mesmo diretório.

    package fluxit.dootax.framework.web;

    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.IOException;
    import java.util.Base64;
    import java.util.zip.DataFormatException;
    import java.util.zip.Deflater;
    import java.util.zip.Inflater;

    import org.apache.commons.io.FileUtils;

    public class Exemplo {

        public static void main(String[] args) throws IOException, DataFormatException {
            String pdfString = ""; // altere com o valor que obtem através da API
            byte[] pdfByte = Base64.getMimeDecoder().decode(pdfString);
            byte[] pdfFile = decompress(pdfByte);
            FileUtils.writeByteArrayToFile(new File("./arquivo.pdf"), pdfFile);
        }

        public static byte[] decompress(byte[] data) throws IOException, DataFormatException {

            Inflater inflater = new Inflater();
            inflater.setInput(data);
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length);
            byte[] buffer = new byte[1024];
            while (!inflater.finished()) {
                int count = inflater.inflate(buffer);
                outputStream.write(buffer, 0, count);
            }

            outputStream.close();
            byte[] output = outputStream.toByteArray();
            return output;
        }

        private static byte[] compress(byte[] data) throws IOException {

            Deflater deflater = new Deflater();
            deflater.setInput(data);
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length);
            deflater.finish();
            byte[] buffer = new byte[1024];
            while (!deflater.finished()) {
                int count = deflater.deflate(buffer);
                outputStream.write(buffer, 0, count);
            }

            outputStream.close();
            return outputStream.toByteArray();
        }

    }
    2
  • Anderson (Sanavita)

    Cleiber Marques vc realizou a implementação em C# desse recurso? Chegou a ter algum desafio no Código Fonte?

    1
  • Cleiber Marques

    Bom dia, só hoje visualizei a mensagem.

    Segue a implementação em C#, utilizando a biblioteca SharpZipLib:

    using ICSharpCode.SharpZipLib.Zip.Compression.Streams;

    private async Task GerarPdf(IGuia guia)
    {
    _logger.LogInformation("{NomeMetodo} - Gerando PDF...",
    nameof(GerarPdf));

    var path = @$"{_settings.PdfPath}\{guia.DbNome}-{guia.DocEntry}-{guia.IdDootax}.pdf";

    var bytesComprimidos = Convert.FromBase64String(guia.PdfBytes);

    byte[] arrayFinal = ObterByteArrayDescomprimido(bytesComprimidos);

    await File.WriteAllBytesAsync(path, arrayFinal);

    _logger.LogInformation("{NomeMetodo} - PDF gerado em {Path}",
    nameof(GerarPdf),
    path);

    guia.CaminhoPDF = path;
    }

    private byte[] ObterByteArrayDescomprimido(byte[] bytesComprimidos)
    {
    var stream = Decompress(bytesComprimidos);

    byte[] arrayFinal;

    using (var memoryStream = new MemoryStream())
    {
    stream.CopyTo(memoryStream);
    arrayFinal = memoryStream.ToArray();
    }

    return arrayFinal;
    }

    private Stream Decompress(byte[] data)
    {
    var outputStream = new MemoryStream();
    using (var compressedStream = new MemoryStream(data))
    {
    using (var inputStream = new InflaterInputStream(compressedStream))
    {
    inputStream.CopyTo(outputStream);
    outputStream.Position = 0;
    return outputStream;
    }
    }
    }
    1

Por favor, entrar para comentar.