You are on page 1of 8

Stage 2me anne(Conseil gnral du cantal)

On test dans une table de la base de donne si deux utilisateurs clique en mme temps sur le bouton enregistrer afin d'viter de gnr deux fois le mme numro d'arrt pour deux arrts diffrents
Dim lsTime As Date = Now Dim date_diff As Long lsSql4 = "SELECT TXT_VAL FROM SYSTEME WHERE TXT_VAR = 'JETON'" Do lcCmd = New SqlCommand(lsSql4, lnCon) lnRdr4 = lcCmd.ExecuteReader() If Not lnRdr4.Read() Then messageBox("Erreur: La table SYSTEME n'est pas accessible !", Page, "") lnRdr4.Close() : lnRdr4 = Nothing lnCon.Close() Exit Sub End If txtVal = lnRdr4!TXT_VAL.ToString lnRdr4.Close() date_diff = DateDiff(DateInterval.Second, CDate(lsTime), Now) 'On sort de la boucle lorsque le jeton est libre ou si le temps d'execution de 30 sec Loop Until txtVal = "" Or date_diff > 30 Dim lsUser As String 'Permet de rcuprer le nom d'utilisateur en cour lsUser = HttpContext.Current.User.Identity.Name.ToUpper().ToString() lsUser = UCase(Mid(lsUser, InStr(lsUser, "\") + 1)) 'Prise du jeton lcCmd = New SqlCommand("UPDATE SYSTEME SET TXT_VAL='" & lsUser & "' WHERE TXT_VAR = 'JETON'", lnCon) lcCmd.ExecuteNonQuery() 'Enregistrement temporaire du PDF pour criture du numro sur un fichier If flPdf.HasFile Then Try flPdf.SaveAs(Server.MapPath("~/App_Data/uploads/ARRETE.pdf")) Catch ex As Exception messageBox("Une erreur est survenue pendant l'enregistrement du pdf", Page, "") : Exit Sub End Try End If [...] 'Relachement du jeton lcCmd = New SqlCommand("UPDATE SYSTEME SET TXT_VAL='' WHERE TXT_VAR = 'JETON'", lnCon) lcCmd.ExecuteNonQuery() lnCon.Close() physique la boucle dure plus de

ClientScript,

ClientScript,

Procdure de cration de pdf a partir de donne binaire / Fonction permettant de retourner un pdf au format binaire

Public Sub TableauDeByteVersFicher(ByVal CheminFichier As String, ByVal TableauDeByte() As Byte) Dim MonFileStream As New System.IO.FileStream(CheminFichier, System.IO.FileMode.Create) MonFileStream.Write(TableauDeByte, 0, TableauDeByte.Length - 1) MonFileStream.Close() End Sub Public Function FichierVersTableauDeByte(ByVal CheminFichier As String) As Byte() Dim MonFichier As New System.IO.FileInfo(CheminFichier) Dim MonFileStream As System.IO.FileStream = MonFichier.OpenRead() Dim TableauDeBytes(MonFileStream.Length) As Byte ' On charge le fichier dans un tableau de byte MonFileStream.Read(TableauDeBytes, 0, MonFileStream.Length) ' On ferme le stream MonFileStream.Close() Return TableauDeBytes End Function

Visualisation du pdf a partir du champs VARBINARY(max) enregistr dans la base de donn et contenant le pdf au format binaire (prsent dans Visionneuse.aspx du projet)
' affichage partir de donne binaire Err.Number = 0 Dim lsUser As String, lsSql As String, lnRdr As SqlDataReader Dim lnCon As New SqlConnection(), lcCmd As New SqlCommand() lnCon = New SqlConnection(ConfigurationManager.ConnectionStrings("ArretesCS").ConnectionString) lnCon.Open() If Err.Number <> 0 Then CodeCommun.GetMsgbox("La connexion la base de donnes est impossible !", Nothing, Page) lnCon.Close() Exit Sub End If lsSql = "SELECT PDF_ARR FROM ARRETE WHERE IDF_ARR = '" & Request.QueryString("Idf") & "'" lcCmd = New SqlCommand(lsSql, lnCon) lnRdr = lcCmd.ExecuteReader() lnRdr.Read() If lnRdr!PDF_ARR > 0 Then Response.Clear() Response.ClearHeaders() Response.ContentType = "application/pdf" Response.AddHeader("content-disposition", "inline; filename=arrete.pdf") Response.Charset = "UTF-8" Response.BinaryWrite(lnRdr!PDF_ARR) Response.OutputStream.Close() Response.End() End If lnRdr.Close() lnCon.Close()

Fonction permettant d'crire le numro de d'arrt sur le PDF correspondant Protected Function ecritureSurPdf(ByVal outfile As String, ByVal title As String, ByVal pdffile As String, ByVal numArrete As String) As Boolean Dim p As PDFlib_dotnet.PDFlib = Nothing p = New PDFlib() Dim indoc As Integer, pageno As Integer, endpage As Integer, pagePdf, font As Integer Dim reponse As String reponse = "" Try p.set_option("errorpolicy=return") If p.begin_document(outfile, "") = -1 Then Throw New Exception("Error: " & p.get_errmsg()) End If p.set_info("Creator", "Conseil Gnral du Cantal") p.set_info("Title", title) '/* Open the input PDF */ indoc = p.open_pdi_document(pdffile, "") If indoc = -1 Then Throw New Exception("Error: " & p.get_errmsg()) End If endpage = p.pcos_get_number(indoc, "length:pages") '/* Loop over all pages of the input document */ For pageno = 1 To endpage pagePdf = p.open_pdi_page(indoc, pageno, "") If pagePdf = -1 Then Throw New Exception("Error: " & p.get_errmsg()) End If p.begin_page_ext(10, 10, "") p.fit_pdi_page(pagePdf, 0, 0, "adjustpage") font = p.load_font("Helvetica-Bold", "unicode", "") If font = -1 Then Throw New Exception("Error: " & p.get_errmsg()) End If p.fit_textline(numArrete, 530, 820, "fontname=Helvetica encoding=unicode fontsize=12") p.close_pdi_page(pagePdf) p.end_page_ext("") Next p.end_document("") reponse = True Catch e As Exception reponse = False Finally If Not p Is Nothing Then p.Dispose() p = Nothing End If End Try Return reponse End Function

Fonction de gnrations des pages d'arrts du Recueil des Actes Administratifs

Public Function genArreteRAA() As Boolean Dim lsSql As String, lsSql1 As String, lsSql2 As String, lsSql3 As String, lsSql4 As String Dim lnCon As SqlConnection Dim lcCmd As SqlCommand Dim lnRdr As SqlDataReader Dim moisRaa As String Dim MonDataSet As New DataSet Dim fic As Byte() Dim i As Integer = 1 Dim nbPages As Integer = 0 'Ouverture de la base de donnes lnCon = New SqlConnection(ConfigurationManager.ConnectionStrings("ArretesCS").ConnectionString) lnCon.Open() If Err.Number <> 0 Then messageBox("La connexion la base de donnes n'est pas possible !", ClientScript, Page, "") lnCon.Close() End If 'On rcupre le mois d'arrt prcdent lsSql1 = " SELECT TXT_VAL FROM SYSTEME WHERE TXT_VAR = 'MOIS_RAA' " lcCmd = New SqlCommand(lsSql1, lnCon) lnRdr = lcCmd.ExecuteReader If Not lnRdr.Read() Then messageBox("Erreur: La table SYSTEME n'est pas accessible !", ClientScript, Page, "") lnRdr.Close() : lnRdr = Nothing lnCon.Close() Return False Exit Function End If moisRaa = CInt(Strings.Right(lnRdr!TXT_VAL, 2)) If moisRaa < 10 Then moisRaa = 0 & moisRaa + 1 End If lnRdr.Close() 'On rcupre la dernire pagination lsSql3 = " SELECT TXT_VAL FROM SYSTEME WHERE TXT_VAR = 'NUM_PAGES' " lcCmd = New SqlCommand(lsSql3, lnCon) lnRdr = lcCmd.ExecuteReader If Not lnRdr.Read() Then messageBox("Erreur: La table SYSTEME n'est pas accessible !", ClientScript, Page, "") lnRdr.Close() : lnRdr = Nothing lnCon.Close() Return False Exit Function End If nbPages = lnRdr!TXT_VAL lnRdr.Close() ...

... Dim dernierJour As Integer = nbTotalJourMois(moisRaa, Now.Year) 'On selectionne tous les arrt du mois en cour lsSql = "SELECT PDF_ARR FROM ARRETE" lsSql &= " WHERE DAT_SIG >= '" & Now.Year & "-" & moisRaa & "-01'" lsSql &= " AND DAT_SIG <= '" & Now.Year & "-" & moisRaa & "-" & dernierJour & "'" lsSql &= " ORDER BY NUM_ARR" lcCmd = New SqlCommand(lsSql, lnCon) Dim Adaptateur As New SqlDataAdapter(lcCmd) Try Adaptateur.Fill(MonDataSet, "Arrete") 'Analyse du DataSet et criture des pdf dans un dossier temporaire ( + pagination) For Each Ligne As DataRow In MonDataSet.Tables("Arrete").Rows() fic = Ligne("PDF_ARR") TableauDeByteVersFicher(Server.MapPath("~/App_Data/uploads/pagesPdfTemporaire/" & i & ".pdf"), fic) nbPages += paginationPdf(Server.MapPath("~/App_Data/uploads/pagesPdfTemporaire/" & i & ".pdf"), nbPages, i, moisRaa) i += 1 Next 'On met jour la base de donne pour le mois suivant lsSql2 = "UPDATE SYSTEME SET TXT_VAL = '" lsSql2 &= Now.Year & moisRaa & "'" lsSql2 &= " WHERE TXT_VAR = 'MOIS_RAA'" lcCmd = New SqlCommand(lsSql2, lnCon) lcCmd.ExecuteNonQuery() lsSql4 = "UPDATE SYSTEME SET TXT_VAL = '" lsSql4 &= nbPages & "'" lsSql4 &= " WHERE TXT_VAR = 'NUM_PAGES'" lcCmd = New SqlCommand(lsSql4, lnCon) lcCmd.ExecuteNonQuery() Catch ex As Exception Console.WriteLine(ex.Message) End Try Return True End Function

Fonction de pagination des pages d'arrts mois + 1

Public Function paginationPdf(ByVal cheminFichier As String, ByVal nbPages As Integer, ByVal i As Integer, ByVal mois As Integer) As Integer Dim p = Dim Dim Try p.set_option("license=W900102-010011-133147-K3DCG2-7FL282") p.set_option("errorpolicy=return") Dim di As DirectoryInfo = Directory.CreateDirectory(Server.MapPath("~/App_Data/uploads/pagesPdf_" & MonthName(mois) & "/")) If p.begin_document(Server.MapPath("~/App_Data/uploads/pagesPdf_" & MonthName(mois) & "/" & i & ".pdf"), "") = -1 Then Throw New Exception("Error: " & p.get_errmsg()) End If p.set_info("Creator", "Conseil Gnral du Cantal") p.set_info("Title", "Recueil des Actes Administratifs") '/* Open the input PDF */ indoc = p.open_pdi_document(cheminFichier, "") If indoc = -1 Then Throw New Exception("Error: " & p.get_errmsg()) End If endpage = p.pcos_get_number(indoc, "length:pages") '/* Loop over all pages of the input document */ For pageno = 1 To endpage pagePdf = p.open_pdi_page(indoc, pageno, "") If pagePdf = -1 Then Throw New Exception("Error: " & p.get_errmsg()) End If p.begin_page_ext(10, 10, "") p.fit_pdi_page(pagePdf, 0, 0, "adjustpage") font = p.load_font("Helvetica", "unicode", "") If font = -1 Then Throw New Exception("Error: " & p.get_errmsg()) End If numeroPage = pageno p.fit_textline((numeroPage + nbPages), 290, 20, "fontname=Helvetica encoding=unicode fontsize=12") p.close_pdi_page(pagePdf) p.end_page_ext("") Next p.end_document("") Catch ex As Exception Console.WriteLine(ex.Message) End Try Return numeroPage End Function p As PDFlib_dotnet.PDFlib = Nothing New PDFlib() indoc As Integer, endpage As Integer, pagePdf, font As Integer numeroPage As Integer

Main.aspx

GenererRAA.aspx

You might also like