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 Adlı Kullanıcıdan Alıntı: 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 :
Visual Basic Code
 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

Visual Basic Code
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