OPENTWAIN.NET

FREMYCOMPANY Messages postés 276 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 22 décembre 2008 - 18 mai 2008 à 21:25
PUJOLAIS44 Messages postés 7 Date d'inscription lundi 28 septembre 2009 Statut Membre Dernière intervention 7 février 2012 - 7 févr. 2012 à 16:55
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/46699-opentwain-net

PUJOLAIS44 Messages postés 7 Date d'inscription lundi 28 septembre 2009 Statut Membre Dernière intervention 7 février 2012
7 févr. 2012 à 16:55
Merci de l'info.
Mais je crois que pour des raisons de cadence de production ça risque d'etre trop long...
A suivre quand même !...
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
7 févr. 2012 à 16:42
Je suis étonné que ce code fonctionne en Access mais si c'est bien le cas il devrait arrivé à faire du PDF aussi bien que du BMP ou du JPG.

Sinon, il est possible de convertir le BMP en JPG puis de créer un PDF à partir du JPG. Voir les sources suivantes :
VB6 : http://www.vbfrance.com/codes/WSPDF-CLASSE-GENE RATION-FICHIER-PDF-SANS-OCX-NI_25958.aspx
VB.Net : http://www.vbfrance.com/codes/OPENPDF-NET_46727.aspx
kayser77 Messages postés 8 Date d'inscription lundi 28 juin 2004 Statut Membre Dernière intervention 7 février 2012
7 févr. 2012 à 16:33
je travaille en vb.net
Le code est déjà fournit sur cette page !!
PUJOLAIS44 Messages postés 7 Date d'inscription lundi 28 septembre 2009 Statut Membre Dernière intervention 7 février 2012
7 févr. 2012 à 16:30
Et tu travailles en quoi ? VB ? VBA ?
Tu peux m'envoyer du code là dessus ?.....
(gregoire.pujolais@free.fr)

Grand merci ! depuis le temps que je cherche ..
kayser77 Messages postés 8 Date d'inscription lundi 28 juin 2004 Statut Membre Dernière intervention 7 février 2012
7 févr. 2012 à 16:14
Salut PUJOLAIS44,

Oui le code fonctionne en pdf... d'ailleurs je viens de me rendre compte qu'avec ce format, il me crée des documents multipage...

Quand tu fais "enregistrer sous", est ce que tu choisis bien le type "pdf" dans la fenetre proposée ?
PUJOLAIS44 Messages postés 7 Date d'inscription lundi 28 septembre 2009 Statut Membre Dernière intervention 7 février 2012
7 févr. 2012 à 16:03
Hi,

Ton code fonctionne en PDF ?
kayser77 Messages postés 8 Date d'inscription lundi 28 juin 2004 Statut Membre Dernière intervention 7 février 2012
7 févr. 2012 à 15:54
Bonjour,

Je voudrais modifier le code pour créer un fichier tiff (ou pdf) multipage. C'est à dire que le scanner numérise toutes les feuilles à la volé mais au lieu de creer un fichier par image scannée, je voudrais qu'il ne crée qu'un seul fichier mais avec plusieurs pages.

J'ai regardé du coté de gdi+ mais c'est pas facile pour un débutant... Quelqu'un aurait il déjà une solution ?
PUJOLAIS44 Messages postés 7 Date d'inscription lundi 28 septembre 2009 Statut Membre Dernière intervention 7 février 2012
6 févr. 2012 à 18:52
Au secours !!!!..............
PUJOLAIS44 Messages postés 7 Date d'inscription lundi 28 septembre 2009 Statut Membre Dernière intervention 7 février 2012
3 févr. 2012 à 11:40
En français ..... je corrige mon dernier message....

Bonjour,
je cherche une solution pour scanner en format PDF dans un module MS Access
J'ai essayé ta solution dans un module.
Ca a l'air de fonctionner mais uniquement en format BMP.

As-tu trouvé une solution pour scanner en PDF ?

UN GRAND GRAND merci

Greg
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
3 févr. 2012 à 11:23
Il s'agit d'un code VB.Net qui peut donc fonctionner en VBA. Je ne sais pas s'il existe un code similaire VBA.

This source code is for VB.Net and cannot run on VBA. I don't know if you can find a similar source code for VBA.
PUJOLAIS44 Messages postés 7 Date d'inscription lundi 28 septembre 2009 Statut Membre Dernière intervention 7 février 2012
3 févr. 2012 à 11:06
Hello !

I'm looking for a solution to scan automatically documents in PDF format in an MS Access application
I've tried toi test your module in a VBA form.

1- I'd copied the code you developped
2- I'd write the test function below
Sub Test_Twain()
Dim lRtn As Long
lRtn = mdlTwain.TransferWithoutUI(300, BW, 1, 1, 2, 5, "noui_mono.bmp")
End Sub

but it is not working because an error in mdlTwain, var not definied.

Do you have the code you developped in VBA format ?
What do you think of this error ?

Sorry for my prog level .....
Thanks a lot !!!
PUJOLAIS44 Messages postés 7 Date d'inscription lundi 28 septembre 2009 Statut Membre Dernière intervention 7 février 2012
3 févr. 2012 à 10:41
Bonjour
Existe-t'il une version fonctionnant en VBA Access par exemple ?
Grand merci
Greg
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
23 mars 2011 à 11:13
OK merci
bobertin89 Messages postés 38 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 2 septembre 2011
23 mars 2011 à 10:59
Les 40Mo sont plus que convenables...
C'était juste pour t'indiquer la solution que j'avais adoptée...
++
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
23 mars 2011 à 10:12
Je pense que les 40Mo correspondent au driver du scanner.
Ils ne seront libérés qu'à la fermeture du programme.
bobertin89 Messages postés 38 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 2 septembre 2011
23 mars 2011 à 10:04
Salut bouv,
en fait, j'appelle SaveFile dans TransferPictures. Cela enregistre les pages à la volée au lieu de passer par le tableau.
Du coup, je peux libérer la mémoire à chaque page et je reste constamment à 40Mo occupé quelque soit le nombre de page scanné.
++
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
22 mars 2011 à 17:37
Il ne faut appele GlobalFree qu'après avoir enregistrer le PDF.
Le reste de la mémoire se libère normalement après avoir fermé l'appli.
bobertin89 Messages postés 38 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 2 septembre 2011
22 mars 2011 à 13:41
Salut à tous,
à nouveau un petit souci...
PPmax a réussi à libérer la mémoire au fur et à mesure du scan grâce à la Méthode GlobalFree.
Si j'utilise cette méthode à la fin du TransferPictures, il libère la mémoire mais n'a plus les infos pour enregistrer.
Si je l'utilise après l'aafichage de l'image, il ne libère pas complétement la mémoire...
Si quelqu'un sait ou libérer la mémoire...
Merci d'avance.
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
18 mars 2011 à 17:44
Merci du retour je me rencadre et je modifierai éventuellement la source
++
bobertin89 Messages postés 38 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 2 septembre 2011
18 mars 2011 à 17:39
Hey,
enfin la soluce, il faut remplacer la ligne
Dim cap As TwCapability = New TwCapability(TwCap.XferCount, 1)
par
Dim cap As TwCapability = New TwCapability(TwCap.XferCount, -1)
voili voilou, si cela peut aider d'autres personnes!
Encore merci pour ton aide
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
18 mars 2011 à 17:35
Autre piste il est possible que TransferReady soit appelé à chaque scan.
Dans ce cas il faut récupérer les images à chaque appel sans fermer le Handle.
++
bobertin89 Messages postés 38 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 2 septembre 2011
18 mars 2011 à 17:30
Encore merci du coup de main...
J'avais déjà tenté cette soluce mais sans succès...
Je vais essayer tout ça ce W-E ou lundi.
Je te tiens au courant si je trouve.
Bon w e.
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
18 mars 2011 à 16:09
Sur les scanners que j'ai testé le message transferReady n'est envoyé que lorsque tous les scans sont terminés.
Dans ton cas essai de déplacer le code qui se trouve dans TransferReady vers CloseRequest ou CloseOk
bobertin89 Messages postés 38 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 2 septembre 2011
18 mars 2011 à 16:00
Cela semble être le cas.
En fait, il rentre dans le case TransferReady dès que le scanner est prêt à scanner, avant même d'avaler la première page.
Ensuite, il scanne toute les pages mais le scanner ne renvoi pas d'autre fois transferReady mais passe direct Transfer.Close.

Vu comment ton code est fait, j'ai l'impression qu'on devrait rentré dans TransferReady à la fin du scan et non quand le scanner est prêt.

Ce que je ne comprends pas non plus(peut-être n'est-ce pas lié), c'est la boucle dans TransferPictures avec loop while pxfr.count<>0 alors que pxfr.count est défini à 0 et que rien ne semble modifié sa valeur.

Si tu as des pistes...
Encore merci de ton aide.
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
18 mars 2011 à 15:47
Une piste :

Ton scanner envoi peut-être les scan au fur et à mesure. Ce qui déclenche le message TwainCommand.TransferReady trop tôt (procédure PreFilterMessage)

Essaie de mettre un point d'arrêt sur ce message et saute les lignes qui suivent manuellement au premier scan pour voir s'il est appelé à nouveau lors des scans suivants.
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
18 mars 2011 à 15:09
Etrange, ton scanner doit renvoyer un message de fin de scan.
J'avoue ne jamais avoir rencontré le problème, ni avec HP ni avec Epson. Mais je n'ai jamais essayé avec Canon.
Ton pilote est-il à jour ?
Les scanenr Canon ont peut-être une particularité que j'ignore. Dans ce cas il me sera difficile de t'aider étant donné que je n'en possède pas.
bobertin89 Messages postés 38 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 2 septembre 2011
18 mars 2011 à 14:58
J'ai donc mis un msgBox(MyPics.Count.Tostring) après la boucle for qui suit Dim MyPics As ArrayList = TW.TransferPictures().
Cela me renvoi 1 même si je scanne plusieurs page...
Du coup il ne fais qu'un tour et ne m'affiche que la premier image.
J'ai testé avec un autre scanner canon DR-3060 en obtenant le même résultat.
Ce qui est étonnant, c'est qu'il m'affiche ma MsgBox juste après avoir scanné la 1ere image et non à la fin du scan de la dernière.
Encore merci de ton aide.
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
18 mars 2011 à 14:11
Etrange...
Cela fonctionne très bien chez moi avec une imprimante multifonction à chargeur (Epson PX800FW).

Regarde la procédure PreFilterMessage. Mets un point d'arrêt sur la ligne Dim MyPics As ArrayList = TW.TransferPictures()
MyPics doit contenir autant d'image qu'il y a de pages scannées. Peux se vérifier avec la propriété MyPics.Count
bobertin89 Messages postés 38 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 2 septembre 2011
18 mars 2011 à 12:33
Merci de ta réponse rapide.
Je dois faire une mauvaise manip.
Scanner utilisé : canon DR-4010C.
Même lorsque je me mets en "numérisation anticipé", il me scanne une seule page et me remet l'option une seule page.
Peut-être y a t-il une subtilité que je ne comprends pas.
Si tu as une piste...
Merci d'avance.
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
18 mars 2011 à 11:40
Cette source permet de la faire
bobertin89 Messages postés 38 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 2 septembre 2011
18 mars 2011 à 11:35
Salut à tous,
désolé de réveiller un vieux sujet mais je cherche une solution pour scanner à la volée plusieurs page en utilisant un scanner avec chargeur.
Apperement PPMax a trouvé une solution.
Si quelqu'un peut nous la faire partager, ce srait top.
Merci d'avance pour vos réponse.
Bon dev
bdl20042000 Messages postés 63 Date d'inscription mercredi 18 août 2004 Statut Membre Dernière intervention 19 mai 2009
27 oct. 2008 à 11:11
Bonjour,
c'est un scanner : je voudrai que l'utilisateur n'ai pas la fenêtre justement (ça j'ai trouvé), par contre je n'ai pas réussi à mettre une résolution par défaut via le code.
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
26 oct. 2008 à 11:12
PROG_CHRISTIANO>>Le problème semble venir de la résolution utilisée par le périphérique. Elle doit être retournée à l'appli dans 'BMI.biXPelsPerMeter'. Peut-être ton appareil photo ne retourne-t-il pas cette valeur. Dans ce cas biXPelsPerMeter = 0 et on a plus loin une division par 0.
Par contre si le problème est rencontré avec un vrai scanner, là je vois pas.
Si tu arrives à localiser plus précisement le problème en mode pas-à-pas, je pourrais peut-être modifier le code.

BDL20042000>>Le code ouvre l'interface habituelle de ton scanner. C'est là que tu peux choisir ta résolution.

Bonne prog
++
bdl20042000 Messages postés 63 Date d'inscription mercredi 18 août 2004 Statut Membre Dernière intervention 19 mai 2009
21 oct. 2008 à 17:23
Bonjour,
bravo pour la source.
petite question :
est ce qu'il est possible de modifier la résolution pour la numérisation ?
si oui, quel est le code.
merci
prog_christiano Messages postés 8 Date d'inscription mardi 5 juin 2007 Statut Membre Dernière intervention 30 janvier 2009
15 oct. 2008 à 15:31
Non, il s'agit d'images obtenu à partir d'un appareil photo. De plus j'ai un collegue qui a le meme probleme en scannant à partir d'un vrai scanner.

Merci.
Christian
prog_christiano Messages postés 8 Date d'inscription mardi 5 juin 2007 Statut Membre Dernière intervention 30 janvier 2009
9 oct. 2008 à 14:29
Salut Bouv, merci de ton retour très rapide !
Comme mon scanner ne fonctionne pas, je fais des test à partir d'image obtenu de ma caméra canon...
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
9 oct. 2008 à 08:16
Non ce n'est pas normal du tout.
dReso est calculé d'après le BitmapHeader de chaque images scannées.
"Dim dReso As Double = ChildForm.BMI.biXPelsPerMeter / 39.37"

L'image que vous tentez de convertir provient-elle bien d'un scan ? ou faites-vous des essais avec des fichiers images ouverts depuis votre PC ?
prog_christiano Messages postés 8 Date d'inscription mardi 5 juin 2007 Statut Membre Dernière intervention 30 janvier 2009
9 oct. 2008 à 04:40
*** J'ai oublié de spécifié dans la fonction "SavePdf" ***
Est-ce normal que dans cette fonction du module TWAIN, cette ligne tombre en erreur. Division par zéro.

Dim dWidth As Integer = ChildForm.BMI.biWidth * 72 / dReso

la variable dReso est à zéro.

Merci de votre aide.
Christian
prog_christiano Messages postés 8 Date d'inscription mardi 5 juin 2007 Statut Membre Dernière intervention 30 janvier 2009
9 oct. 2008 à 04:39
Est-ce normal que dans cette fonction du module TWAIN, cette ligne tombre en erreur. Division par zéro.

Dim dWidth As Integer = ChildForm.BMI.biWidth * 72 / dReso

la variable dReso est à zéro.

Merci de votre aide.
Christian
ppmax Messages postés 312 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 17 juillet 2008
17 juil. 2008 à 17:07
En fait je viens de trouver, il existe la méthode GlobalFree( IntPtr handle )
Ca permet de supprimer l'espace mémoire occupé :=)
Hop, je passe de 850mo à 85 mo, la fête !
ppmax Messages postés 312 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 17 juillet 2008
17 juil. 2008 à 16:56
J'ai une petite question, je me suis grandement inspiré de l'application de codeproject pour faire un logiciel de scan, mais je rencontre un petit probleme : si je scan disons 70 pages, mon appli prends aux alentours de 800mo de RAM, ça fait un peu beaucoup :=)

Des idées comment récupérer de la mémoire après l'enregistrement du fichier sur le disque dur ?
filou26 Messages postés 37 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 16 juin 2008
16 juin 2008 à 09:28
merci BOUV,
c'est impecc ,j'ai pu faire fonctionner mon code,
tu m'as apporté ce qui me manquait
ta source est purement super , sobre , claire ,efficace
du haut niveau
merci encore et bonne continuation
filou26
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
6 juin 2008 à 13:32
MAJ effectuée avec 2 ou 3 changements.

- L'image s'affiche désormais à l'aide d'une PictureBox. (j'espere que cela résoud le problème de Filou26)

- Possibilité de choisir le mode d'affichage (Centré, Zoom, Etiré, Normal)

- Possibilité de sauvegarder en PDF.
Si vous choisissez un format image : seule l'image en cours sera enregistrée
Si vous choisissez le format PDF : toutes les images seront ajouter (une par page) dans un seul fichier PDF.

Bonne prog
++
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
28 mai 2008 à 09:25
Salut,
Je ne vois pas d'où cela peut venir.

Cependant, je suis en train de préparer une MAJ.
Actuellement l'image est dessinée directement sur le fond de la fenêtre frmTwainPicture.
J'ai ajouté une PictureBox afin que l'image y soit dessinée. Cela va peut être résoudre ton problème.

J'attend un peu pour poster cette MAJ car je travail également sur l'enregistrement des images en PDF et je ne peux pas poster en l'état.

Mais je te rassure cela devrait arriver bientôt. Ma class PDF est maintenant prête. cf :
http://www.vbfrance.com/codes/OPENPDF-NET_46727.aspx
filou26 Messages postés 37 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 16 juin 2008
28 mai 2008 à 08:10
bonjour bouv
merci pour ton travail
j'attends ça depuis longtemps
en vb6 je fais tourner twain32 sans difficultés
en vb2005express j'ai essayé divers codes trouvés ici et là
rien ne fonctionne
j'arrive à utiliser le tien mais je n'ai pas d'image
seule la dimension de l'image ou partie d'image scannée apparaît mais l'image est blanche-vide.
aurais tu une idée.
encore merci
FREMYCOMPANY Messages postés 276 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 22 décembre 2008
18 mai 2008 à 21:25
Merci pour l'info.
Je vais peut-?tre l'utiliser pour l'ajouter ? Paint.NET un de ses jours !
Rejoignez-nous