Skip to main content

AccessTr.neT


PDF veri toplama ve veritabanına kaydetme..

PDF veri toplama ve veritabanına kaydetme..

Çözüldü #1
Merhaba arkadaşlar, elimde 30.000 adet pdf var. Bu pdf sayfalar müşteri bilgilerini barındırıyor. Her bir pdf de müşteriye ait bilgiler var. Bu pdf lerde bulunan bilgileri veritabanina aktarmak istiyorum. 30.000 kişinin adı, soyadı, telefon numarası, adresi, araç bilgileri, çalıştığı iş yeri vb. bilgiler kayıtlı.

Her sayfadaki bilgileri ilgili sutunlara aktarmak istiyorum. Böylece tüm müşterilere ait elimde veri bankası olacak ve arama yöntemi ile araç sahibi olanları ayrı, meslek gruplarına göre ayrı ayrı, cinsiyet ve yaş durumlarına göre ayrı ayrı kategorilemek için veritabanı yapmak istiyorum. 

Danışmak istediğim husus: pdf den verileri ayrı ayrı arayarak veritabanına çekmem mümkün mü? 

Her PDF form şeklinde yani her bilginin yeri PDF icinde aynı yerde..
Cevapla
#2
iTextSharp kullanarak PDF belgelerinizin içeriğini okuyabilirsiniz. İşin klasördeki PDF leri dolaşması, okunanları farklı bir yere taşıması, hatalı olanların loglanması gibi pek çok yan işlerini unutmamak lazım
AccessTr.Net teknik konular içeren bir sitedir. Bu tip sitelerde en iyi şekilde yardım alabilmeniz için Site Kurallarını mutlaka okumanız ve buna göre hareket etmeniz lazım.
Cevapla
#3
(01/10/2017, 23:01)Uğur ŞİRİN yazdı: Merhaba arkadaşlar, elimde 30.000 adet pdf var. Bu pdf sayfalar müşteri bilgilerini barındırıyor. Her bir pdf de müşteriye ait bilgiler var. Bu pdf lerde bulunan bilgileri veritabanina aktarmak istiyorum. 30.000 kişinin adı, soyadı, telefon numarası, adresi, araç bilgileri, çalıştığı iş yeri vb. bilgiler kayıtlı.

Her sayfadaki bilgileri ilgili sutunlara aktarmak istiyorum. Böylece tüm müşterilere ait elimde veri bankası olacak ve arama yöntemi ile araç sahibi olanları ayrı, meslek gruplarına göre ayrı ayrı, cinsiyet ve yaş durumlarına göre ayrı ayrı kategorilemek için veritabanı yapmak istiyorum. 

Danışmak istediğim husus: pdf den verileri ayrı ayrı arayarak veritabanına çekmem mümkün mü? 

Her PDF form şeklinde yani her bilginin yeri PDF icinde aynı yerde..

Ben kdv, geçici tahakkuklarını önce datagridde yolu ile listeletiyorum aynı anda ödemesi çıkanlarıda açtırıp şu şekilde okutuyorum.
Örnek kod :
 Public Function ParsePdfText(ByVal sourcePDF As String, Optional ByVal fromPageNum As Integer = 0, Optional ByVal toPageNum As Integer = 0) As String
       Dim sb As New System.Text.StringBuilder()
       Dim reader As New PdfReader(sourcePDF)
       Dim pageBytes() As Byte = Nothing
       Dim raFile As iTextSharp.text.pdf.RandomAccessFileOrArray = Nothing
       raFile = New iTextSharp.text.pdf.RandomAccessFileOrArray(sourcePDF)
       Dim token As PRTokeniser = New iTextSharp.text.pdf.PRTokeniser(raFile)
       Dim tknType As Integer = -1
       Dim tknValue As String = String.Empty
       If fromPageNum = 0 Then

           fromPageNum = 1
       End If
       If toPageNum = 0 Then
           toPageNum = reader.NumberOfPages
       End If
       If fromPageNum > toPageNum Then
           Throw New ApplicationException("Parameter error: The value of fromPageNum can not be larger than the value of toPageNum")
       End If
       For i As Integer = fromPageNum To toPageNum Step 1
           pageBytes = reader.GetPageContent(i)
           If Not IsNothing(pageBytes) Then
               ' token = New iTextSharp.text.pdf.PRTokeniser(pageBytes)
               While token.NextToken()
                   tknType = token.TokenType()
                   tknValue = token.StringValue
                   Select Case tknType
                       Case iTextSharp.text.pdf.PRTokeniser.TokType.NUMBER      '1
                           Dim dValue As Double
                           If Double.TryParse(tknValue, dValue) Then
                               If dValue < -8000 Then
                                   sb.Append(ControlChars.Tab)
                               End If
                           End If
                       Case iTextSharp.text.pdf.PRTokeniser.TokType.STRING      '2
                           sb.Append(token.StringValue)
                       Case iTextSharp.text.pdf.PRTokeniser.TokType.NAME        '3
                 'Ignore
                       Case iTextSharp.text.pdf.PRTokeniser.TokType.COMMENT     '4
                 'Ignore
                       Case iTextSharp.text.pdf.PRTokeniser.TokType.START_ARRAY '5
                 'Ignore
                       Case iTextSharp.text.pdf.PRTokeniser.TokType.END_ARRAY   '6
                           sb.Append(" ")
                       Case iTextSharp.text.pdf.PRTokeniser.TokType.START_DIC   '7
                 'Ignore
                       Case iTextSharp.text.pdf.PRTokeniser.TokType.END_DIC     '8
                 'Ignore
                       Case iTextSharp.text.pdf.PRTokeniser.TokType.REF         '9
                 'Ignore
                       Case iTextSharp.text.pdf.PRTokeniser.TokType.OTHER       '10
                           Select Case tknValue
                               Case "TJ"
                                   sb.Append(" ")
                               Case "ET", "TD", "Td", "Tm", "T*"
                                   sb.Append(Environment.NewLine)
                           End Select
                   End Select
               End While
           End If
       Next i
       Return sb.ToString()


   End Function

   Public Function PDFToText(file As String) As String

       Using reader As New PdfReader(file)
           Dim text As New StringBuilder()
           For i As Integer = 1 To reader.NumberOfPages
               text.Append(PdfTextExtractor.GetTextFromPage(reader, i))
           Next
           Return text.ToString()
       End Using

   End Function

   Public Function TRSiz(ByVal vdata As String) As String
       Dim tmp As String
       tmp = Replace(vdata, "Ý", "İ")
       tmp = Replace(tmp, "ý", "ı")
       tmp = Replace(tmp, "Ð", "Ğ")
       tmp = Replace(tmp, "ğ", "g")
       tmp = Replace(tmp, "Þ", "Ş")
       tmp = Replace(tmp, "þ", "ş")
       TRSiz = tmp
   End Function

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click


       Dim Secim As Boolean
       For Each Ana_Klasor In Directory.GetDirectories(TextBox1.Text)
           Dim Mukellef_Isim As New System.IO.FileInfo(Ana_Klasor)
           If Ana_Klasor.ToString.Length > 0 Then
               Try
                   For Each Donemi In Directory.GetDirectories(Ana_Klasor, "08 2017" & "-" & "08 2017", SearchOption.AllDirectories)
                       Dim Donem_Klasor As New System.IO.FileInfo(Donemi)
                       For Each Evrak In Directory.GetFiles(Donemi)
                           Dim Evraklar As New System.IO.FileInfo(Evrak)

                           If Evrak.Contains("KDV1_tahakkuk") Or Evrak.Contains("KDV2_tahakkuk") Then
                               Dim Dizi() As String
                               Dizi = Evraklar.Name.Split("_")

                               Dim yol As String = Ana_Klasor & "\" & Donem_Klasor.Name & "\" & Evraklar.Name
                               ' Dim oku As String = TRSiz(yol).Substring(yazitoplam + 6, yaziislem - yazitoplam - 6)


                               Dim str99 As String = PDFToText(yol)
                               Dim i As Integer = TRSiz(str99).IndexOf("TOPLAM")
                               Dim c As Integer = TRSiz(str99).IndexOf("İşlem")
                               Dim x As Integer = TRSiz(str99).IndexOf("VADESİ")
                               Dim str98 As String = TRSiz(str99).Substring(x + 6, c - x - 6)
                               Dim w As Integer = TRSiz(str98).IndexOf("/")
                               Dim str97 As String = TRSiz(str98).Substring(w - 2, 10)
                               Dim oku As String = TRSiz(str99).Substring(i + 6, c - i - 6)

                               DataGridView1.Rows.Add(Secim, Mukellef_Isim.Name, Donem_Klasor.Name, Dizi(0) & " " & UCase(Dizi(1)), Ana_Klasor & "\" & Donem_Klasor.Name & "\" & Evraklar.Name, Evraklar.LastAccessTime, oku)

                           End If
                       Next
                   Next
               Catch ex As Exception

               End Try
           End If
       Next
End Sub

Kodlar işine yarıyacaktır.
drummers, 11-05-2009 tarihinden beri AccessTr.neT üyesidir.
Cevapla
#4
Şu soruyu sorupta verilen cevaplara yanıt vermiyorlarmı insanı hakikaten merak ediyor. Madem takip etmeyeceksiniz neden soru soruyorsunuz? Konuyu çözülmüş konulara taşıyorum.
AccessTr.Net teknik konular içeren bir sitedir. Bu tip sitelerde en iyi şekilde yardım alabilmeniz için Site Kurallarını mutlaka okumanız ve buna göre hareket etmeniz lazım.
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da