2010-11-21 5 views
1

Je génère des rapports au format HTML, et je veux les imprimer automatiquement en utilisant Qt (qt a un navigateur webkit, et on peut rendre son contenu dans un fichier PDF). Je souhaite positionner les éléments du rapport en fonction de la taille de la page cible. Pour cela, j'ai besoin d'accéder à la taille du papier (de préférence en pixels).Comment trouver la dimensionnalité du papier d'impression en javascript

Depuis que j'utilise webkit, il a toutes les dernières fonctionnalités html5 et css3.

Y a-t-il une API disponible pour accéder aux propriétés des pages imprimées dans javascript? par exemple, serait bien d'écrire: window.print_paper.width ou window.print_paper.height

Nous vous remercions à l'avance

Répondre

2

il est impossible. Javascript ne peut pas accéder à votre imprimante pour détecter le format du papier. Vous ne pouvez même pas utiliser la mesure de pixels car elle est relative à l'écran, donc vous devez utiliser d'autres unités comme pt, pouces, centimètres

3

Ce que vous demandez est en arrière de standards-track @page spec. Qu'est-ce que les médias paginés CSS3 (@page) vous permet de spécifier une orientation et la taille de la page que votre document doit être imprimé - ne pas interroger votre système pour l'orientation actuellement sélectionnée et la taille de la page. Même les requêtes CSS3 media ne vous permettront pas de le faire, au meilleur de ma connaissance.

+0

Une mise à jour ici? Juste pour clarifier: Votre réponse signifie qu'il n'est pas du tout possible d'obtenir le format de papier d'impression par défaut (ni via CSS ni via JavaScript). Est-il au moins possible de faire une supposition éclairée? –

+1

Non, c'est impossible. Vous pouvez faire une supposition éclairée de A4 vs lettre en reniflant le langage - mais c'est à peu près tout. –

+1

Et en regardant la langue des navigateurs est une approche assez mauvaise que les États-Unis, le Canada, le Mexique utilisent la taille des lettres et à peu près n'importe quel autre pays utilise A4. Donc l'anglais est relativement mélangé. –

0

Vous pouvez obtenir la taille du contenu via QWebFrame :: contentsSize() et le mettre à la disposition du monde JavaScript, par exemple. en utilisant QWebFrame :: addToJavaScriptWindowObject().

2

Utilisez l'en-tête de requête Accept-Language pour déterminer si l'utilisateur est in a Letter-using locale, sinon supposez A4. Assume le portrait si cela convient à vos utilisateurs. Puis reniflez le navigateur pour deviner les marges (IE9 = = 19,05 mm, FF5 = 12,7 mm, IE6 = 7,5 mm, Chrome = ~ 10 mm).

Questions connexes