Como imprimo a div indicada (sem desativar manualmente todo o outro conteúdo da página)?
Quero evitar uma nova caixa de diálogo de visualização, portanto, criar uma nova janela com esse conteúdo não é útil.
A página contém algumas tabelas, uma delas contém a div que eu quero imprimir - a tabela é estilizada com estilos visuais para a Web, que não devem aparecer na impressão.
javascript
css
printing
dhtml
noesgard
fonte
fonte
Respostas:
Aqui está uma solução geral, usando apenas CSS , que eu verifiquei funcionar.
Abordagens alternativas não são tão boas. O uso
display
é complicado porque, se algum elemento tiverdisplay:none
, nenhum de seus descendentes será exibido. Para usá-lo, você precisa alterar a estrutura da sua página.O uso
visibility
funciona melhor, pois você pode ativar a visibilidade dos descendentes. Os elementos invisíveis ainda afetam o layout, então eu vousection-to-print
para o canto superior esquerdo para que ele seja impresso corretamente.fonte
position:fixed
. No entanto, o Chrome e o Safari também truncariam o conteúdo, especialmente após a primeira página. Portanto, minha solução final foi definir o alvo e todos os seus pais paraoverflow:visible; position:absolute !important; top:0;left:0
#section-to-print
corresponde à própria seção;#section-to-print *
corresponde a cada subelemento da seção. Portanto, essa regra apenas torna visível a seção e todo o seu conteúdo.Eu tenho uma solução melhor com código mínimo.
Coloque sua parte imprimível dentro de uma div com um ID como este:
Em seguida, adicione um evento como um onclick (como mostrado acima) e passe o ID da div como fiz acima.
Agora vamos criar um javascript realmente simples:
Observe como isso é simples? Sem pop-ups, sem novas janelas, sem estilo maluco, sem bibliotecas JS como o jquery. O problema com soluções realmente complicadas (a resposta não é complicada e não é o que estou me referindo) é o fato de que NUNCA será traduzido em todos os navegadores! Se você quiser diferenciar os estilos, faça o que é mostrado na resposta marcada adicionando o atributo media a um link da folha de estilo (media = "print").
Sem penugem, leve, ele simplesmente funciona.
fonte
.click
. É uma pena, porque o código é muito leve.Todas as respostas até agora são muito falho - que quer envolver a adição
class="noprint"
a tudo ou sujará-sedisplay
dentro#printable
.Eu acho que a melhor solução seria criar um invólucro em torno do material não imprimível:
Claro que isso não é perfeito, pois envolve mover um pouco as coisas no seu HTML ...
fonte
Com o jQuery, é tão simples quanto isto:
fonte
Você poderia usar uma folha de estilo de impressão e CSS para organizar o conteúdo que deseja imprimir? Leia este artigo para mais dicas.
fonte
Isso funciona bem:
Observe que isso funciona apenas com "visibilidade". "display" não fará isso. Testado em FF3.
fonte
Eu realmente não gostei de nenhuma dessas respostas como um todo. Se você tem uma classe (digamos printableArea) e a possui como filho imediato do corpo, pode fazer algo assim no seu CSS impresso:
Para aqueles que procuram printableArea em outro local, você precisa garantir que os pais de printableArea sejam mostrados:
O uso da visibilidade pode causar muitos problemas de espaçamento e páginas em branco. Isso ocorre porque a visibilidade mantém o espaço dos elementos, apenas o oculta, enquanto a tela o remove e permite que outros elementos ocupem seu espaço.
A razão pela qual essa solução funciona é que você não está pegando todos os elementos, apenas os filhos imediatos do corpo e os escondendo. As outras soluções abaixo, com display css, ocultam todos os elementos, o que afeta tudo o conteúdo do printableArea.
Eu não sugeriria javascript, pois você precisaria de um botão de impressão no qual o usuário clicasse e os botões de impressão padrão do navegador não teriam o mesmo efeito. Se você realmente precisa fazer isso, o que eu faria é armazenar o html do corpo, remover todos os elementos indesejados, imprimir e adicionar o html novamente. Como mencionado, eu evitaria isso se você puder e usar uma opção CSS como acima.
NOTA: Você pode adicionar qualquer CSS ao CSS de impressão usando estilos embutidos:
Ou, como eu costumo usar, é uma tag de link:
fonte
Dê o elemento que você deseja imprimir a identificação
printMe
.Inclua este script na sua tag head:
Chame a função
fonte
hm ... use o tipo de uma folha de estilo para imprimir ... por exemplo:
print.css:
fonte
fonte
Etapa 1: escreva o seguinte javascript dentro da tag head
Etapa 2: Chame a função PrintMe ('DivID') com um evento onclick.
fonte
Com o CSS 3, você pode usar o seguinte:
fonte
Eu peguei o conteúdo usando JavaScript e criei uma janela que eu poderia imprimir em vez ...
fonte
O método de Sandro funciona muito bem.
Eu o ajustei para permitir a permissão de vários links printMe, especialmente para uso em páginas com guias e expansão de texto.
function processPrint(printMe){
<- chamando por uma variável aquivar printReadyElem = document.getElementById(printMe);
<- removeu as aspas em torno do printMe para solicitar uma variável<a href="javascript:void(processPrint('divID'));">Print</a>
<- passando o ID da div a ser impresso na função para transformar a variável printMe no ID da div. são necessárias aspas simplesfonte
printDiv (divId) : Uma solução generalizada para imprimir qualquer div em qualquer página.
Eu tinha um problema semelhante, mas queria (a) poder imprimir a página inteira ou (b) imprimir qualquer uma das várias áreas específicas. Minha solução, graças a grande parte das opções acima, permite especificar qualquer objeto div a ser impresso.
A chave para esta solução é adicionar uma regra apropriada à folha de estilos da mídia de impressão para que a div solicitada (e seu conteúdo) seja impressa.
Primeiro, crie o css de impressão necessário para suprimir tudo (mas sem a regra específica para permitir o elemento que você deseja imprimir).
Observe que eu adicionei novas regras de classe:
Em seguida, insira três funções JavaScript. O primeiro apenas ativa e desativa a folha de estilo da mídia de impressão.
O segundo faz o trabalho real e o terceiro limpa depois. O segundo (printDiv) ativa a folha de estilo da mídia de impressão e anexa uma nova regra para permitir que a div desejada seja impressa, emite a impressão e adiciona um atraso antes da limpeza final (caso contrário, os estilos podem ser redefinidos antes da impressão ser realmente feito.)
As funções finais excluem a regra adicionada e definem o estilo de impressão novamente como desativado, para que toda a página possa ser impressa.
A única outra coisa a fazer é adicionar uma linha ao seu processamento onload para que o estilo de impressão seja inicialmente desativado, permitindo a impressão de toda a página.
Então, de qualquer lugar do seu documento, você pode imprimir uma div. Basta emitir printDiv ("thedivid") de um botão ou o que for.
Uma grande vantagem dessa abordagem é fornecer uma solução geral para imprimir o conteúdo selecionado de dentro de uma página. Também permite o uso de estilos existentes para elementos impressos - incluindo a div que contém.
NOTA: Na minha implementação, esta deve ser a primeira folha de estilos. Altere as referências da planilha (0) para o número da planilha apropriado, se precisar fazê-lo posteriormente na sequência da planilha.
fonte
@ Kevin Florida Se você tem vários divs com a mesma classe, pode usá-lo assim:
eu estava usando o tipo de conteúdo interno do Colorbox
fonte
No meu caso, tive que imprimir uma imagem dentro de uma página. Quando usei a solução votada, eu tinha 1 página em branco e a outra mostrando a imagem. Espero que ajude alguém.
Aqui está o css que eu usei:
Meu html é:
fonte
Melhor css para caber na altura vazia do espaço:
fonte
A melhor maneira de imprimir uma determinada div ou qualquer elemento
fonte
Use uma folha de estilo especial para imprimir
e adicione uma classe, ou seja, "noprint" a cada tag cujo conteúdo você não deseja imprimir.
No uso de CSS
fonte
Se você deseja apenas imprimir esta div, deve usar a instrução:
fonte
A função printDiv () saiu algumas vezes, mas nesse caso, você perde todos os seus elementos de ligação e valores de entrada. Então, minha solução é criar uma div para tudo chamado "body_allin" e outra fora do primeiro chamado "body_print".
Então você chama esta função:
fonte
Você pode usar um estilo CSS separado que desativa todos os outros conteúdos, exceto aquele com o ID "printarea".
Consulte Design CSS: Indo para impressão para obter mais explicações e exemplos.
fonte
Eu tinha várias imagens, cada uma com um botão, e precisava clicar em um botão para imprimir cada div com uma imagem. Esta solução funciona se eu tiver desativado o cache no meu navegador e o tamanho da imagem não for alterado no Chrome:
fonte
Mais uma abordagem sem afetar a página atual e também persiste o css durante a impressão. Aqui, o seletor deve ser um seletor div específico, que conteúdo precisamos imprimir.
Aqui, desde que haja um tempo limite, mostre que o css externo é aplicado a ele.
fonte
Tentei muitas das soluções fornecidas, nenhuma delas funcionou perfeitamente. Eles perdem ligações CSS ou JavaScript. Encontrei uma solução perfeita e fácil que não perde as ligações CSS nem JavaScript.
HTML:
Javascript:
fonte
Estou muito atrasado para esta festa, mas gostaria de abordar outra abordagem. Eu escrevi um pequeno módulo JavaScript chamado PrintElements para imprimir dinamicamente partes de uma página da web.
Ele funciona através da iteração através dos elementos de nó selecionados e, para cada nó, ele percorre a árvore DOM até o elemento BODY. Em cada nível, incluindo o inicial (que é o nível do nó a ser impresso), ele anexa uma classe de marcador (
pe-preserve-print
) ao nó atual. Em seguida, anexa outra classe de marcador (pe-no-print
) a todos os irmãos do nó atual, mas apenas se não houverpe-preserve-print
classe neles. Como terceiro ato, também atribui outra classe aos elementos ancestrais preservadospe-preserve-ancestor
.Um css suplementar de impressão simples simples oculta e mostra os respectivos elementos. Alguns benefícios dessa abordagem são que todos os estilos são preservados, ela não abre uma nova janela, não há necessidade de movimentar muitos elementos DOM e geralmente não é invasiva no documento original.
Veja a demonstração ou leia o artigo relacionado para obter mais detalhes .
fonte
Você pode usar isso: http://vikku.info/codesnippets/javascript/print-div-content-print-only-the-content-of-an-html-element-and-not-the-whole-document/
Ou use
visibility:visible
evisibility:hidden
propriedade css junto com@media print{}
'display: none' oculta todos os 'display: block' aninhados. Isso não é solução.
fonte
Eu encontrei a solução.
fonte
com base na resposta do @Kevin Florida, criei uma maneira de evitar o script na desativação da página atual devido à substituição do conteúdo. Eu uso outro arquivo chamado "printScreen.php" (ou .html). Enrole tudo o que você deseja imprimir em uma div "printSource". E com javascript, abra uma nova janela criada anteriormente ("printScreen.php") e, em seguida, pegue o conteúdo em "printSource" da janela superior.
Aqui está o código.
Janela principal :
Este é "printScreen.php" - outro arquivo para pegar o conteúdo para imprimir
fonte