9
votes

HTML Imprimer une page très large sur plusieurs feuilles A4

J'ai une page avec un graphique horizontal large (disons autour de 3000px) qui est normalement défilable.

Dans la version d'impression, je restitue l'intégralité du graphique (je dispose d'un code JavaScript / HTML séparé pour la version d'impression), il faut donc dire trois largeurs A4 (paysage) à l'écran .

Dans cette SIAUTATION, je vois que le navigateur (FF3 dans ce cas) ne me permet pas d'imprimer la page large sur plusieurs feuilles de papier (basées sur l'aperçu de l'impression).

Il semble que le seul moyen d'afficher l'intégralité du document est d'avoir le niveau de zoom de l'utilisateur à 30%, puis le graphe entier convient à un seul A4.

Je dois manquer une certaine directive CSS là-bas, mais n'a pas été en mesure de le gérer.

appréciera les pointeurs / idées.

Merci.


4 commentaires

Merci, je suis convaincu depuis un certain temps que personne ne se soucie de la manière dont les impressions HTML


Est quelque chose comme pdf une option?


Je ne suppose pas qu'il existe une implémentation automatique de l'écran à PDF dans FF3 ... Je pourrais peindre le PDF sur le côté serveur, qui est horrible en soi.


Cela dépend de votre plate-forme. Si vous avez une bibliothèque PDF disponible, c'est une bonne solution. N'oubliez pas que HTML est conçu pour pouvoir s'adapter à différentes fenêtres en forme. PDF est plutôt bon si vous connaissez la page 1 à l'avance. Je rendu le PDF à partir de zéro, n'essayez pas de convertir HTML-> PDF


4 Réponses :


0
votes

Impression HTML sur plusieurs pages comme celle-ci n'est pas une bonne chose à faire

Vous voulez probablement casser le graphique dans les morceaux de la taille de la page (par exemple un div pour chaque page) de sorte que lorsqu'ils sont flottés à côté de l'autre, le graphique semble autant que nécessaire. Ensuite, utilisez CSS PAGE-BREAK-AVANT ou page-break-après pour vous assurer que les pages imprimées sont cassées correctement et que vous ne perdez aucun contenu sur le côté de la page.

Assurez-vous également que vous avez le multimédia Type Spécifiez l'impression pour le CSS que vous utilisez. Pour la version imprimable.


0 commentaires

0
votes

Vous ne pouvez pas contrôler comment HTML est imprimé de manière réelle - HTML / CSS / JS n'a aucun accès aux paramètres d'impression de pilote d'impression ni de navigateur. La seule option consiste à convertir votre sortie imprimable en PDF (ou à un autre format-centre d'impression) et servir cela à la place.


0 commentaires

3
votes

Vous pouvez ajouter une transformation de rotation à la feuille de style d'impression. Une solution partielle comme une longue table sera désormais trop large ...

.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>


0 commentaires

1
votes

(une réponse précédente de la mine à cette question a été supprimée, je ne sais pas pourquoi: J'essaie encore)

Long Time Je cherchais une solution basée sur CSS sur ce problème, et je pense qu'il n'est pas possible d'avoir des pareilles verticales de tables HTML via CSS (au moins pas des pauses de page sur des données tabulaires dans une balise de table HTML, mais il devrait être possible avec des données tabulaires organisées en divs).

Je pense que la seule solution est de laisser Javascript à faire le fractionnement. Lorsque la page est chargée, JavaScript peut vérifier si la table est plus large que la largeur de la page souhaitée: Dans ce cas, il est possible de créer de manière dynamique une nouvelle table et de dupliquer uniquement les colonnes qui sont en dehors de la largeur autorisée et les supprimant de la table d'origine. . Tout le processus est un peu délicat, mais les résultats sont satisfaisants.

Il est également possible de laisser le code JavaScript uniquement à exécuter uniquement pour l'impression et non pour le tableau affiché à l'écran: Un bouton d'impression de la page peut être organisé pour exécuter un code côté serveur, par exemple PHP, qui peut générer une pensée PDF. La bibliothèque wkhtmltopdf, en passant à la page HTML, où est la table, y compris le code JavaScript . En fait, WKHTMLTOPDF génère un PDF simulant un navigateur et le code JavasRip sera exécuté correctement.

Maintenant, cette bibliothèque Javascrpt existent déjà, je l'ai déjà écrite et travaille très bien (au moins pour mes besoins), et il est librement disponible sur Internet: je ne veux pas le lier car il avait déjà eu une réponse précédente supprimée, et Je ne sais pas si c'était pour cette raison. Mais si quelqu'un est intéressé, vous pouvez demander aux commentaires et je vais le donner.


0 commentaires