Impression PDF [C#] - C#/.NET managed - Programmation
Marsh Posté le 10-02-2016 à 11:38:14
Pas très clair pour moi désolé.
Tu veux générer un nouveau fichier .PDF à partir d'un *quelque chose* ? Si oui de quoi ?
Tu veux imprimer un PDF existant ?
C'est quoi Revit, comment ton code s'y intègre ?
C'est quoi "Adobe PDF", une imprimante listée parmi celles de la machine ? Si oui il y a en C# des objets pour déclencher une impression : PrintDocument, PrintDialog et cie.
Je suppose que tu dois pouvoir par programmation chercher et préselectionner une imprimante par son nom et donner quelques consignes sur ce qui doit être généré, c'est peut être ta solution.
Marsh Posté le 10-02-2016 à 12:37:31
Oui je me doutais un peu que j'étais pas des plus claire désolé
Tu veux générer un nouveau fichier .PDF à partir d'un *quelque chose* ? Si oui de quoi ?
Je veux générer un PDF a partir d'une feuille d'un projet Revit. Revit est un logiciel de BIM (Building Information Modeling) destiné aux architectes et servant à modéliser des bâtiments en trois dimensions. Les feuilles sont comme des découpe, calques ou vue et peuvent être "exporter" en PDF en lançant une impression de cette dernière et en sélectionnant l'imprimante qui s'appelle Adobe PDF.
Tu veux imprimer un PDF existant ?
Non je veux générer le PDF.
C'est quoi Revit, comment ton code s'y intègre ?
Revit permet l'ajout d'Addin (dll). Je créer donc sous Visual Studio un projet de bibliothèque de classe.
C'est quoi "Adobe PDF", une imprimante listée parmi celles de la machine ?
Oui l'imprimante Adobe PDF apparaît dans la liste parmi les autres imprimantes car Adobe Acrobate est installé sur la machine.
Si oui il y a en C# des objets pour déclencher une impression : PrintDocument, PrintDialog et cie. Je suppose que tu dois pouvoir par programmation chercher et présélectionner une imprimante par son nom et donner quelques consignes sur ce qui doit être généré, c'est peut être ta solution.
Oui j'ai vu cela, c'est d’ailleurs la piste que je creuse. Mais je ne parviens pas a créer de format personnalisé.
Merci de ta réponse et de ton aide
Marsh Posté le 10-02-2016 à 14:14:57
Ok merci, c'est beaucoup plus clair avec ces précisions. Tu me confirmes que j'avais bien compris l'objet de ta demande et tu combles les quelques manques.
Donc on peut passer à la partie implémentation maintenant la question clairement définie.
Afin de poursuivre :
Qu'est ce qui te pose souci, l'exploitation des données sur le document fournie par les API du modèle d'addIn de Revit, ou bien l'implémentation en C# de l'impression ?
Dans le premier cas je doute que tu trouves facilement quelqu'un d'autre qui connaisse ce logiciel et son système d'extensibilité, mais dans le deuxième cas on devrait pouvoir t'aider...
Qu'as tu déjà déjà fait ?
Note que je ne suis pas un spécialiste de l'impression en .Net donc je ne pourrai que te donner des généralités comme ci-dessus !
Marsh Posté le 10-02-2016 à 17:17:01
TotalRecall a écrit : [...] |
Plus l'implémentation en C# de l'impression.
Avec PrintDocument, PrintSetting j'ai déjà réussi a :
J'ai tenté de créer un nouveau format de papier, mais je ne la retrouve pas par la suite dans les options de l'imprimante. Ce qui me porte à croire que le nouveau format de papier n'existe qu'avec l'objet et qu'il faut ensuite l'appliquer au moment d'imprimer.
Code :
|
Mon problème est vraiment de parvenir a créer un format de papier personnalisé pour ensuite le retrouver dans les paramètres d'impression généraux.
Je ne peut pas interagir directement avec les paramètres d'impression de l'imprimante Adobe PDF mais Revit permet sélectionner des paramètres d'impression dont la taille de papier mais il faut que je parvienne à la créer au préalable.
Pour être un peut plus claire je vais expliquer la manip' manuelle que j'essaie de rendre automatique via mon code.
Dans Revit une fois sur la feuille du projet que l'on souhaite imprimer en PDF. On lance l'impression comme dans n'importe quel logiciel. La première fenêtre de gauche apparaît, on sélectionne notre imprimante, ici Adobe PDF.
Puis on clic sur "propriétés" qui nous donne les propriétés propre a l'imprimante, ici la fenêtre de droite pour Adobe PDF. Habituellement on clic sur ajouter un format papier, on rentre nos dimensions et c'est partis.
d'après mes recherche il semblerai que l'on ne puisse pas interagir avec le code sur cette fenêtre.
Pour contourner le problème je cherche à entrer le format dans la fenêtre de droite ci-dessous. Je peut interagir dans le code puisque ce sont les paramètres d'impression de Revit.
Mais comme on peut le voir la création de format personnalisé n'est pas possible, il faut donc qu'il y soit avant.
Voilà encore merci de ton aide.
Marsh Posté le 11-02-2016 à 09:52:39
Ah ouais
Là comme ça je ne sais pas
J'ai très peu fait joujou avec l'impression et c'est déjà assez pointu.
N'hésite pas à poster un lien vers ton topic dans le topic en lien ( ) dans ma signature, pour amener du monde ici...
Marsh Posté le 11-02-2016 à 10:43:47
C'est sur que la on dépasse un peu la simple impression.
Merci du conseil je vais faire un p'tit message dans ton topic voir si une âme perdu a une idée.
Sinon de mon coté, je suis parti vers une nouvelle piste en essayant "d'attaquer" par le code le serveur d'impression
J'ai déjà réussi a récupérée les infos des onglet ports et pilotes, je peu donc sélectionner l'imprimante que je souhaite.
Dans l'onglet formulaire on peu créer un nouveau format de papier (Géniale c'est ce qu'il me faut) mais je ne parviens pas à atteindre cette partie
Marsh Posté le 11-02-2016 à 11:31:57
Petite question :
tu as déjà créé ta "PaperSize", maintenant si tu as une instance de PrintDocument, est-ce que tu as essayé quelque chose comme ça (très simplifié) ?
Code :
|
T'as peut-être déjà regardé cette page de la msdn ?
C'est pas tout à fait ce que tu demandes, mais il y a pas mal d'infos qui devraient te servir...
Edith
me dit que tu pourrais aussi regarder par là ou là
Marsh Posté le 11-02-2016 à 15:27:00
Bonjour Deliriumtremens
Merci pour ton coup de main.
En effet j'avais déjà exploré la piste du PaperSize et de PrintDocument.
Le problème est que pour l'impression PrintDocument ne prend qu'un chemin de fichier ou un flux (Stream) en entrée.
Or je lance l'impression depuis Revit et une feuille du projet qui n'est n'y un objet n'y un flux.
J'utilise donc des fonctions propre à Revit pour le lancement de l'impression.
Ces dernières prenant des éléments Revit en entrée, mais ces fonctions d'impression ne permette que la sélection d'un format de papier pas d'en créer un à la volé.
D'où mon désir de créer un format de papier "en avance" pour que je puisse le sélectionner par la suite.
J'ai finalement trouvé la solution à mon problème ce midi grâce à ces liens (en autre) ici et ici
Encore merci pour votre aide.
Voici le code si jamais une âme perdu est bloquée par le même problème :
Code :
|
Marsh Posté le 11-02-2016 à 15:30:59
Oh ce beau bordel à base d'APIs Windows et de tests cracra
Reste à voir si ça fonctionne aussi bien sur les postes clients avec des OS verrouillés et des comptes sans privilèges
Marsh Posté le 11-02-2016 à 15:40:46
Pour l'instant ça fonctionne, casse pas tous mes espoirs juste 2h après
Par contre, je suis ouvert à toutes propositions d'optimisation !
Si tu as des idées je prend
Marsh Posté le 11-02-2016 à 15:42:27
ReplyMarsh Posté le 11-02-2016 à 15:44:00
Ah si quand même, j'ai envie de dire qu'utiliser un StringBuilder pour écrire une seule ligne c'est un peu dommage
Mais ça ne fait pas avancer le reste
Marsh Posté le 11-02-2016 à 15:53:38
TotalRecall a écrit : Ah non du tout, moi mon truc c'est la critique stérile |
C'est constructif du coup
TotalRecall a écrit : Ah si quand même, j'ai envie de dire qu'utiliser un StringBuilder pour écrire une seule ligne c'est un peu dommage |
Le StringBuilder vient du code que j'ai repris sur le premier lien.
Il va dégager vite fait, j'ai une classe log dans mon projet final.
En plus c'est un la première fois que je vois ça, habituellement j'utilise plus des MessageBox pour mes test perso.
Marsh Posté le 10-02-2016 à 09:48:40
Bonjour les amis,
Je cherche, via un code C#, à lancer l’impression d’un PDF via l’imprimante « Adobe PDF » tout en la paramétrant notamment avec un format de papier personnalisé.
Ceci dans le but d’automatiser la génération de PDF dans le logiciel Revit.
Je cherche depuis un moment des solutions pour :
J’ai regardé aussi du côté des librairies C# pour générer mon PDF directement depuis le code sans passé par l’imprimante Adobe PDF mais je n’ai rien trouvé.
Si je suis pas assez clair hésitez pas a me le dire
---------------
≡ Diablo III ≡ Steam ≡ DotaBuff ≡ Figurines ≡ Ach & Vds