以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  请问fox能读取pdf文件的内容吗?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=97220)

--  作者:有点色
--  发布时间:2017/3/8 10:56:00
--  

参考

 

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=83249&skin=0

 


--  作者:有点色
--  发布时间:2017/3/8 11:34:00
--  
比较麻烦,你把你的pdf文件发上来看看。
--  作者:chen3728060
--  发布时间:2017/3/8 11:45:00
--  
我通常是叫员工先把pdf里,他想要的表格的内容,先粘贴到excel里,再粘贴到fox里的多行文本框,然后我用代码批量读取。直读PDF的话,我怕每次那些PDF表头和结尾会有奇怪不一样的地方(毕竟客人的下单系统不是我写的),导致批量读表格的功能不好用


此主题相关图片如下:1.jpg
按此在新窗口浏览图片

Dim ti As WinForm.TextBox = e.Form.Controls("TextBox_PDF")

Dim all As Integer =0
Dim repeat As Integer = 0
If ti.lines.Length > 0 Then
    
    For i As Integer = 0 To ti.Lines.Length - 1
        If (i Mod 3 = 0 ) Then ’我的pdf粘贴出来后,逢 1 4 7行是数据,其他行是垃圾文字
            Dim s As String = ti.Lines(i)
            s= s.Trim
            
            Dim Values() As String
            Values = s.split(" ")
            If Values.Length > = 5 Then
                
                Dim bar As String = Values(1)
                Dim qty As Integer = Values(Values.Length -5)
                
                Dim tg As Table = Tables("JOQuotationMain.JOQuotationDetail")
                
                Dim pg As Integer
                
                pg = tg.Findrow("JOItemCode =\'" & bar & "\'")
                
                If pg > - 1 Then \'如果找到符合条件的行
                    If pg > -1 Then
                        tg.Position = pg \'则选择该行
                        Dim nowr As Row = tg.Current
                        nowr("JOQuotationQty") = nowr("JOQuotationQty") + qty
                        repeat =repeat +1 \'对应产品数量+1
                    End If
                    
                Else \'找不到,就新增
                    
                    Dim filter As String = "JOItemCode = \'" & bar & "\'"
                    Dim dr As DataRow = DataTables("JOItemInfo").SQLFind (filter)
                    If dr IsNot Nothing Then
                        If DataTables("JOItemInfo").find(filter)  Is Nothing Then \'判断是否加载,没加载就加载
                            DataTables("JOItemInfo").AppendLoad(filter)
                        End If
                        
                        Dim r As Row =    tg.AddNew
                        r("JOItemID")= dr("JOItemID")
                        r("JOQuotationQty") = qty
                        tg.AutoSizeCols
                        all=all+1
                    Else
                        MessageBox.Show("找不到第" & (i/3) & "行条码为" & bar & "的样板,请用笔和纸记录下来,并完善样板资料")
                    End If
                End If
                
                
            Else
                MessageBox.show("第" & (i/3) & "款信息有误,读取失败,请用笔和纸记录下来")
            End If
        End If
    Next
    ti.Text=""
    MessageBox.show("产品识别完成," & repeat & "款重复,"  & all & "款新增")
Else
    MessageBox.show("请先粘贴订单PDF表格明细内容")
End If
[此贴子已经被作者于2017/3/8 11:45:47编辑过]

--  作者:有点色
--  发布时间:2017/3/8 13:08:00
--  

只能按照格式获取了,参考代码

 

Dim reader As New iTextSharp.text.pdf.PdfReader("d:\\test.pdf")

Dim n As Integer = reader.NumberOfPages
Dim str As String = ""
For i As Integer = 1 To n
    Dim strategy As object = New iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy()
    Dim currentText As String = iTextSharp.text.pdf.parser.PdfTextExtractor.GetTextFromPage(Reader, i, strategy)
   
    currentText = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.[Default], Encoding.UTF8, Encoding.[Default].GetBytes(currentText)))
    str &= currentText
Next
str = str.replace("审批通过", "").replace(chr(10), vbcrlf)
output.show(str)
Dim mc = System.Text.RegularExpressions.Regex.Matches(str, "/.+?.jpg")
output.show("验货报告:" & mc(9*4).value)
output.show("货物2:")
For i As Integer = 9*3-1 To 9*2 Step -1
    output.show(mc(i).value)
Next

Dim mc1 = System.Text.RegularExpressions.Regex.Matches(str, "(?<=申请人部门).+")
output.show("申请人部门:" &mc1(0).value)

reader.Close()


--  作者:有点色
--  发布时间:2017/3/8 13:50:00
--  
看懂8楼的代码,就是获取jpg的内容啊。
--  作者:有点色
--  发布时间:2017/3/8 14:14:00
--  
 看8楼