#API - PDF Bytes
Na Documentação da API é explicado que o arquivo PDF está em base64 com biblioteca zlib.
Alguém consegue auxiliar em mostrar exemplos de uso para fazer o decode do arquivo?
-
Comentário oficial
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.
-
Mas seria de interesse comum de outros usuários essa informação, por qual motivo não compartilhar aqui? Ticket #6945
-1 -
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 -
@... 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 -
Cleiber Marques vc realizou a implementação em C# desse recurso? Chegou a ter algum desafio no Código Fonte?
1 -
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.
Comentários
6 comentários