html imprime uma página muito larga em várias folhas A4

9

Eu tenho uma página com um gráfico horizontal amplo (digamos em torno de 3000px) que normalmente é rolável.

Na versão de impressão, eu renderizo todo o gráfico (na verdade, eu tenho um código JAvascript / HTML separado para a versão de impressão), por isso é preciso dizer três larguras A4 (paisagem) na tela .

Nesta situação, vejo o navegador (FF3 neste caso) não me permite imprimir a página larga em várias folhas de papel (com base na visualização da impressão).

Parece que a única maneira de imprimir todo o documento é fazer com que o usuário defina o nível de zoom para 30%, e então o gráfico inteiro se encaixa em um único A4.

Eu devo estar perdendo alguma diretiva CSS, mas não consegui pesquisar no Google em nenhum lugar.

Aprecie ponteiros / ideias.

Obrigado.

    
por gnosis 13.10.2009 в 00:22
fonte

4 respostas

3

Você pode adicionar uma transformação de rotação à folha de estilo de impressão. Uma solução parcial como uma longa tabela agora será muito ampla ...

.rotated-when-printed {
    -moz-transform:rotate(90deg);
    -webkit-transform:rotate(90deg);
    -o-transform:rotate(90deg);
    filter:DXImageTransform.Microsoft.Matrix(sizingMethod='auto expand',M11=6.123233995736766e-17,M12=-1,M21=1,M22=6.123233995736766e-17)
}

<!-- some very wide table -->
<table class="rotated-when-printed">
    ...
</table>
    
por bas 12.08.2011 / 20:09
fonte
1

(uma resposta anterior minha para esta pergunta foi excluída, não sei por que: eu tento novamente)

Por muito tempo procurei uma solução baseada em CSS nesse problema, e acho que não é possível ter quebras de página verticais de tabelas HTML através de CSS (pelo menos não quebras de página em dados tabulares em uma tag HTML TABLE, mas deveria ser possível com dados tabulares organizados em DIVs).

Acho que a única solução é deixar o javascript fazer a divisão. Quando a página é carregada, o javascript pode verificar se a tabela é mais larga do que a largura da página desejada: nesse caso, é possível criar dinamicamente uma nova tabela e duplicar nela apenas as colunas que estão fora da largura permitida e excluí-las da tabela original . Todo o processo é um pouco complicado, mas os resultados são satisfatórios.

Também é possível permitir que o código javascript seja executado apenas para impressão e não para a tabela mostrada na tela: um botão de impressão na página pode ser organizado para executar um código do lado do servidor, por exemplo php, que pode gerar um pensamento pdf a biblioteca wkhtmltopdf, passando para ela a página html onde está a tabela, incluindo o código javascript . De fato, wkhtmltopdf gera um pdf simulando um navegador, e o código javasript será executado corretamente.

Agora, essa biblioteca javascrpt já existe, eu a escrevi e funciona muito bem (pelo menos para minhas necessidades), e está disponível gratuitamente na Internet: não quero vinculá-la porque já tive uma resposta anterior excluída e Não sei se foi por esse motivo. Mas se alguém estiver interessado, você pode perguntar nos comentários e eu darei.

    
por vstefanoxx 15.02.2015 / 11:37
fonte
0

Imprimir HTML em várias páginas como esta não é uma coisa boa a se fazer

Você provavelmente deseja dividir o gráfico em blocos de tamanho de página (por exemplo, um div para cada página), de modo que, quando flutuam um ao lado do outro, o gráfico é exibido conforme necessário. Em seguida, use CSS page-break-before ou quebra de página para garantir que as páginas impressas sejam quebradas corretamente e você não perca nenhum conteúdo na lateral da página.

Certifique-se também de ter o tipo mídia para especificar a impressão para o css usado para a versão imprimível.

    
por Simon Fox 13.10.2009 / 00:47
fonte
0

Você não pode controlar como o HTML é impresso de qualquer maneira real - HTML / CSS / JS não tem acesso ao driver de impressão ou às configurações de impressão do navegador. A única opção é converter sua saída imprimível em PDF (ou algum outro formato centrado na impressão) e servi-lo.

    
por AUSteve 16.01.2010 / 06:59
fonte