2013-05-27 28 views
5

Sto avendo degli incubi per capire come impostare correttamente il layout CSS e HTML per la stampa dei documenti nella nostra web-app. Abbiamo diversi documenti che entrano nel sistema (ordine, fattura, note di consegna, ...). I documenti sono costituiti da:Impostazione di stampa CSS e HTML per documenti multipagina con intestazione e piè di pagina in esecuzione

  • intestazione statica (logo aziendale, informazioni di contatto)
  • corpo
    • dati del cliente (di spedizione, indirizzo di fatturazione) tabella
    • articoli (tabella con più righe, che può diffusione della depressione diverse pagine)
  • piè di pagina statica (liberatoria)

Quello che voglio è seguenti funzionalità di stampa:

  • voglio intestazione statico e piè di pagina per essere stampante su ogni pagina se il corpo si diffonde trogolo diverse pagine
  • La tabella degli elementi per avere un colpo di testa tabella stampata in ogni pagina se si diffonde in più pagine

Attualmente il mio layout HTML è simile a questo:

<!-- STATIC HEADER --> 
<div id="pageHeader"> 
    <table class="table"> 
     <tr> 
      <td>Static header content here</td> 
     </tr> 
    </table> 
</div> 

<!-- DOCUMENT CONTENT --> 
<div id="pageBody"> 

    <!-- Customer data --> 
    <table class="table"> 
     <tr> 
      <td>Customer data here</td> 
     </tr> 
    </table> 

    <!-- Items table --> 
    <table class="table table-condensed table-print"> 
     <thead style="display:table-header-group;"> 
      <tr> 
       <th>Table header here</th> 
      </tr> 
     </thead> 
     <tbody> 
      <tr> 
       <td>Rows here</td> 
      </tr> 
     </tbody> 
    </table> 

</div> 

<!-- STATIC FOOTER --> 
<div id="pageFooter"> 
    <table class="table"> 
     <tr> 
      <td>Static footer content here</td> 
     </tr> 
    </table> 
</div> 

Stavo leggendo di eseguire intestazioni e piè di pagina dopo la risposta su this question ma non ottengo i risultati desiderati. Attualmente il mio CSS è impostato in questo modo:

#pageHeader, #pageFooter { display: none; } 

@media print { 
    #pageHeader { display: block; position: running(pageHeader); width: 100%; } 
    #pageFooter { display: block; position: running(pageFooter); width: 100%; } 
} 

@page { 
    @top-center { 
     content: element(pageHeader); 
    } 

    @bottom-center { 
     content: element(pageFooter); 
    } 
} 

Firefox mi dà risultati completamente strani. Per prima cosa stampa una pagina vuota, quindi la seconda pagina va bene se si tratta di un documento a pagina singola, se si tratta di un documento a più pagine, quindi stampa solo la prima pagina, le altre pagine vengono ignorate.

Google Chrome è leggermente migliore. Stampa tutte le pagine ma non stampa intestazione e piè di pagina statici su ogni pagina. L'intestazione viene stampata solo sulla prima pagina, mentre il piè di pagina solo sull'ultima pagina.

Anche l'altro problema è che la tabella principale che può diffondersi attraverso più pagine non stampa l'intestazione della tabella in ogni pagina se la tabella si diffonde attraverso più pagine. Pensavo che lo display:table-header-group; su <thead> avrebbe dovuto farlo?

È semplicemente impossibile ottenere o sto facendo qualcosa di completamente sbagliato? Se puoi darmi qualche consiglio o strategia su come gestirlo sarò molto felice. Poiché questa app è in esecuzione in ambiente controllato, posso concentrarmi su uno o due browser (Chrome e Firefox sarebbero fantastici). Se funziona in entrambi è un bonus!

+0

Ho pubblicato un metodo compatibile con Chrome per simulare le intestazioni di pagina in esecuzione ** [qui] (http://stackoverflow.com/questions/19646835/print-repeating-page-headers-in-chrome/25880258#25880258) * * (nessun supporto per i piè di pagina, però) e una soluzione per la ripetizione di intestazioni di tabelle ** [qui] (http://stackoverflow.com/questions/7211229/having-google-chrome-repeat-table-headers-on-printed -Pagine/25737442 # 25737442) **. – DoctorDestructo

risposta

0

Firefox ha problemi a stampare alcuni stili nelle pagine HTML che appaiono normali sullo schermo, ma poiché si tratta di informazioni riservate, è difficile dare suggerimenti su cosa provare, e probabilmente non è utile suggerire l'hacking della pagina. I seguenti sono suggerimenti generali.

Quando si verifica un problema con un determinato sito, una buona "prima cosa da provare" è cancellare la cache di Firefox ed eliminare i cookie salvati per il sito.

  1. pulire la cache di Firefox

    Utilizzare Ctrl + Maiusc + R per ricaricare la pagina fresca dal server.

    In alternativa, è anche possibile cancellare la cache di Firefox completamente con:

    • pulsante arancione Firefox (o menu Strumenti)> Opzioni> Avanzate
    • Sulla mini-scheda Rete> Copia cache Web Content: "Svuota adesso "

    Se si dispone di un disco rigido di grandi dimensioni, potrebbero essere necessari alcuni minuti.

  2. Rimuovere i cookie del sito (salvare prima eventuali lavori in sospeso).

    Durante la visualizzazione di una pagina sul sito:

    • tasto destro del mouse e scegliere Visualizza pagina Info> Sicurezza> "Mostra i cookie"
    • Alt + t (aprire il menu classico Strumenti)> Info pagina > sicurezza> "Mostra i cookie"

Poi prova a ricaricare la pagina e accedere nuovamente. Questo aiuta?

0

Provare la modalità provvisoria di Firefox? È uno strumento diagnostico standard per bypassare le interferenze tramite estensioni (e alcune impostazioni personalizzate). Ulteriori informazioni: Risoluzione dei problemi di Firefox tramite la Modalità provvisoria.

È possibile riavviare Firefox in modalità provvisoria utilizzando

Aiuto> Riavvia il sistema con disabili

Nella finestra di dialogo, fare clic su "Start in modalità provvisoria" (non Reset)

modalità provvisoria Add-ons fa non disabilitare automaticamente i plugin. Flash dovrebbe andare bene, ma si potrebbe disabilitare gli altri qui:

pulsante arancione Firefox (o menu Strumenti)> Componenti aggiuntivi> Plugin categoria

eventuale differenza?

+0

@quando scelgo Riavvia con componenti aggiuntivi disattivati ​​Non ho l'opzione "Avvia in modalità provvisoria"? Sto usando Firefox 21.0 su OS X. Ecco la finestra di dialogo https://dl.dropboxusercontent.com/u/1207859/Screen%20Shot%202013-05-30%20at%201.58.56%20PM.png –

+0

Il link che mi hanno fornito sta bloccando nella mia azienda. Comunque aprirò il link mentre torno a casa. Fino alla prova questo link http://kb.mozillazine.org/Safe_mode#Mac_OS_X. ti aiuterà ad attivare la modalità sicura in OS X. e provarlo. –

4

Concentrando lo stesso problema ho fatto qualche ricerca. Ecco i miei risultati:

Il display:table-header-group; non funziona in cromo/chrome/webkit/.. perché non è implementato. C'è un problema aperto da 4 anni. https://code.google.com/p/chromium/issues/detail?id=24826

Si desidera utilizzare e @bottom-center. Questo sarebbe un grande pensiero. È dichiarato qui h ttp: //www.w3.org/TR/2013/NOTE-css-print-20130314/#at-rules ma facendo riferimento a http://en.wikipedia.org/wiki/Comparison_of_layout_engines_(Cascading_Style_Sheets)#Grammar_and_rules non è implementato da alcun motore di layout. Non so perché è menzionato qui http://alistapart.com/article/boom. Qualche idea?

Il motivo per cui si ottiene l'intestazione nella prima pagina e il piè di pagina l'ultimo uno è abbastanza semplice: basta tagliare la sezione @page e si vede: @media print { ... display:block ... Se dichiari di piè di pagina in cima, non funziona .

+0

'' '@ @ top-center''' e' '' @ bottom-center''' sono supportati da [Prince] (http://www.princexml.com/). –

Problemi correlati