2012-10-31 17 views
10

Desidero stampare una pagina Web in PDF senza margini in Safari. Il formato della pagina è impostato su "A4 borderless" nella finestra di dialogo di stampa.Come impostare i margini di stampa Safari tramite CSS per stampare senza bordi

Qualsiasi cosa sembri fare, Safari su OSX aggiunge un margine in più al mio HTML. Controlla 'Stampa sfondi' per vedere cosa intendo.

Chiaramente la regola della pagina @ non ha alcun effetto per Safari, ma ci sono altri modi?

http://jsfiddle.net/willemvb/psFHC/

@page { 
    size: 21cm 29.7cm; /*A4*/ 
    margin: 0; /*webkit says no*/ 
} 

html{ 
    margin: 0; 
    padding: 0; 
    width: 100%; 
} 

body { 
    margin: 0; 
    padding: 0; 
    font-family: sans-serif; 
    width: 100%; 
    background: #eee; 
} 

+0

Si dispone di un 'padding: 5%' più in basso nel codice, è già calcolato in? –

+0

Sì, impostarlo su 0 non fa differenza, l'ho rimosso dalla domanda per renderlo più chiaro. –

risposta

7

Ci sono 3 cose da prendere in considerazione:

  1. Il margine della regola della pagina, purtroppo

    @page { 
    margin: 0cm !important; 
    } 
    

    Ha s nessun effetto su Safari 6, dove funziona in Chrome 23. Come so, fino a quando Safari non lo supporta, non c'è soluzione (sembra che sia stato fissato a circa 10mm).

  2. L'impostazione della pagina come here potrebbe essere necessario definire un "Formato carta" personalizzato nel pannello del menu "Stampa ..." senza alcun margine (lo avete già fatto btw).

  3. Ovviamente per occuparsi dell'altro contenuto interno html, corpo ... non avere alcun margine.

+1

Grazie, è esattamente il punto 1 a scervellarmi. Quindi per ora devo solo aspettare una soluzione in Safari, o usare invece Chrome. –

+4

Alla fine del 2016 stiamo ancora aspettando che Safari obbedisca all'elemento @page. Questo è molto frustrante perché rende molto difficile usare Safari per stampare cose come le etichette definite in HTML/CSS. – EFC

+0

Ho definito un formato carta personalizzato senza margine ma l'anteprima ha mostrato che Safari stava ancora riducendo in modo evidente il mio SVG allo stesso margine. $! @ #! @ – Andy

4

La risposta selezionata non è corretta. Per rispondere correttamente alla domanda è necessario prima capire il problema.

stampa senza bordi e stampanti:

Pochissime stampanti possono "in realtà" stampare stampe senza bordi anche se dicono che fanno. La maggior parte si limita a ingrandire leggermente la stampa in modo che si estenda oltre la pagina effettiva e, di solito, fornisca un cursore per regolare tale quantità. Il motivo è che la maggior parte della stampante non ha un sensore per determinare dove si trova effettivamente la carta, presume che la carta sia lì e per la maggior parte delle stampe non importa se è 0,5 mm spenta o anche 1 mm.

Per i bordi senza bordi è importante perché la stampa esce con un bordo bianco (carta) attorno ad esso.

Per questo motivo, il 95% delle stampanti là fuori imita questa stampa "senza bordi" eseguendo effettivamente l'inchiostro nell'aria sottile per un po 'solo così la carta è coperta fino al bordo. La stampa nell'aria è cattiva, può causare sbavature a lungo termine e dovrebbe essere evitata, quindi la quantità di stampa oltre il bordo deve essere regolata al minimo.

stampanti Buoni grande formato hanno un sensore per rilevare larghezza della carta ma è utilizzato per modificare leggermente la carta perché la lunghezza, da 50 a 150 per rotolo, può causare anche un disallineamento 0,1mm a diventare un problema e causare inceppamenti.

Per risolvere completamente questo problema, viene utilizzato "bleed", in cui in realtà si progetta tutto su una carta leggermente più grande che viene successivamente ritagliata.

Ok ... ora lo sai.

In avanti al problema dei CSS stampe senza bordi:

Per comprendere appieno questo problema si deve conoscere il "Box".

Box Model

I modelli di sicurezza il comportamento di quasi ogni elemento in CSS. La pagina che si desidera stampare è solitamente avvolto in un tag di qualche tipo, sia un div con e id o una classe come questa:

<div class="page">lots of content</div> 

Saremo parlando della linea nera, chiamato confine, ed è "margine" e "cuscinetto" di due fratelli.

All'insaputa della maggior parte è il fatto che ogni stampante là fuori in realtà riporta i margini al suo interno può stampare per ogni formato di carta che supporta.

Ecco un HP 2800dtn che lo fa (basta passare con il mouse sopra il formato della carta per un po 'e apparirà).

HP 2800dtn

La "correzione":

Safari sta facendo la cosa giusta. Lì l'ho detto ... non è un bug.

La ragione per cui apparentemente rifiuta di produrre stampe senza bordi è che in realtà non è possibile (nel mondo reale). Puoi farlo, ma le persone che lo stampano con uno zoom al 100% avranno il contenuto tagliato dalla stampante, che, come ho descritto, non può stampare fino all'orlo.

Quindi la maggior parte dovrà "adattarsi ai margini" della carta (il comportamento predefinito di OS X, ridotto a circa il 98% dello zoom), quindi abilitare la modalità senza bordi sulla stampante che a sua volta ingrandisce la versione zoomata min. 98% al 103%. Se fai matematica ottieni un numero strano di probabilmente il 101,5% della versione originale (non posso dirlo con certezza, non sono molto bravo in matematica se non è diviso per due :) Questo non è esattamente un problema per i caratteri e la grafica vettoriale, ma provoca il caos nel mondo dei pixel. Il mondo dei pixel adora, proprio come faccio io, il numero 2 per impostazione predefinita, il resto è semplicemente "smussante".

Quindi non è possibile risolvere il problema, perché non è rotto. Safari mette il bordo del div e tutti i suoi elementi interni all'interno della "area stampabile" della carta come riportato dalla stampante. Buona!

La soluzione:

Non si può sapere i margini della stampante fino a Command + p e selezionare un formato carta.

Ma cosa puoi fare in CSS per ottenere che "quello che vedi è ciò che ottieni" sentendo che piace a tutti?

  1. Utilizzare il margine sulla pagina div.finita. Nota che il margine è calcolato dall'elemento che contiene quel div.Quindi è necessario avvolgere il page nel actualpage

Definire CSS per il tipo di supporto in modo che lo schermo mostra margini di stampa immaginarie (vicino alla cosa reale) e il get di stampa di una versione senza margini .

/* @media all { */ /* I like using these */ 
    div.actualpage { 
    ... 
    height: 210mm; /* DIN A4 standard paper size */ 
    width: 297mm; 
    ... 
    } 
    div.page { 
    ... 
    /* margin: 0; you don't really have to explicitly set it to 0 unless it's already set to something else */ 
    ... 
    } 
/* } */ 

@media screen { 
div.page { 
    ... 
    margin: 5mm 5mm 5mm 10mm; /* printers usually have a bigger bottom margin*/ 
    ... 
    } 
} 

@media print { 
div.page { 
    ... 
    margin: 0mm; /* Browser will apply the correct margins when it prints */ 
    ... 
    } 
} 

Se non è possibile avvolgere la pagina in un altro div è possibile hack (vale a dire: la soluzione meno elegante) con imbottitura.

/* @media all { */ /* I like using these */ 
    div.page { 
    ... 
    height: 210mm; /* DIN A4 standard paper size */ 
    width: 297mm; 
    /* padding: 0; you don't really have to explicitly set it to 0 unless it's already set to something else */ 
    ... 
    } 
/* } */ 

@media screen { 
div.page { 
    ... 
    padding: 5mm 5mm 5mm 10mm; /* printers usually have a bigger bottom margin*/ 
    ... 
    } 
} 

@media print { 
div.page { 
    ... 
    padding: 0mm; /* Browser will apply the correct margins when it prints */ 
    ... 
    } 
} 
+0

Grazie, comprendo i principi del sanguinamento e dei bordi della carta. Tuttavia, ho definito un formato carta personalizzato con un margine di 0 mm nella finestra di dialogo di stampa che non funziona come previsto in Safari 9. Funziona in Chrome 46, anche quando si utilizza la finestra di dialogo del sistema. –

+5

Questo è semplicemente errato. Safari non è *** che fa la cosa giusta ignorando completamente la dichiarazione CSS '@ page' (e che non è correlato a ciò che il margine è impostato su). Semplicemente ignora completamente '@ page'. Tutto nella risposta accettata è assolutamente corretto. Ovviamente è vero che non si possono conoscere i margini della pagina su una determinata stampante finché non si seleziona sia la stampante che le dimensioni della pagina, ma questa domanda riguarda la _printing su PDF_, senza le limitazioni fisiche di dover gestire la carta e spruzzare inchiostro su di esso. Una stampante PDF può stampare senza bordi senza problemi. –

+0

@JanusBahsJacquet "Una stampante ... può stampare senza bordi senza problemi." non * tutte * le stampanti ... – unmircea

Problemi correlati