LEADTOOLS OCR类库提供的方法将光学字符识别(OCR)技术合并到应用程序。OCR用于处理位图文档图像到文本。
LEADTOOLS。net OCR工具包后安装到系统,编程LEADTOOLS OCR可以开始了。请注意,OCR功能之前,必须解锁OCR属性,方法和事件可以使用。关于解锁引导功能的更多信息,请参考解锁特殊的引导功能。
在您的应用程序中开始使用LEADTOOLS为。net OCR,添加引用Leadtools.Ocr.dll和Leadtools.Document.Writer.dll组件在. net应用程序中。这些程序集包含的各种接口、类、结构和代表与LEADTOOLS OCR程序使用。
自从工具包支持多个OCR引擎,引擎的实际代码接口存储在一个单独的组装后,将动态加载的一个实例IOcrEngine创建接口。因此,确保发动机装配计划使用驻留的旁边Leadtools.Ocr.dll作为sembly。您可以添加发动机总成作为参考你的社区需要自动检测依赖,即使LEADTOOLS这不是必需的。
LEADTOOLS提供方法:
识别和导出的文本,选择从不同的文本、文字处理、数据库或电子表格文件格式。
执行OCR过程在一个单一的或多线程环境优化的基于服务器的操作。
各种各样的OCR引擎之间切换。因为一个共同的。net类库使用,切换引擎(例如,从OmniPage铅引擎)需要在应用程序代码中几乎没有变化。
在识别指定要使用哪种语言。LEADTOOLS工具包支持多种语言,包括英语,丹麦语,荷兰语,芬兰语,法语,德语,意大利,挪威,葡萄牙,俄罗斯,西班牙,瑞典。还有一个阿拉伯语OCR引擎。和一个完整的列表的更多信息,请参考OCR语言和拼写检查。
段复杂的页面手动或自动成文本区域,图像区域,表区、线、页眉和页脚。
之前设置精度阈值识别控制识别的准确性。
识别文本在几乎任何字体从5到72点。
增加使用内置的识别精度和用户字典。
自动检测传真、点阵、和其他退化文件和相应的补偿。
过程这两个文本和图形。识别软件的能力区分半色调图像与文本可以提供一个复合文档处理系统的基础。
40保存文档的格式,包括Adobe PDF和PDF / A,微软的Word, Excel,女士以及各种风格的ASCII和UNICODE文本。
LEADTOOLS使用OCR处理与OCR引擎和OCR交互文档,其中包含页面的列表。OCR处理之间的通信会话LEADTOOLS OCR和一个OCR引擎安装在系统上。这OCR处理是一个内部结构,它包含所有必要的信息识别、获取和设置信息,文本验证。
选择您希望使用的引擎类型并创建的实例IOcrEngine接口。有关更多信息,请参考创建一个OCR引擎实例。
启动的OCR引擎IOcrEngine.Startup方法。有关更多信息,请参考启动和关闭发动机。
可选的。如果需要保存,建立一个OCR文档与一个或多个页面。有关更多信息,请参考使用OCR页面。
可选的。建立区域在页面上(s),手动或自动。(这是可选的。一个页面只能看到有或没有区域。)有关更多信息,请参考使用OCR区。
可选的。设置活动所使用的语言是OCR引擎。(默认语言是英语)。有关更多信息,请参考使用OCR语言。
可选的。设置属性为拼写检查。有关更多信息,请参考OCR拼写字典。
可选的。设置任何特殊识别模块选项。这是要求只有在页面包含区域,它可以自动或手动创建。有关更多信息,请参考OCR识别页面和在。net OCR LEADTOOLS使用有机磁共振。
识别。有关更多信息,请参考OCR识别页面。
可选的。保存识别结果,如果需要的话。结果可以保存到一个文件或内存。有关更多信息,请参考OCR识别页面。
OCR引擎完成后关闭。有关更多信息,请参考启动和关闭发动机。
步骤4、5、6和7可以做几乎在任何顺序,只要启动后的步骤进行OCR引擎和之前认识一个页面。
有关发动机总成的更多信息,请参考OcrEngineType和文件包含在您的应用程序。
(或LEADTOOLS OCR图像文件RasterImage与可选对象)和获取文本格式和位置信息。在这种模式下,一个IOcrDocument对象不需要因为结果不会被保存。的IOcrEngine.CreatePage方法可用于快速创建一个IOcrPage从RasterImage直接调用必要的方法(如IOcrPage.Recognize),然后获得文本直接使用IOcrPage.GetText或IOcrPage.GetRecognizedCharacters。为一个例子,请参考IOcrEngine.CreatePage。
执行低级光学字符识别一个或多个页面之后,创建一个文档在最后的文档格式,比如PDF或多克斯。在这种模式下,用户通常创建一个IOcrDocument在内存中对象(或文件),然后补充道IOcrPage对象。页面可以被事先或在某种程度上。当所有的页面添加和认可,IOcrDocument.Save被称为识别数据转换为最终的文档。为一个例子,请参考IOcrDocument。
执行高级光学字符识别的直接输入图像文件和输出最终的文档格式,比如PDF或多克斯。在这种模式下,您可以使用IOcrAutoRecognizeManager一次来转换文档。各种事件和日志记录机制可以用来修改和跟踪识别操作。为一个例子,请参考IOcrAutoRecognizeManager。
c#
/ /假设你添加“使用Leadtools.Codecs;”,"using Leadtools.Ocr;" and "using Leadtools.Document.Writer;" at the beginning of this class/ / * * *步骤1:指定发动机类型和创建IOcrEngine接口的一个实例。/ /这个例子将使用LEADTOOLS OCR模块——铅引擎用在相同的过程IOcrEngine ocrEngine = OcrEngineManager.CreateEngine (OcrEngineType.LEAD);/ / * * *第二步:启动引擎。/ /使用默认参数ocrEngine.Startup (零,零,零,@“C: \ LEADTOOLS21 \ Bin \常见\ OcrLEADRuntime”);/ / * * *第三步:创建一个OCR文档与一个或多个页面。IOcrDocument ocrDocument = ocrEngine.DocumentManager.CreateDocument ();/ /添加所有气管无名动脉瘘管的多页图像的页面文档ocrDocument.Pages.AddPages (@“C: \ LEADTOOLS21 \资源\ \ Ocr.tif图像”,1,1,零);/ / * * *步骤4:(可选)建立区域在页面上(s),手动或自动/ /自动分区ocrDocument.Pages.AutoZone (零);/ / * * *第五步:(可选)设置活动所使用的语言是OCR引擎/ /使英语和德语语言ocrEngine.LanguageManager.EnableLanguages (新字符串[]{“en”,“德”});/ / * * *第六步:(可选)设置拼写检查引擎/ /启用拼写检查系统ocrEngine.SpellCheckManager。SpellCheckEngine = OcrSpellCheckEngine.Native;/ / * * *第七步:(可选)设置任何特殊识别模块选项/ /设置分区方法首先在第一页带图形所以它不会被认可OcrZone OcrZone = ocrDocument.Pages [0] .Zones [0];ocrZone。ZoneType = OcrZoneType.Graphic;ocrDocument.Pages [0]。区[0]= ocrZone;/ / * * *第八步:识别ocrDocument.Pages.Recognize (零);/ / * * *步骤9:保存识别结果/ /将结果保存到一个PDF文件ocrDocument.Save (@“C: \ LEADTOOLS21 \资源\ \ Document.pdf图像”DocumentFormat.Pdf,零);ocrDocument.Dispose ();/ / * * *第十步:关闭OCR引擎完成后ocrEngine.Shutdown ();ocrEngine.Dispose ();
VB
假设你还说“进口Leadtools.Ocr”和“进口Leadtools.Document.Writer”开始时这类“* * *步骤1:指定IOcrEngine的发动机类型和创建一个实例接口这个例子将使用LEADTOOLS OCR模块——铅引擎和使用它在相同的过程昏暗的ocrEngine IOcrEngine = OcrEngineManager.CreateEngine (OcrEngineType.LEAD)“* * *第二步:启动引擎。的使用默认的参数ocrEngine.Startup (Nothing, Nothing, Nothing,“C: \ LEADTOOLS21 \ Bin \常见\ OcrLEADRuntime”)“* * *第三步:创建一个OCR文档与一个或多个页面昏暗的ocrDocument IOcrDocument = ocrEngine.DocumentManager.CreateDocument ()“添加所有气管无名动脉瘘管的多页图像的页面文档ocrDocument.Pages.AddPages (“C: \ LEADTOOLS21 \资源\ \ Ocr.tif图像”,1,1,没有什么)“* * *步骤4:(可选)建立区域在页面(s),手动或自动“自动分区ocrDocument.Pages.AutoZone(没有)“* * *第五步:(可选)设置活跃的语言使用通过OCR引擎使英语和德语语言ocrEngine.LanguageManager.EnableLanguages (New String() {“en”,“德”})“* * *第六步:(可选)设置拼写检查引擎“启用拼写检查引擎ocrEngine.SpellCheckManager。SpellCheckEngine = OcrSpellCheckEngine.Native“* * *第七步:(可选)设置任何特殊识别模块选项“改变分区方法为第一个区在第一页图片所以它不会被认可昏暗的ocrZone ocrZone = ocrDocument.Pages (0) .Zones (0)ocrZone。ZoneType = OcrZoneType.GraphicsocrDocument.Pages .Zones (0) (0) = ocrZone“* * *第八步:识别文档ocrDocument.Pages.Recognize(没有)“* * *步骤9:保存识别结果将结果保存到一个PDF文件ocrDocument.Save (“C: \ LEADTOOLS21 \资源\ \ Document.pdf图像”DocumentFormat.Pdf,没有什么)ocrDocument.Dispose ()“* * *第十步:关闭OCR引擎完成后ocrEngine.Shutdown ()ocrEngine.Dispose ()
下面的例子演示了一些不同的方法可以使用LEADTOOLS OCR引擎。
(或LEADTOOLS OCR图像文件RasterImage与可选对象)和获取文本格式和位置信息。在这种模式下,一个IOcrDocument对象不需要因为结果不会被保存。使用IOcrEngine.CreatePage快速创建一个方法IOcrPage从RasterImage(如:直接调用必要的方法IOcrPage.Recognize),然后获得文本直接使用IOcrPage.GetText或IOcrPage.GetRecognizedCharacters。
注意:这种模式只支持LEADTOOLS OCR模块——铅引擎。调用IOcrEngine.CreatePage使用任何其它OCR引擎将会导致一个异常被抛出。
下面的示例使用一个OCR页面没有文档。
c#
/ /创建引擎实例使用(IOcrEngine ocrEngine = OcrEngineManager.CreateEngine (OcrEngineType.LEAD)){/ /启动引擎ocrEngine.Startup (零,零,零,@“C: \ LEADTOOLS21 \ Bin \常见\ OcrLEADRuntime”);/ /加载RasterImage第一页RasterImage RasterImage = ocrEngine.RasterCodecsInstance.Load (@“C: \ LEADTOOLS21 \资源\ \ Ocr.tif图像”1);/ /创建一个OCR页面从这个形象,转移所有权的RasterImage对象使用(IOcrPage ocrPage = ocrEngine。CreatePage (rasterImage OcrImageSharingMode.AutoDispose)){/ /识别页面ocrPage.Recognize (零);/ /显示所有的文本区域为(intzoneIndex = 0;zoneIndex < ocrPage.Zones.Count;zoneIndex + +){字符串文本= ocrPage.GetText (zoneIndex);Console.WriteLine(文本);}}/ /时,引擎将自动关闭处理}
VB
“创建引擎实例使用ocrEngine IOcrEngine = OcrEngineManager.CreateEngine (OcrEngineType.LEAD)“启动引擎ocrEngine.Startup (Nothing, Nothing, Nothing,“C: \ LEADTOOLS21 \ Bin \常见\ OcrLEADRuntime”)第一页的负载作为一个RasterImage昏暗的rasterImage rasterImage = ocrEngine.RasterCodecsInstance.Load (“C: \ LEADTOOLS21 \资源\ \ Ocr.tif图像”,1)“创建一个OCR页面从这形象,RasterImage转移所有权对象使用ocrPage IOcrPage = ocrEngine。CreatePage (RasterImage OcrImageSharingMode.AutoDispose)“认识到页面ocrPage.Recognize(没有)的显示文本在所有区域为整数zoneIndex ocrPage.Zones = 0。数- 1昏暗的文本字符串= ocrPage.GetText (zoneIndex)Console.WriteLine(文本)下一个结束使用”时,引擎将自动关闭处理是被称为结束使用
光学字符识别结果保存到最后文件如PDF或多克斯需要的一个实例IOcrDocument。一个或多个OCR页面可以添加到文档,然后各种保存方法可以调用来创建最终的文档。
IOcrDocument可以用在两个方面:
在基于内存模式下,OCR页面之前需要在内存中保存。这个文档时不建议大量的页面和一个基于文件的文档或LEADTOOLS临时文件格式DocumentFormat.Ltd是必需的。
在基于内存的IOcrDocument,IOcrPageCollection保存页面。任何或所有的页面都可以在任何时候被认可和页面可以添加或删除。
下面的例子使用了一个基于内存的文档创建一个多页的PDF文件。注意所有的页面都保存在内存中保存操作。
c#
/ /创建引擎实例使用(IOcrEngine ocrEngine = OcrEngineManager.CreateEngine (OcrEngineType.LEAD)){/ /启动引擎ocrEngine.Startup (零,零,零,@“C: \ LEADTOOLS21 \ Bin \常见\ OcrLEADRuntime”);/ /在内存中创建OCR文档使用(IOcrDocument ocrDocument = ocrEngine.DocumentManager.CreateDocument (零,OcrCreateDocumentOptions.InMemory)){字符串imageFile =@“C: \ LEADTOOLS21 \资源\ \ Ocr.tif图像”;/ /将所有的页面添加到文档中ocrDocument.Pages.AddPages (imageFile, 1, -1,零);/ /识别所有的页面ocrDocument.Pages.Recognize (零);/ /保存PDF格式的识别结果ocrDocument.Save (@“C: \ LEADTOOLS21 \资源\ \ Document.pdf图像”DocumentFormat.Pdf,零);}}
VB
“创建引擎实例使用ocrEngine IOcrEngine = OcrEngineManager.CreateEngine (OcrEngineType.LEAD)“启动引擎ocrEngine.Startup (Nothing, Nothing, Nothing,“C: \ LEADTOOLS21 \ Bin \常见\ OcrLEADRuntime”)“创建OCR文档在内存使用ocrDocument IOcrDocument = ocrEngine.DocumentManager。CreateDocument(没什么,OcrCreateDocumentOptions.InMemory)昏暗的imageFile字符串=“C: \ LEADTOOLS21 \资源\ \ Ocr.tif图像”“将所有的页面添加到文档中ocrDocument.Pages.AddPages (imageFile, 1, -1, Nothing)“认识的所有页面ocrDocument.Pages.Recognize(没有)“拯救识别结果在PDF格式ocrDocument.Save (“C: \ LEADTOOLS21 \资源\ \ Document.pdf图像”DocumentFormat.Pdf,没有什么)结束使用结束使用
在基于文件的文档模式,OCR页面不需要之前在内存中保存。这种模式是最好的文档时大量的页面。
在基于文件的IOcrDocument模式下,IOcrPageCollection只存储的页面视图。当添加一个页面,当前识别数据的快照保存到文档。这些数据不能修改,页面不再需要。页面之前必须承认他们被添加到文件和页面只能补充道。他们不能被删除。
下面的例子使用了一个基于文件的文档创建一个多页的PDF文件。注意页面处理后不需要识别和保存操作。
c#
/ /创建引擎实例使用(IOcrEngine ocrEngine = OcrEngineManager.CreateEngine (OcrEngineType.LEAD)){/ /启动引擎ocrEngine.Startup (零,零,零,@“C: \ LEADTOOLS21 \ Bin \常见\ OcrLEADRuntime”);/ /创建一个基于文件的OCR文档使用(IOcrDocument ocrDocument = ocrEngine.DocumentManager.CreateDocument (零,OcrCreateDocumentOptions.AutoDeleteFile)){字符串imageFile =@“C: \ LEADTOOLS21 \资源\ \ Ocr.tif图像”;/ /得到文件的页数intpageCount = ocrEngine.RasterCodecsInstance.GetTotalPages (imageFile);/ /创建一个页面为(int页面= 1;页< = pageCount;+ +页){/ /加载RasterImageRasterImage RasterImage = ocrEngine.RasterCodecsInstance.Load (imageFile, page);/ /创建一个OCR页面从这个形象,转移所有权的RasterImage对象使用(IOcrPage ocrPage = ocrEngine。CreatePage (rasterImage OcrImageSharingMode.AutoDispose)){/ /识别页面ocrPage.Recognize (零);/ /将其添加到文档中ocrDocument.Pages.Add (ocrPage);/ /页面将在这里处理及其内存释放}}/ /保存PDF格式的识别结果ocrDocument.Save (@“C: \ LEADTOOLS21 \资源\ \ Document.pdf图像”DocumentFormat.Pdf,零);}}
VB
“创建引擎实例使用ocrEngine IOcrEngine = OcrEngineManager.CreateEngine (OcrEngineType.LEAD)“启动引擎ocrEngine.Startup (Nothing, Nothing, Nothing,“C: \ LEADTOOLS21 \ Bin \常见\ OcrLEADRuntime”)创建一个基于文件的OCR文档使用ocrDocument IOcrDocument = ocrEngine.DocumentManager。CreateDocument(没什么,OcrCreateDocumentOptions.AutoDeleteFile)昏暗的imageFile字符串=“C: \ LEADTOOLS21 \资源\ \ Ocr.tif图像”的页面的数量在文档昏暗的pageCount Integer = ocrEngine.RasterCodecsInstance.GetTotalPages (imageFile)“创建页面pageCount页面作为Integer = 1“加载RasterImage昏暗的rasterImage rasterImage = ocrEngine.RasterCodecsInstance.Load (imageFile, page)“创建一个OCR页面从这形象,RasterImage转移所有权对象使用ocrPage IOcrPage = ocrEngine。CreatePage (rasterImage OcrImageSharingMode.AutoDispose)“认识到页面ocrPage.Recognize(没有)将其添加到文档ocrDocument.Pages.Add (ocrPage)的页面将被处理和内存释放结束使用下一个“拯救识别结果在PDF格式ocrDocument.Save (@“C: \ LEADTOOLS21 \资源\ \ Document.pdf图像”DocumentFormat.Pdf,没有什么)结束使用结束使用
基于文件的文档也可以保存和持久化,继续添加页面,或者把它转换成最终的文档格式在稍后的时间。下面的例子展示了如何做到这一点。
c#
私人静态无效Test4 (){/ /创建引擎实例IOcrEngine ocrEngine = OcrEngineManager.CreateEngine (OcrEngineType.LEAD);/ /启动引擎ocrEngine.Startup (零,零,零,@“C: \ LEADTOOLS21 \ Bin \常见\ OcrLEADRuntime”);字符串imageFile1 =@“C: \ LEADTOOLS21 \资源\ \ Ocr1.tif图像”;字符串imageFile2 =@“C: \ LEADTOOLS21 \资源\ \ Ocr2.tif图像”;/ /创建一个基于文件的OCR文档/ /通过文件名称(名称将被重用),告诉文档不删除它字符串documentFile =@“C: \ LEADTOOLS21 \资源\ \ document.bin图像”;使用(IOcrDocument ocrDocument = ocrEngine.DocumentManager.CreateDocument (documentFile, OcrCreateDocumentOptions.None)){/ /验证文档没有任何页面System.Diagnostics.Debug.Assert (ocrDocument.Pages。数= = 0);/ /添加一个页面RasterImage RasterImage = ocrEngine.RasterCodecsInstance.Load (imageFile1, 1);使用(IOcrPage ocrPage = ocrEngine。CreatePage (rasterImage OcrImageSharingMode.AutoDispose)){ocrPage.Recognize (零);ocrDocument.Pages.Add (ocrPage);}/ /这里的文档处理,但文件将不会被删除}/ /重新加载代码文档使用(IOcrDocument ocrDocument = ocrEngine.DocumentManager.CreateDocument (documentFile, OcrCreateDocumentOptions.LoadExisting)){/ /验证文档有一个页面System.Diagnostics.Debug.Assert (ocrDocument.Pages。数= = 1);/ /添加另一个页面RasterImage RasterImage = ocrEngine.RasterCodecsInstance.Load (imageFile2, 1);使用(IOcrPage ocrPage = ocrEngine。CreatePage (rasterImage OcrImageSharingMode.AutoDispose)){ocrPage.Recognize (零);ocrDocument.Pages.Add (ocrPage);}/ /验证文档有2页System.Diagnostics.Debug.Assert (ocrDocument.Pages。数= = 2);/ /保存文档ocrDocument.Save (@“C: \ LEADTOOLS21 \资源\ \ Document.pdf图像”DocumentFormat.Pdf,零);/ /结果将是两页的PDF文件}/ /最后,删除文档文件System.IO.File.Delete (documentFile);ocrEngine.Dispose ();}
VB
“创建引擎实例昏暗的ocrEngine IOcrEngine = OcrEngineManager.CreateEngine (OcrEngineType.LEAD)“启动引擎ocrEngine.Startup (Nothing, Nothing, Nothing,“C: \ LEADTOOLS21 \ Bin \常见\ OcrLEADRuntime”)昏暗的imageFile1字符串=“C: \ LEADTOOLS21 \资源\ \ Ocr1.tif图像”昏暗的imageFile2字符串=“C: \ LEADTOOLS21 \资源\ \ Ocr2.tif图像”创建一个基于文件的OCR文档通过文件名称(名称将重用),告诉文档不删除它昏暗的documentFile字符串=“C: \ LEADTOOLS21 \资源\ \ document.bin图像”使用ocrDocument IOcrDocument = ocrEngine.DocumentManager。CreateDocument (documentFile OcrCreateDocumentOptions.None)“验证文件没有任何页面System.Diagnostics.Debug.Assert (ocrDocument.Pages。数= 0)“添加页面昏暗的rasterImage rasterImage = ocrEngine.RasterCodecsInstance.Load (imageFile1, 1)使用ocrPage IOcrPage = ocrEngine。CreatePage (rasterImage OcrImageSharingMode.AutoDispose)ocrPage.Recognize(没有)ocrDocument.Pages.Add (ocrPage)结束使用“这里的文件是处理文件将不会被删除结束使用“重新加载代码文件使用ocrDocument IOcrDocument = ocrEngine.DocumentManager。CreateDocument (documentFile OcrCreateDocumentOptions.LoadExisting)验证文档的一页System.Diagnostics.Debug.Assert (ocrDocument.Pages。数= 1)“添加另一个页面昏暗的rasterImage rasterImage = ocrEngine.RasterCodecsInstance.Load (imageFile2, 1)使用ocrPage IOcrPage = ocrEngine。CreatePage (rasterImage OcrImageSharingMode.AutoDispose)ocrPage.Recognize(没有)ocrDocument.Pages.Add (ocrPage)结束使用“验证文件有2页System.Diagnostics.Debug.Assert (ocrDocument.Pages。数= 2)“保存文档ocrDocument.Save (“C: \ LEADTOOLS21 \资源\ \ Document.pdf图像”DocumentFormat.Pdf,没有什么)的结果将是两页的PDF文件结束使用最后,删除文档文件System.IO.File.Delete (documentFile)ocrEngine.Dispose ()
以前的所有技术要求低级代码加载一个页面,承认它,并将它添加到一个文件。LEADTOOLS OCR引擎也支持执行相同的任务使用一次以上“发射后不管”IOcrAutoRecognizeManager接口。在这个高层OCR,直接输入图像转换到输出格式仅使用一个方法使用的最佳选项。
c#
/ /创建引擎实例使用(IOcrEngine ocrEngine = OcrEngineManager.CreateEngine (OcrEngineType.LEAD)){/ /启动引擎ocrEngine.Startup (零,零,零,@“C: \ LEADTOOLS21 \ Bin \常见\ OcrLEADRuntime”);/ /将气管无名动脉瘘管的多页图像转换成PDF文档ocrEngine.AutoRecognizeManager.Run (@“C: \ LEADTOOLS21 \资源\ \ Ocr.tif图像”,@“C: \ LEADTOOLS21 \资源\ \ Document.pdf图像”,DocumentFormat.Pdf,零,零);}
VB
“创建引擎实例使用ocrEngine IOcrEngine = OcrEngineManager.CreateEngine (OcrEngineType.LEAD)“启动引擎ocrEngine.Startup (Nothing, Nothing, Nothing,“C: \ LEADTOOLS21 \ Bin \常见\ OcrLEADRuntime”)气管无名动脉瘘管的多页图像转换为一个PDF文档ocrEngine.AutoRecognizeManager.Run (_“C: \ LEADTOOLS21 \资源\ \ Ocr.tif图像”,_“C: \ LEADTOOLS21 \资源\ \ Document.pdf图像”,_DocumentFormat.Pdf,_没什么,_没有什么)结束使用