2009-10-19 12 views
3

Ces navigateurs (versions de Windows) imprimer correctement une page Web qui a un revêtement de toile sur une image de balise img:Problème contenu impression de balise Canvas (Chrome, Opera)

IE6, IE7, IE8, Firefox, Safari

Mais Chrome (mise à jour que je tape ce à la version 3.0.195.27) et Opera (comme je tape cette version 10.0 build 1750 mise à jour) ne le font pas. Chrome ignore complètement le rendu de la toile. Opera rend la toile entière sous la forme d'un rectangle blanc, masquant l'image derrière elle.

Je sais que la balise canvas est plutôt nouvelle et que l'impression de pages Web est toujours risquée. Comment dois-je gérer cela? Y a-t-il des paramètres qui me manquent pour que cela fonctionne? Y a-t-il un événement "sur le point d'être imprimé" que je peux attraper de JavaScript pour au moins avertir l'utilisateur?


Mise à jour: Il est encore plus étrange qu'il n'y paraît. L'image combinée (toile recouvrant un img) imprime correctement sur mon laserjet Brother mais pas sur mon jet d'encre hp). Donc, la situation actuelle est que la plupart des navigateurs impriment correctement à mon jet d'encre, mais pas Chrome. Opera vissés sur les deux imprimantes.

Est-ce que tout cela est dû aux pilotes d'imprimante et à la façon dont les différents navigateurs communiquent avec eux?


Mise à jour: je remarque que Google Documents génère un fichier PDF pour impression.

+1

http://www.twiddla.com/test/ChromeCanvas.html page de test, peut-être aider à comprendre le problème !? – powtac

+0

@powtac ... Vous avez rendu le problème plus intéressant. Dans Chrome, cette page que vous avez liée pour imprimer correctement sur mon laserjet n & b, mais la boîte rouge sur la gauche ne s'imprime pas sur mon inkject couleur (mais les deux figures rouges sur la droite - qui sont des bitmaps - font). – Nosredna

+0

Voir "mise à jour" ci-dessus. – Nosredna

Répondre

0

Je suggère d'enregistrer la page au format PDF et essayer d'imprimer. Un document PDF à imprimer doit être WYSIWYG. Si le rendu du PDF est correct, toute imprimante doit l'imprimer correctement.

+0

Alors, comment enregistrer une page en PDF? Puis-je faire cela par programme? – Nosredna

+0

Désolé si je suppose que vous avez un mac. Chaque fois que vous essayez d'imprimer à partir d'un navigateur dans mac, vous verrez un menu PDF en bas à gauche. Vous pouvez enregistrer en PDF en utilisant l'une des options ici. –

+0

Sur la plupart des distributions Linux comme Ubuntu, vous pouvez également imprimer en PDF. Je pense que Adobe Acrobat Reader sur Windows est également livré avec cette option, mais je ne suis pas sûr. – richard

1

Je me demande, si au lieu de rendre à un élément <canvas>: il peut imprimer correctement si vous deviez rendre à un objet de toile hors document et définir un style CSS sur un <div> d'avoir un background-image ensemble à "url("+myCanvasObject.toDataUrl()+")".

En outre, vous pouvez simplement définir l'attribut src d'un nouvel élément <img /> sur le même myCanvasObject.toDataUrl(). Cela devrait être mieux géré que la méthode que j'ai mentionnée ci-dessus ..

+0

Une idée intéressante. :-) Je parie que IE, au moins, ne mange pas ça, cependant. Peut-être que Chrome et Opera le feraient. – Nosredna

+0

Vous avez probablement raison à propos de IE, pourrait valoir la peine si! – JasonWyatt

+0

J'ai ajouté une autre solution possible, celle-ci pourrait être plus précise/utile. – JasonWyatt

2

Vous pouvez utiliser PHP's PDF functions pour créer des fichiers PDF par programme. C'est vraiment facile!

Pour créer un nouveau PDF:

$pdf = pdf_new(); 

Ouvrez le fichier:

pdf_open_file($pdf, "pdfName.pdf"); 

Vous pouvez définir des variables telles que l'auteur:

pdf_set_info($pdf, "Title", "pdf Title here"); 

vous aurez maintenant besoin pour utiliser la fonction pdf_begin_page():

pdf_begin_page($pdf, 595, 842); 

ce sont les dimensions pour A4.

contenu

et fermez le fichier avec:

pdf_end_page($pdf); 
pdf_close($pdf); 

Pour une référence complète, jetez un oeil à PHP's PDF manual.

+2

C'est cool. En supposant que je reçois toutes les informations sur le serveur, bien sûr, y compris un historique de toutes les opérations de canevas (que je devrais imiter en quelque sorte sur le serveur). – Nosredna