Itextpdf

Com este código

        String img = Base64.getEncoder().encodeToString(empresa.getArquivo().getArquivo());
        img = "data:" + empresa.getArquivo().getContentType() + ";base64, " + img;

Gero a imagem para mostrar no itextpdf, Só que dá erro:

Caused by: java.io.FileNotFoundException: C:\data:image\png;base64, K5CYII= (O nome do arquivo ou a extensão é muito grande)
at java.base/java.io.FileInputStream.open0(Native Method)
	at java.base/java.io.FileInputStream.open(FileInputStream.java:219)
	at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157)
	at java.base/java.io.FileInputStream.<init>(FileInputStream.java:112)
	at java.base/sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:86)
	at java.base/sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:184)
	at java.base/java.net.URL.openStream(URL.java:1165)
	at com.itextpdf.text.Image.getInstance(Image.java:256)
	at com.itextpdf.text.Image.getInstance(Image.java:239)
	at com.itextpdf.text.Image.getInstance(Image.java:351)
	at com.itextpdf.text.html.simpleparser.ElementFactory.createImage(ElementFactory.java:425)
	at com.itextpdf.text.html.simpleparser.HTMLWorker.createImage(HTMLWorker.java:460)
	at com.itextpdf.text.html.simpleparser.HTMLTagProcessors$14.startElement(HTMLTagProcessors.java:431)
	at com.itextpdf.text.html.simpleparser.HTMLWorker.startElement(HTMLWorker.java:199)
	at com.itextpdf.text.xml.simpleparser.SimpleXMLParser.processTag(SimpleXMLParser.java:581)
	at com.itextpdf.text.xml.simpleparser.SimpleXMLParser.go(SimpleXMLParser.java:355)
	at com.itextpdf.text.xml.simpleparser.SimpleXMLParser.parse(SimpleXMLParser.java:607)
	at com.itextpdf.text.html.simpleparser.HTMLWorker.parse(HTMLWorker.java:153)
	at br.com.ghnetsoft.eventos.pedido.service.FechamentoCaixaService.relatorio(FechamentoCaixaService.java:127)
	at br.com.ghnetsoft.eventos.pedido.resource.FechamentoCaixaResource.relatorio(FechamentoCaixaResource.java:38)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:880)
	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.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:118)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:158)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
	at org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationProcessingFilter.doFilter(OAuth2AuthenticationProcessingFilter.java:176)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
	at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:92)
	at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:77)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
	at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)
	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.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.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 br.com.ghnetsoft.eventos.pedido.config.SmpleCORSFilter.doFilter(SmpleCORSFilter.java:48)
	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:868)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
	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:834)

sb.append("<img src='" + img + "' width='300px' height='100px' style='height: 100px;' />");

O que pode ser ?

Muda o nome do arquivo pra algo mais simples.

img.png, por exemplo

1 curtida

Isto eu entendi.

Só que eu não informei o nome do arquivo.

O que fiz, foi transforma um byte[] em string para que seja impresso em um PDF.

Igual acontece no Angular.

E este texto é incluido aqui

sb.append("<img src='"+img +"' width='300px' height='100px' />");

To achando estranho esse caminho para a imgem, pois se vc está gerando um base, por alguma razão, a geração do pdf está esperando um path, e não o base64.

1 curtida

Percebi também

As vezes estou gerando a base64 errado

Após essa linha:

img = "data:" + empresa.getArquivo().getContentType() + ";base64, " + img;

O que vc faz com a variável img?

Esta variável img, fica dentro da tag <img src=''>

sb.append("<img src='"+img +"' width='300px' height='100px' />");

A linha 127 está assim: da classe FechamentoCaixaService, aonde ocorre o erro.
bos.write(sb.toString().getBytes());

Variável img


Quando dá o erro

Posta o seu fonte.

package br.com.ghnetsoft.eventos.pedido.service;

import static br.com.ghnetsoft.eventos.pedido.model.enuns.TipoCaixaEnum.DIARIO;
import static br.com.ghnetsoft.eventos.pedido.model.enuns.TipoCaixaEnum.buscarTipoCaixaEnum;
import static br.com.ghnetsoft.eventos.pedido.model.enuns.UsuarioPerfilEnum.ADMINISTRADOR;
import static br.com.ghnetsoft.eventos.pedido.model.enuns.UsuarioPerfilEnum.OPERADOR;
import static br.com.ghnetsoft.principal.mensagem.MensagensRegra.ME_0040;
import static br.com.ghnetsoft.principal.mensagem.MensagensRegra.getMensagemArquivoImagem;
import static br.com.ghnetsoft.principal.util.DataUtil.DD_MM_YYYY;
import static br.com.ghnetsoft.principal.util.DataUtil.converterLocalDateParaString;
import static br.com.ghnetsoft.principal.util.DateTimeUtil.DD_MM_YYYY_HH_MM_SS;
import static br.com.ghnetsoft.principal.util.DateTimeUtil.converterLocalDateTimeParaString;
import static br.com.ghnetsoft.principal.util.PrincipalUtil.mascaraCep;
import static br.com.ghnetsoft.principal.util.PrincipalUtil.mascaraCnpjCpf;
import static com.itextpdf.text.PageSize.A4;
import static com.itextpdf.text.pdf.PdfWriter.getInstance;
import static java.math.RoundingMode.DOWN;
import static java.math.RoundingMode.FLOOR;
import static java.util.stream.Collectors.joining;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.StringReader;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Base64;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

import javax.validation.ConstraintViolation;

import org.apache.commons.lang3.tuple.Pair;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.html.simpleparser.HTMLWorker;
import com.itextpdf.text.pdf.PdfWriter;

import br.com.ghnetsoft.eventos.pedido.client.ClienteCategoriaEventoClient;
import br.com.ghnetsoft.eventos.pedido.client.ClienteCategoriaUsuarioClient;
import br.com.ghnetsoft.eventos.pedido.client.ClienteClient;
import br.com.ghnetsoft.eventos.pedido.client.EmpresaClient;
import br.com.ghnetsoft.eventos.pedido.client.UsuarioLogadoClient;
import br.com.ghnetsoft.eventos.pedido.dto.EmpresaInternoDTO;
import br.com.ghnetsoft.eventos.pedido.dto.FechamentoCaixaFormDTO;
import br.com.ghnetsoft.eventos.pedido.model.Pedido;
import br.com.ghnetsoft.eventos.pedido.model.outro.Cliente;
import br.com.ghnetsoft.eventos.pedido.model.outro.Usuario;
import br.com.ghnetsoft.eventos.pedido.regra.fechamentocaixa.FechamentoCaixaRegra;
import br.com.ghnetsoft.principal.exception.GeralException;
import br.com.ghnetsoft.principal.service.PrincipalService;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Service
public class FechamentoCaixaService extends PrincipalService {

    private static final long serialVersionUID = -8271008341570437488L;
    private static final String THEAD_FINAL = "</thead>";
    private static final String TABLE_FINAL = "</table>";
    private static final String TR_FINAL = "</tr>";
    private static final String TD_FINAL = "</td>";
    private static final String TD = "<td>";
    private static final String TR = "<tr>";
    private static final String THEAD = "<thead>";
    private static final String TABLE = "<table>";
    private static final String B = "<B>";
    private static final String B_FINAL = "</B>";
    @Autowired
    private PedidoService pedidoService;
    @Autowired
    private EmpresaClient empresaClient;
    @Autowired
    private UsuarioLogadoClient usuarioLogadoClient;
    @Autowired
    private ClienteClient clienteClient;
    @Autowired
    private ClienteCategoriaEventoClient clienteCategoriaEventoClient;
    @Autowired
    private ClienteCategoriaUsuarioClient clienteCategoriaUsuarioClient;

    @SuppressWarnings("deprecation")
    public byte[] relatorio(final FechamentoCaixaFormDTO dto) {
        try {
            log.info("relatorio - dto: " + dto.toString());
            validar(dto);
            final Cliente cliente = clienteClient.buscarPorId(dto.getIdCliente());
            boolean diario = false;
            if (buscarTipoCaixaEnum(dto.getCaixa()) == DIARIO) {
                diario = true;
            }
            final Pair<LocalDateTime, LocalDateTime> periodo = periodo(dto);
            final LocalDateTime de = periodo.getLeft();
            final LocalDateTime ate = periodo.getRight();
            final Usuario usuario = usuarioLogadoClient.buscarUsuarioLogado();
            log.info("caixa - usuario: " + usuario.toString());
            final Set<String> idEventos = eventos(usuario, dto.getIdCliente());
            final Collection<Pedido> entidades = buscarInformacao(de, ate, usuario, idEventos);
            final Document document = new Document();
            final ByteArrayOutputStream bos = new ByteArrayOutputStream();
            final PdfWriter pdfWriter = getInstance(document, bos);
            document.setPageSize(A4);
            document.setMargins(5, 5, 5, 5);
            document.setMarginMirroring(true);
            document.open();
            final StringBuilder sb = new StringBuilder();
            reservaSeguro(sb);
            inicio(periodo.getLeft(), periodo.getRight(), sb, usuario, diario, dto.getData(), cliente);
            pedidos(entidades, sb, diario);
            resumo(de, ate, usuario, sb, diario, idEventos);
            final HTMLWorker htmlWorker = new HTMLWorker(document);
            htmlWorker.parse(new StringReader(sb.toString()));
            bos.write(sb.toString().getBytes());
            document.close();
            pdfWriter.close();
            return bos.toByteArray();
        } catch (final DocumentException | IOException e) {
            log.error(e.getMessage(), e);
            throw new GeralException(getMensagemArquivoImagem("download", "Faturas"));
        }
    }

    public void verificar(final FechamentoCaixaFormDTO dto) {
        log.info("verificar - dto: " + dto.toString());
        validar(dto);
        clienteClient.buscarPorId(dto.getIdCliente());
        final Pair<LocalDateTime, LocalDateTime> periodo = periodo(dto);
        final Usuario usuario = usuarioLogadoClient.buscarUsuarioLogado();
        log.info("caixa - usuario: " + usuario.toString());
        buscarInformacao(periodo.getLeft(), periodo.getRight(), usuario, eventos(usuario, dto.getIdCliente()));
    }

    private Set<String> eventos(final Usuario usuario, final String idCliente) {
        final Set<String> idEventos = new HashSet<>();
        if (ADMINISTRADOR != usuario.getPerfil()) {
            if (OPERADOR == usuario.getPerfil()) {
                clienteCategoriaUsuarioClient.existeEventosPorUsuarioLogado().forEach(entidade -> idEventos.add(entidade.getId()));
            } else {
                clienteCategoriaEventoClient.buscarEventosPorUsuarioLogado().forEach(entidade -> idEventos.add(entidade.getId()));
            }
        } else {
            clienteCategoriaEventoClient.eventosCliente(idCliente).forEach(entidade -> idEventos.add(entidade.getId()));
        }
        return idEventos;
    }

    private Collection<Pedido> buscarInformacao(final LocalDateTime de, final LocalDateTime ate, final Usuario usuario, final Set<String> idEventos) {
        final Collection<Pedido> pedidos = pedidoService.caixa(de, ate, usuario, idEventos);
        if ((pedidos == null) || pedidos.isEmpty()) {
            throw new GeralException(ME_0040);
        }
        return pedidos;
    }

    private void inicio(final LocalDateTime de, final LocalDateTime ate, final StringBuilder sb, final Usuario usuario, final boolean diario, final LocalDate data, final Cliente cliente) {
        sb.append(TABLE);
        sb.append(THEAD);
        sb.append(TR);
        sb.append(TD);
        if (diario) {
            sb.append(B + "RELATÓRIO – FECHAMENTO DE CAIXA DIÁRIO" + B_FINAL);
        } else {
            sb.append(B + "RELATÓRIO – FECHAMENTO GERAL POR PERÍODO" + B_FINAL);
        }
        sb.append(TD_FINAL);
        sb.append(TR_FINAL);
        sb.append(TR);
        sb.append(TD);
        sb.append(B + "ESTABELECIMENTO: " + B_FINAL + cliente.getNomeRazaoSocial());
        sb.append(TD_FINAL);
        sb.append(TR_FINAL);
        sb.append(TR);
        sb.append(TD);
        if (diario) {
            sb.append(B + "Caixa: " + B_FINAL + converterLocalDateParaString(data, DD_MM_YYYY));
        }
        sb.append(B + "Emitido por: " + B_FINAL + usuario.getNome().toUpperCase());
        sb.append(TD_FINAL);
        sb.append(TR_FINAL);
        sb.append(TR);
        sb.append(TD);
        sb.append(B + converterLocalDateTimeParaString(de, DD_MM_YYYY_HH_MM_SS) + B_FINAL + " - " + B + converterLocalDateTimeParaString(ate, DD_MM_YYYY_HH_MM_SS) + B_FINAL);
        sb.append(TD_FINAL);
        sb.append(TR_FINAL);
        sb.append(THEAD_FINAL);
        sb.append(TABLE_FINAL);
    }

    private void pedidos(final Collection<Pedido> pedidos, final StringBuilder sb, final boolean diario) {
        sb.append(TABLE);
        sb.append(THEAD);
        sb.append(TR);
        sb.append(TD);
        sb.append("Nº");
        sb.append(TD_FINAL);
        sb.append(TD);
        sb.append("Número do Pedido");
        sb.append(TD_FINAL);
        sb.append(TD);
        sb.append("Valor Pago");
        sb.append(TD_FINAL);
        sb.append(TD);
        sb.append("Forma Pagamento");
        sb.append(TD_FINAL);
        if (!diario) {
            sb.append(TD);
            sb.append("Operador");
            sb.append(TD_FINAL);
            sb.append(TD);
            sb.append("Data/Hora ");
            sb.append(TD_FINAL);
        }
        sb.append(TR_FINAL);
        Integer contador = 1;
        for (final Pedido pedido : pedidos) {
            log.info("caixa - pedidos - pedido: " + pedido.toString());
            sb.append(TR);
            sb.append(TD);
            sb.append(contador);
            sb.append(TD_FINAL);
            sb.append(TD);
            sb.append(pedido.getId());
            sb.append(TD_FINAL);
            sb.append(TD);
            sb.append(pedido.getBuyerPaid().setScale(2, FLOOR));
            sb.append(TD_FINAL);
            sb.append(TD);
            String pagamento = "";
            if (pedido.getTipoPagamento() != null) {
                pagamento = pedido.getTipoPagamento().getDescricao();
            }
            sb.append(pagamento);
            sb.append(TD_FINAL);
            if (!diario) {
                sb.append(TD);
                String usuarioPagamento = "";
                if (pedido.getUsuarioPagamento() != null) {
                    usuarioPagamento = pedido.getUsuarioPagamento().getNome().toUpperCase();
                }
                sb.append(usuarioPagamento);
                sb.append(TD_FINAL);
                sb.append(TD);
                String dataPagamento = "";
                if (pedido.getDataHoraPagamento() != null) {
                    dataPagamento = converterLocalDateTimeParaString(pedido.getDataHoraPagamento(), DD_MM_YYYY_HH_MM_SS);
                }
                sb.append(dataPagamento);
                sb.append(TD_FINAL);
            }
            sb.append(TR_FINAL);
            contador++;
        }
        sb.append(THEAD_FINAL);
        sb.append(TABLE_FINAL);
    }

    private Pair<LocalDateTime, LocalDateTime> periodo(final FechamentoCaixaFormDTO dto) {
        LocalDateTime de;
        LocalDateTime ate;
        if (buscarTipoCaixaEnum(dto.getCaixa()) == DIARIO) {
            de = LocalDateTime.of(dto.getData().getYear(), dto.getData().getMonthValue(), dto.getData().getDayOfMonth(), 0, 0, 0);
            ate = LocalDateTime.of(dto.getData().getYear(), dto.getData().getMonthValue(), dto.getData().getDayOfMonth(), 23, 59, 59);
        } else {
            de = LocalDateTime.of(dto.getStart().getYear(), dto.getStart().getMonthValue(), dto.getStart().getDayOfMonth(), 0, 0, 0);
            ate = LocalDateTime.of(dto.getEnd().getYear(), dto.getEnd().getMonthValue(), dto.getEnd().getDayOfMonth(), 23, 59, 59);
        }
        return Pair.of(de, ate);
    }

    private void reservaSeguro(final StringBuilder sb) {
        final EmpresaInternoDTO empresa = empresaClient.buscarEmpresa();
        String endereco = empresa.getEmpresaEndereco().getLogradouro() + ", " + empresa.getEmpresaEndereco().getNumero();
        if (empresa.getEmpresaEndereco().getComplemento() == null) {
            endereco = endereco + " - " + empresa.getEmpresaEndereco().getComplemento() + " ";
        }
        endereco = endereco + empresa.getEmpresaEndereco().getBairro() + " - " + empresa.getEmpresaEndereco().getMunicipio() + "/";
        endereco = endereco + empresa.getEmpresaEndereco().getEstado().name() + ", " + mascaraCep(empresa.getEmpresaEndereco().getCep());
        sb.append(TABLE);
        sb.append(THEAD);
        sb.append(TR);
        sb.append(TD);
        String img = Base64.getEncoder().encodeToString(empresa.getArquivo().getArquivo());
        img = "data:" + empresa.getArquivo().getContentType() + ";base64, " + img;
        sb.append("<img src='" + img + "' width='300px' height='100px' style='height: 100px;' />");
        sb.append(TD_FINAL);
        sb.append(TD);
        sb.append(B + empresa.getEmpresa().getRazaoSocial().toUpperCase() + B_FINAL + "<br>");
        sb.append(B + "CNPJ" + B_FINAL + mascaraCnpjCpf(empresa.getEmpresa().getCnpj()) + "<br>");
        sb.append(endereco.toUpperCase() + "<br>" + empresa.getEmpresa().getSite().toLowerCase());
        sb.append(TD_FINAL);
        sb.append(TR_FINAL);
        sb.append(THEAD_FINAL);
        sb.append(TABLE_FINAL);
    }

    private void resumo(final LocalDateTime de, final LocalDateTime ate, final Usuario usuario, final StringBuilder sb, final boolean diario, final Set<String> idEventos) {
        sb.append(TABLE);
        sb.append(THEAD);
        sb.append(TR);
        sb.append(TD);
        if (diario) {
            sb.append("RESUMO DIA");
        } else {
            sb.append("RESUMO DO PERÍODO");
        }
        sb.append(TD_FINAL);
        sb.append(TR_FINAL);
        sb.append(THEAD_FINAL);
        sb.append(TABLE_FINAL);
        sb.append(TABLE);
        sb.append(THEAD);
        sb.append(TR);
        sb.append(TD);
        sb.append("Descrição");
        sb.append(TD_FINAL);
        sb.append(TD);
        sb.append("Quantidade de Itens");
        sb.append(TD_FINAL);
        sb.append(TD);
        sb.append("Total");
        sb.append(TD_FINAL);
        sb.append(TD);
        sb.append("Ticket Médio");
        sb.append(TD_FINAL);
        sb.append(TR_FINAL);
        final Collection<Pedido> caixaResumo = pedidoService.caixaResumo(de, ate, usuario, idEventos);
        for (final Pedido pedido : caixaResumo) {
            log.info("caixa - pedidos - pedido: " + pedido.toString());
            sb.append(TR);
            sb.append(TD);
            sb.append(pedido.getTipoPagamento().getDescricao().toUpperCase());
            sb.append(TD_FINAL);
            sb.append(TD);
            sb.append(pedido.getNumberTickets());
            sb.append(TD_FINAL);
            sb.append(TD);
            sb.append(pedido.getBuyerPaid().setScale(2, DOWN));
            sb.append(TD_FINAL);
            sb.append(TD);
            sb.append(pedido.getBuyerPaid().divide(new BigDecimal(pedido.getNumberTickets()), DOWN).setScale(2, DOWN));
            sb.append(TD_FINAL);
            sb.append(TR_FINAL);
        }
        sb.append(THEAD_FINAL);
        sb.append(TABLE_FINAL);
    }

    private void validar(final FechamentoCaixaFormDTO dto) {
        log.info("validar - dto: " + dto.toString());
        final Set<ConstraintViolation<FechamentoCaixaFormDTO>> violations = validator.validate(dto, FechamentoCaixaRegra.class);
        if (!violations.isEmpty()) {
            throw new GeralException(violations.stream().map(ConstraintViolation::getMessage).collect(joining("\n")));
        }
    }
}

Qual o retorno do empresa.getArquivo().getArquivo()?
Porque é que um “Arquivo” tem um “getArquivo”?
Aparentemente você está convertendo para Base 64 o caminho do arquivo e não o conteúdo do arquivo.

Você tem que converter o conteúdo do arquivo.

E daí a linha abaixo é desnecessária

img = "data:" + empresa.getArquivo().getContentType() + ";base64, " + img;
1 curtida

Esqueci de incluir o restante.
Porque é que um “Arquivo” tem um “getArquivo”?
**EmpresaInternoDTO **

package br.com.ghnetsoft.eventos.pedido.dto;

import static lombok.AccessLevel.PROTECTED;

import java.io.Serializable;

import br.com.ghnetsoft.eventos.pedido.model.outro.Empresa;
import br.com.ghnetsoft.eventos.pedido.model.outro.EmpresaEndereco;
import br.com.ghnetsoft.principal.dto.ArquivoDTO;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@ToString(of = { "empresa", "arquivo", "empresaEndereco" })
@EqualsAndHashCode(callSuper = false)
@Setter
@Getter
@Builder
@NoArgsConstructor(access = PROTECTED)
@AllArgsConstructor(access = PROTECTED)
public class EmpresaInternoDTO implements Serializable {

    private static final long serialVersionUID = 6127845117440968571L;
    private Empresa empresa;
    private ArquivoDTO arquivo;
    private EmpresaEndereco empresaEndereco;
}

**ArquivoDTO **

package br.com.ghnetsoft.principal.dto;

import static lombok.AccessLevel.PROTECTED;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@ToString(of = { "nome", "contentType", "tamanho", "url", "arquivo" })
@Getter
@Setter
@Builder
@NoArgsConstructor(access = PROTECTED)
@AllArgsConstructor(access = PROTECTED)
public class ArquivoDTO extends PrincipalRetornoDTO {

    private static final long serialVersionUID = -8404275782835770067L;
    private String nome;
    private String contentType;
    private byte[] arquivo;
    private Long tamanho;
    private String url;
}

Qual o retorno do empresa.getArquivo().getArquivo() ?
Aqui retorna o byte[]

Está imagem que está no banco e deveria ser impressa

final String img = Base64.getEncoder().encodeToString(empresa.getArquivo().getArquivo());

Banco de dados
image