begin process at 2012 02 16 00:21:05
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > OPENPDF.NET

OPENPDF.NET


 Information sur la source

Note :
9,44 / 10 - par 9 personnes
9,44 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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é :11 061 / 1 318

Auteur : bouv

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (37)
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-GENE RATION-FICHIER-PDF-SANS-OCX-NI_25958.aspx

 Fichier Zip

Les Membres Club peuvent 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

 Sources du même auteur

Source avec Zip Source .NET (Dotnet) ADO.NET SANS DOULEUR
Source avec Zip Source avec une capture Source .NET (Dotnet) OCR (UTILISATION DE TESSNET2.DLL)
Source avec Zip Source avec une capture Source .NET (Dotnet) LISTVIEWEX
Source avec Zip Source avec une capture Source .NET (Dotnet) SPAM ANTI SPAM
Source avec Zip Source .NET (Dotnet) UTILISER ADO.NET COMME EN ADO (RECORDSET)

 Sources de la même categorie

Source avec Zip TEXTBOX EN NUMÉRIQUE par 320C
Source avec Zip DÉCIMAL TO HEXDECIMAL par loulou27200
SOUS-TITRES : INCRÉMENTATION DE TOUTES LES CHAÎNES DE CARACT... par ALMIRA
Source avec Zip Source avec une capture EVALUER UN NOMBRE D'OBJETS AVEC UNE BALANCE ET DEUX ÉCHANTIL... par lexsty
Source avec Zip Source avec une capture PETIT LOGICIEL DE DEVIS SANS BD par lololilizozo

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture LECTURE DES INFORMATIONS DES DISQUES COMPOSANT UN ENSEMBLE R... par jack
PARSE PDF AVEC ITEXTSHARP (RÉCUPÉRATION DU TEXTE, PAS OCR) par Norres
Source avec Zip Source avec une capture AFFICHER UN TEXTE RTF SIMPLE SANS UTILISER RICHTX32.OCX par jmc70
Source .NET (Dotnet) STACKI - PILE par iLgend
Source avec une capture AJOUT D'UN CONTRÔLE CALENDRIER EN DYNAMIQUE SUR UNE FORM, D'... par patrick

Commentaires et avis

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

du bon boulot, bien joue mister

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 ?

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

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

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 ?

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

un stream, oui, ca sait faire

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+

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

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.

Commentaire de speyrard le 02/09/2008 15:28:37 9/10

Trés bonne source et trés utile

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

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

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,

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

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

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

Commentaire de Sparknet le 24/12/2008 12:44:05

Salut à vous,

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

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)

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

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 :)

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

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 !

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

....

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 !

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.

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 :)

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é?

Commentaire de yjulien88 le 25/06/2009 10:43:23 10/10

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

Commentaire de bidouille007 le 16/08/2009 23:56:25 9/10

Intéressant comme source mais ce que je recherche c'est le moyen d'afficher du PDF dans un logiciel fait en VB NET sans utiliser ADOBE ou tout autre viewer.

Je me demande si cela existe ? un lien me ferait très plaisir

Commentaire de Tenerezu le 22/08/2010 09:21:36

Bonjour,

Je viens de télécharger cette source et sur VB 2010 express, le LoadResString ne passe pas non plus. Par contre la solution de Sparknet fonctionne très bien. A retenir.

Très bon boulot,

@+

Commentaire de guilleto le 24/08/2010 15:10:56

Bonjour à toutes et tous,

Je viens de trouver cette source qui fonctionne très bien avec l'exemple fourni.

Cependant, dès que j'essaie d'intégrer cet élément à mon programme, plus rien ne fonctionne, j'ai une erreur sur cette ligne :
Dim sFont As String = My.Resources.LoadResString(ArrFontAFM(ID).ID)
et de même si je la remplace par celle-ci :
Dim sFont As String = My.Resources.ResourceManager.GetString(ArrFontAFM(ID).ID)

La variable sFont retourne Nothing !!!

Pourquoi n'ai-je pas la même chose que sous le programme exemple ?

Par avance merci

Olivier

Commentaire de bouv le 24/08/2010 23:25:23

Il faut également copier les resources fournies dans le nouveau projet.

Cdt

Commentaire de guilleto le 25/08/2010 09:09:00

Merci,
C'était ça !

Commentaire de hajarette le 02/09/2010 13:35:58 8/10

merciiiiiiiiiiiiiiiiiiiii bouv

Commentaire de sackounet le 16/10/2010 19:31:24 10/10

Excellent travail !!! Merci à Neo et à toi.

Commentaire de drof le 30/08/2011 15:04:41 10/10

Superbe source! La plus simple à mettre en place que j'ai trouvée à l'heure actuelle...
Un grand merci à bouv.

Commentaire de KingFreeman le 11/10/2011 16:19:17

Merci bouv pour vette excellente source... J'aimerais savoir par contre s'il serait possible de se positionner sur la première page du document pdf lorsque ce doc comporte plusieurs pages. Par défaut et c'est un peu génant à l'utilisation, lorsque tu crées un doc de plusieurs pages et que tu l'ouvres après download tu arrives toujours sur la dernière page générée, la première serait plus pratique...  Merci pour vos réponses si réponses il y aura vu que le source a été posté il y a 3 ans déjà ;-)).

Commentaire de bouv le 11/10/2011 17:10:52

KingFreeman >> 3 ans déjà... Le temps passe vite.
J'ai effectivement observé que les fichiers créés s'ouvrent sur la dernière page mais j'avoue ne jamais avoir cherché pourquoi. De plus je n'ai pas ouvert mon VB depuis au moins 1 an. Ce n'est pas mon métier et je n'ai plus beaucoup de temps. Je ne saurai donc t'aider. En revanche si tu trouves une solution exploitable, je suis preneur pour mettre à jour la source.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

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 Erreur CLASSE NON INSCRITE ??? [ par christophe ] Lors du lancement de mon appli une erreur-2147221164 Classe non inscriteapparait.Mon appli interroge une base access 97Puovez vous m'aiderChristopheCh controle pdf [ par ririque ] Quelqu'un sait-il comment l'on peut faire pour copier l'intégralité d'une feuille dans le presse-papier, quelquesoit sont contenu ?-Lorsqu'un controle Sérialiser des classes [ par Phil ] Salut,je n'arrive pas à trouver une solution pour sérialiser et surtout désérialiser une classe ou une collectionLe but recherché est de pouvoir se pa Constructeur dans module de classe [ par antho ] Bonjour,Je voudrais savoir s'il est possible de passer des paramètres à un constructeur dans une classe VB. L'événement Class_initialize ne prend pas ERR 713 / CLASSE NON ENREGISTREE??? [ par ceyquem ] "713 : La classe n'est pas enregistrée. Recherche d'un objet avec CLSID:{00000010-0000-0010-8000-00AA006D2EA4}Une erreur interne est survenue, vous po Générer des PDF dynamiques [ par Cyrille ] Bonjour,Est ce que qqun sait générer des PDF dynamiquement ?J'ai active Report mais j'ai plein de Bug et pas de support techniquerMerciCyrille


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,983 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales