Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

OPENPDF.NET


Information sur la source

Catégorie :Divers Source .NET ( DotNet ) Classé sous : PDF, CLASSE, GENERATION, SANS DLL, SANS OCX Niveau : Débutant Date de création : 23/05/2008 Date de mise à jour : 06/06/2008 13:56:41 Vu / téléchargé: 6 126 / 712

Note :
9,6 / 10 - par 5 personnes
9,60 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (27)
Ajouter un commentaire et/ou une note


Description

Après de longues recherches infructueuses pour trouver une classe de génération de fichier PDF en VB.NET, je me suis rappelé de la source de NeO78 rédigée en VB6.

Je me suis donc lancé dans la conversion de sa classe.

J'ai d'abord essayé l'assistant de conversion fourni avec VB.NET, mais je me suis retrouvé avec un trop grand nombre d'erreur. Je me suis donc lancé dans une traduction ligne à ligne.

J'en ai profité pour apporter quelques améliorations :

  - Suppression de tous les types Variant (Object en .NET).

  - Renommage de certaine variables de façon plus explicite (il en reste en encore pas mal à voir).

  - Regroupement de certaines propriétés (ex : PDFSetZoomMode et PDFGetZoomMode sont devenus PDFZoomMode)

  - Amélioration de la gestion des couleurs. Remplacement de l'Enum PDFColorValue par System.Drawing.Color pour un plus grand choix de couleur disponible. Cela simplifie au passage la récupération des valeurs RGB (merci .NET)

  - Suppression des certaines variables inutilisées.

  - Suppression de l'objet FSO pour la lecture et l'écriture des fichiers et remplacement par FileOpen...

  - Intégration des Fonts AFM en resource. Il n'est plus nécessaire de les distribuer. La lecture se fait directement depuis les resources.

  - Optimisation de la lecture des Fonts.
    Auparavant la fonction PDFGetStringWidth ouvrait systématiquement un objet FSO pour lire le conetnu des polices.
    Désormais, les polices sont lues une fois pour toutes et les informations nécessaires sont mémorisées.

  - Et encore quelques petits détails.

Au final, le code est beaucoup plus rapide, notamment grace a la suppression de FSO et à l'optimisation de la lecture des Fonts.

J'ai laissé le module exemple d'origine (simplement adapté à la modification de la classe).
 

Conclusion

Merci à Neo78 pour sa classe d'origine et qui s'est tapé toute la doc PDF en anglais.

PS : Sa source est disponible à l'adresse suivante :

http://www.vbfrance.com/codes/WSPDF-CLASSE-GENERATION-FICHIER-PDF-SANS-OCX-NI_25958.aspx
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

26 mai 2008 15:25:04 :
Ajout d'image depuis la propriété image
26 mai 2008 15:29:47 :
Erreur zip
06 juin 2008 13:56:42 :
Amélioration de l'ajout d'image

Commentaires et avis

signaler à un administrateur
Commentaire de Renfield le 23/05/2008 11:27:30 administrateur CS

du bon boulot, bien joue mister

signaler à un administrateur
Commentaire de bouv le 23/05/2008 11:35:28

Merci pour le compliment.

Il reste cependant pas mal de choses à optimiser.

J'aimerais notamment implementer l'ajout d'image à partir d'une PictureBox avec consersion en JPG à la volée afin ne pas avoir à créé le fichier JPG sur le HD pour le supprimer ensuite.

Mais je sais pas trop par quel bout le prendre. Une idée ?

signaler à un administrateur
Commentaire de Renfield le 23/05/2008 11:39:20 administrateur CS

pour la conversion ? la classe Graphics gère cela au poil.

signaler à un administrateur
Commentaire de bouv le 23/05/2008 14:50:51

Je trouve pas comment faire sans passer par un fichier :-(

Dois-je passer par un Stream ? Si oui comment ? Dois-je le convertir en JPG avant ou après récupération ?

signaler à un administrateur
Commentaire de Renfield le 23/05/2008 14:57:52 administrateur CS

un stream, oui, ca sait faire

signaler à un administrateur
Commentaire de forchi le 24/05/2008 10:51:38 9/10

Bravo source super intéressante.
Le seul problème que j'ai rencontré et que lorsque je veux ouvrir un fichier pdf existant, il me l'ouvre avec mon logiciel par défaut.
Sinon bien, je t'ai mis un 9/10.
A+

signaler à un administrateur
Commentaire de bouv le 26/05/2008 15:41:20

Code MAJ,

On peut désormais ajouter un PDF depuis la class Image. Je suis passé par un MemoryStream.

'Pour ajouter depuis un fichier
PDFImage "CheminDuFichier.jpg"

'Exemple pour ajouter depuis la class image
PDFImage MaPictureBox.Image

Pour info, cette modification à eu quelques répercussions sur PDFParseJPG notamment.

J'en ai profité pour :

- Renommer les variables de la structure aIMG (in_1, in_2, in3... n'étaient pas très compréhensible)

- Modifier les fonctions PDFImageWidth et PDFimageHeight. A chaque fois que l'une d'elle était appelée, l'image était mémorisée dans un tableau. Désormais on renvoi la valeur souhaitée et on vide les données.

Bonne prog
++

signaler à un administrateur
Commentaire de bouv le 06/06/2008 14:03:07

Nouvelle MAJ concernant l'ajout d'image.
Que ce soit depuis un fichier ou depuis la class Image.

Le code devrait être encore un peu plus rapide, surtout avec les grosses images.

Mon PC est assez puissant, mais je me suis rendu compte que sur les PC plus humbles le temps d'ajout d'une image >= 300PPP pouvait devenir rédhibitoire.

C'est maintenant résolu.

signaler à un administrateur
Commentaire de speyrard le 02/09/2008 15:28:37 9/10

Trés bonne source et trés utile

signaler à un administrateur
Commentaire de edethacom le 24/09/2008 04:48:31

Tres bonne source, je n'aurai pas a lire un livre sur itextsharp pour creer un pdf.

Qui ne trouve pas, n'a pas cherche!!!!!


thanks a lot

signaler à un administrateur
Commentaire de YI013587 le 10/10/2008 12:01:49

Bonjour bouv.

Merci pour ce travail remarquable.

Je voudrais utiliser d'autres polices, par exemple la police Arial. J'ai vu que toutes les polices étaient décrites dans tes "Resources". Comment trouver la "Valeur" à inscrire en regard du nom de la police que j'ajoute ?

Merci d'avance,
Gilbert

signaler à un administrateur
Commentaire de Sparknet le 26/11/2008 02:09:25

Bonjour, BOUV

trés bon travail en effet,

Mais comme YI013587, J aurais aimé savoir comment peut-on ajouter de nouvelle police.

Merci,

signaler à un administrateur
Commentaire de bouv le 26/11/2008 08:18:14

Salut,
Désolé pour YI013587, j'ai zapper sa question, je réponds donc à vous deux en même temps.

La police doit être au format AFM (Adobe Font Metrics) ou ATM (Adobe Type Manager). Dans mon exemple seules des polices de type AFM sont fournies.
Pour en ajouter de nouvelles, il faut :
- en trouver sur le net et les télécharger
- les ajouter en ressource
- adapter la partie du code qui y fait appel

Si vous avez des fichiers AFM ou ATM sous la main, je peux éventuellement faire la MAJ du code afin que tout le monde en bénéficie. Dans ce cas envoyez moi un MP pour obtenir mon adresse email.

Bonne prog
++

signaler à un administrateur
Commentaire de aymeric53 le 23/12/2008 17:29:12

Salut,
Trés bon travail !!!

J'ai juste une petite question,
comment puis je utiliser cette source sur visual studio 2005.

La ligne My.Resources.LoadResString(...) ne passe pas.
Comment intégrer les ressources?

Merci d'avance
++

signaler à un administrateur
Commentaire de bouv le 23/12/2008 21:26:13

Salut,
La source a été développée avec VB 2008 Express.
Je ne sais pas si elle fonctionnera en VB 2005.
Tu peux cependant télécharger gratuitement la version VB 2008 Express.

Bonne prog
++

signaler à un administrateur
Commentaire de Sparknet le 24/12/2008 12:44:05

Salut à vous,

aymeric53, essais avec:
My.Resources.ResourceManager.GetString(...)

signaler à un administrateur
Commentaire de FrTeurynome le 12/01/2009 14:06:01 10/10

Une source qui à l'air vraiment au top, correspond exactement à ce dont j'ai besoin mais pauvre de moi, je suis sous VB 2003, du coup j'ai des soucis avec les LoadResString :/

Damned !

Mais en dehors de ça, je colle quand même la notre maximale !

Problèmes sous VB2003 au cas ou une âme charitable passerait dans le coin ;) :

Dim sLines() As String = Split(My.Resources.LoadResString(ArrFontAFM(ID).ID), vbCrLf)
et
sPathConfiguration = My.Application.Info.DirectoryPath
==>  Ok en remplaçant par Application.StartupPath
et
Dim sFont As String = My.Resources.LoadResString(ArrFontAFM(ID).ID)

signaler à un administrateur
Commentaire de bouv le 12/01/2009 14:36:10

Tout d'abord merci.

Sinon, tu n'es pas le seul à avoir des problèmes de compatibilité.
Mais pourquoi ne pas télécharger gratuitement VB2008 Express ?

Bonne prog
++

signaler à un administrateur
Commentaire de FrTeurynome le 12/01/2009 14:43:38

Parce que malheureusement j'ai une version imposée dans le cadre de mon boulot :/

Sinon en effet, s'eût été la solution la plus simple et la plus logique. Mais pourquoi faire simple... comme on dit :)

signaler à un administrateur
Commentaire de poy20 le 15/01/2009 09:11:42 10/10

Superbe source ! Merci à toi et à Néo ! 10/10

Je pense qu'il y a une petite erreur sur l'estimation de la largeur max de cellule lors d'un appel de PDFCell.
Je crois que cela est dû au fait que j'ai choisit le mm comme unité.
Dans ce cas la largeur est sous estimée.

J'essaie de résoudre proprement cela dès que j'ai un peu de temps, mais si qqu'un est dispo, qu'il n'hésite pas !!

signaler à un administrateur
Commentaire de poy20 le 19/01/2009 09:17:44

Pour avoir une estimation correcte de la largeur max, j'ai utilisé ce calcul dans PDFCell():
   Dim WidthMax As Double = (W - 2 * mPDFCellMargin) * 28.6 / PDFFontSize

Par contre lors d'un appel de PDFCell, comment faire pour envoyer un texte avec des retours à la ligne ??
Par exemple PDFCell("test" & vbcrlf & "retest", 5,5,45,4)
vbcrlf -> marche pas
vbnewline -> marche pas
???

Merci !

signaler à un administrateur
Commentaire de poy20 le 19/01/2009 09:39:53

Bon finalement j'ai trouvé, le caractère vbcrlf est en fait sur deux caractères.
Dans PDFCell, j'ai donc modifié :

While i <= lText

            Dim sCar As String = Mid(sText, i, 1)

            Dim RetourLigne As Boolean = False
            Try
                If sCar & Mid(sText, i + 1, 1) = vbCrLf Then
                    RetourLigne = True
                End If
            Catch ex As Exception

            End Try

            If RetourLigne Then 'sCar = vbCrLf Then
                sPDFBorder = bBorder1

                PDFCell2(Mid(sText, j, i - j), Xpos, yPos, tWidth, H)
                yPos = dCurrentY

                bMulti = True

....

signaler à un administrateur
Commentaire de FrTeurynome le 06/02/2009 11:53:07

Du nouveau de mon côté, j'ai enfin réussi à convertir l'ensemble pour VB .net 2003, cela fonctionne presque parfaitement. Il subsiste un problème.
Lorsque je génère le pdf et que je l'ouvre, j'ai droit à un petit message m'annonçant fièrement que le /BBox de la police TimesItalic est érroné. hors j'ai fais un peu le tour des .afm sur le web, et je n'ai décelé aucune différence dans les BBox :/

Des idées ?

again: Très beau boulot cette source !

signaler à un administrateur
Commentaire de bouv le 06/02/2009 12:13:18

Bien joué !
Cela fait longtemps que je ne me suis pas penché sur cette source, mais je me souviens avoir eu le problème.
Il peut notamment survenir si tu a renommer le nom des polices pour les harmoniser.
Sinon je vois pas.

signaler à un administrateur
Commentaire de FrTeurynome le 06/02/2009 14:04:43

Ok, je te remercie pour le tuyau, je vais fouiller un peu, je posterais la solution si je la trouve :)

signaler à un administrateur
Commentaire de Nikkobass le 17/03/2009 10:25:11

Salut,

tout d'abord félicitation pour ta source!
Je rencontre toutefois un ptit problème: j'aurais besoin d'ouvrir une image bmp, et il me semble que le format n'est pas supporté. Le pb, cest que quand je change le format de l'image en jpg grace à "Image.Save(_path, System.Drawing.Imaging.ImageFormat.Jpeg)", sa qualité devient vraiment dégueulasse!
Quelqu'un aurait une idée sur la facon de passer à un format jpg de meilleure qualité?

signaler à un administrateur
Commentaire de yjulien88 le 25/06/2009 10:43:23 10/10

Très bonne source.
Fonctionne parfaitement.
10/10

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

generation automatique de fichiers pdf sous VBA [ par yalka ] COMMENT ON PEUT CREER AUTOMATIQUEMENT UN FICHIER PDF ?COMMENT EXPORTER AUTOMATIQUEMENT PLUSIEURS ETATS EN FORMAT PDF.COMMENT CONCATENER LE CONTENU DE Generation auto / Creation PDF sous Access [ par BUZZ2K ] Bonjour,Après de longue recherches sur le net et sur VBFrance, je me permet de poster afin de peut être enfin trovuer de l'aide.J'ai dévellopé une app Generation / Creation PDF sous Access [ par BUZZ2K ] Bonjour,Après de longue recherches sur le net et sur VBFrance, je me permet de poster afin de peut être enfin trovuer de l'aide.J'ai dévellopé une app Classe perso dans un PropertyGrid [ par Kevin.Ory ] Bonjour,J'ai un petit problème dans l'utilisation d'une PropertyGrid. Lorsque on y affiche une classe (créé nous-même dans le code) ayant comme propri excel et pdf [ par pappyted ] Bonjour je suis débutant en Visual Basic et j'ai un petit soucis.J'ai une feuille excel que je renseigne et je voudrais pouvoir créer un pdf automatiq Class Evenement instancier [ par carvals ] Bonjour,Question surement debile mais bon....J'ai un lecteur connecter a de l'usb.Une dll en csharp pour discuter avecUn prog Vb.NETDans ce prog J'ai utilisation des pdf et visual basic [ par pappyted ] Bonjour tout le monde,comme vous vous en doutez j'ai un problème avec visual basic.Voilà je souhaite ouvrir un pdf avec visual basic et aller écrire d Ouvrir un fichier pdf [ par filotto ] Salut à tousJ'aimerais savoir comment Ouvrir un fichier pdf dans une listview.Merci de votre reponse.Cordialement.Gérard FILOTTO douchette + connexion AS/400 + PDF =Infos DVD ou article [ par angeldu74 ] Bonjour.Je suis débutant en VB.Net. Mais je me suis fixé un petit projet sympa pour commencer qui me servira surement plus tard.En fait je vais me ser sourcecontrol sur un objet créé [ par Finality ] Bonjour,dans une de mes applications, j'ai créé une classe "dossier", hérité de la classe "Picture Box". Aux propriétés de la picture boc, j'en ai raj


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,624 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.