Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Preciso da seguinte solução, tenho uma table com uma imagem de fundo, estou imprimindo cartas com esse código, essa imagem e um papel timbrado, e coloco o texto dentro de td's, mas quando não tem tamanho suficiente, a imagem de fundo e cortada, queria saber como posso fazer pela table, para mostrar toda a imagem, já tenho o tamanho dela( Largura:800px e Altura:1122px), não coloquei em div pelo fato de quando vem muitos dados não consigo quebrar a pagina automaticamente, e já por table ele quebra sozinho sem eu precisar ficar colocando page-break no meio do Código, o único problema que as vezes não vem dados o suficiente para mostrar a tabela, e assim acaba cortando a mesma.
>
3 horas atrás, Pita disse:
Acho melhor você mudar um pouco.
Ao invés de usar um TABLE é melhor você usar um DIV com a altura, largura e imagem de fundo que você deseja. Os elementos você pode posicionar, e melhor, como estão dentro do div, você pode até usar o position:absolute para posicionar exatamente onde você deseja.
Com isso não tem o risco de cortar e ainda tem melhor flexibilidade para posicionar o texto
Realmente Pita, antes fiz com div, mas o meu problema, e pelo fato de ser uma impressão, e as vezes vem muitos itens que vão nesta carta, realizando a quebra de pagina, e quando quebra a pagina, eu ja perco o espaço do topo que dei, e a imagem de fundo.Eu fiz um codigo que conta por exemplo 5 itens, e pula de pagina, fecha a div anterior com a imagem, e abre uma nova, com todas as margens e etc, ficou legal, porem queria algo mais automatico, do jeito que esta , ta muito manual, eu decidindo a quebra de pagina, queria q quebrasse e colocasse a imagem de fundo e as margens automatico.
Abaixo um Exemplo do meu codigo:
https://jsfiddle.net/VitorBueno/w3rsz0qg/2/
Sinceramente não consigo entender o que está tentando fazer... Por que não tenta desenhar, literalmente falando. Faz um desenho de como está e de como deveria ficar e anexa aqui.
Mas se eu entendi bem o que você está tentando fazer, então o grande problema se encontra em sua imagem de fundo, ou seja, se você vai possuir um conteúdo dinâmico, que varia de carta para carta, então talvez você não deva utilizar a imagem da forma como ela está. Talvez você deva recortá-la, em mais ou menos 3 pedaços: Cabeçalho, corpo e rodapé. Com as tres partes da imagem em mãos, então você criar uma div com a imagem do cabeçalho, outra div com a imagem do corpo (a imagem da gota dágua) e a ultima div como rodapé da imagem. Sendo que a div do meio ( gota dágua) teria um tamanho dinamico expandido de acordo com o tamanho do conteúdo. E quanto a quebra de página, uma sugestão seria limitar a quantidade de caracteres até o limite de uma página, ao chegar nesse limite você gera a carta e caso ainda reste algum texto, limpe o conteúdo anterior e recomece o processo de digitação.
>
1 hora atrás, BonnerUnit disse:
Sinceramente não consigo entender o que está tentando fazer... Por que não tenta desenhar, literalmente falando. Faz um desenho de como está e de como deveria ficar e anexa aqui.
Mas se eu entendi bem o que você está tentando fazer, então o grande problema se encontra em sua imagem de fundo, ou seja, se você vai possuir um conteúdo dinâmico, que varia de carta para carta, então talvez você não deva utilizar a imagem da forma como ela está. Talvez você deva recortá-la, em mais ou menos 3 pedaços: Cabeçalho, corpo e rodapé. Com as tres partes da imagem em mãos, então você criar uma div com a imagem do cabeçalho, outra div com a imagem do corpo (a imagem da gota dágua) e a ultima div como rodapé da imagem. Sendo que a div do meio ( gota dágua) teria um tamanho dinamico expandido de acordo com o tamanho do conteúdo. E quanto a quebra de página, uma sugestão seria limitar a quantidade de caracteres até o limite de uma página, ao chegar nesse limite você gera a carta e caso ainda reste algum texto, limpe o conteúdo anterior e recomece o processo de digitação.
Certo assim, Digamos tenho uma carta, com um texto qualquer, e algumas lista de itens, cada linha um item digamos, tipo 1-Computador 2-Mouse e etc, cada item desse seria uma linha, e no fundo dessa carta tem um imagem de um timbrado, que esse meu texto e itens vai gerar por cima dele, essa imagem no caso vai ser o background da div mãe, e assim quando é só uma folha ok, mas as vezes a quantidade de itens vai ser maior, ocupando outra folha, e nessa outra folha alem de vir esses itens, precisa vir também o mesmo timbrado e todas as margens.
Eu já fiz uma função que conta os itens, quando chega numa certa quantidade, ele fecha a div mãe, quebra a pagina, e começa a div mãe novamente, com a imagem de fundo e a margem do topo ok, porem preciso disso de forma automática, sem eu barrar quando chegar numa certa quantidade, pois as vezes um item vai ocupar uma linha, as vezes duas,três..... e não da pra ter um valor certo de quantos itens posso deixar para não Zuar a impressão.
Não posso usar o exemplo que falou de ter uma imagem para o começo e outra para a final, pois essa imagem tem um topo,uma marca no meio da pagina, e um rodapé com endereço, conforme mandei o link, e também porque todas as paginas tem que ter essa mesma imagem de fundo, com todas as margens.
Então assim, eu preciso de uma forma automática de o sistema quebrar a pagina, e quando quebrar refazer o background da div e colocar as margens, não posso quebrar a pagina manualmente pois não fica num padrão legal.
Não existe uma forma automática, tem que ir controlando de alguma forma.
O que você poderia fazer, talvez funcione assim, não se, precisa testar é:
Continuar usando a tabela e no final você verifica a altura da tabela(via JQuery), se a altura não der o tamanho de uma página(o um múltiplo da altura) você adiciona na tabela um TR+TD com a altura que está faltando.
Acho que você não entendeu o que eu quis dizer sobre o recorte de imagens Vitor. Eu te faria um exemplo, entretanto no momento eu não disponho de tempo, mas, caso não tenha solucionado seu problema até amanhã, eu postarei um exemplo. Mas talvez você não deva fazer uma função que conte os itens, pois como você mesmo falou as vezes um item ocupa uma linha inteira as vezes não. Dessa forma talvez você devesse ter um controle maior sobre o número de linhas que caberão em cada folha. Outro ponto importante que não mencionou é a origem dos itens. Eles estão vindo do banco de dados, ou você os insere manualmente?
Então Vitor, não sei se você já solucionou sua questão, mas caso ainda não a tenha solucionado eu desenvolvi um projeto que talvez atenda as suas necessidades. Basta enviá-lo para o servidor e acessar.
Segue o anexo: Carta.zip
Qualquer coisa posta aí.
Acho melhor você mudar um pouco.
Ao invés de usar um TABLE é melhor você usar um DIV com a altura, largura e imagem de fundo que você deseja. Os elementos você pode posicionar, e melhor, como estão dentro do div, você pode até usar o position:absolute para posicionar exatamente onde você deseja.
Com isso não tem o risco de cortar e ainda tem melhor flexibilidade para posicionar o texto