ค้นหานิพจน์ทั่วไปในไฟล์ PDF

การแนะนำ

เมื่อต้องจัดการกับเอกสาร PDF ขนาดใหญ่ คุณอาจพบว่าตัวเองต้องค้นหารูปแบบหรือรูปแบบเฉพาะ เช่น วันที่ หมายเลขโทรศัพท์ หรือข้อมูลที่มีโครงสร้างอื่นๆ การตรวจสอบ PDF ด้วยตนเองอาจเป็นเรื่องที่น่าเบื่อใช่หรือไม่ นี่คือจุดที่การใช้นิพจน์ทั่วไป (regex) มีประโยชน์ ในบทช่วยสอนนี้ เราจะมาสำรวจวิธีค้นหารูปแบบนิพจน์ทั่วไปภายในไฟล์ PDF โดยใช้ Aspose.PDF สำหรับ .NET คู่มือนี้จะแนะนำคุณในแต่ละขั้นตอนเพื่อให้คุณนำไปใช้งานในแอปพลิเคชัน .NET ได้อย่างง่ายดาย

ข้อกำหนดเบื้องต้น

ก่อนที่เราจะเจาะลึกในบทช่วยสอนทีละขั้นตอน มาดูสิ่งที่คุณต้องมีกันก่อน:

  • Aspose.PDF สำหรับ .NET: คุณต้องติดตั้งไลบรารีนี้ก่อน หากคุณยังไม่ได้ติดตั้ง คุณสามารถดาวน์โหลดได้ที่นี่.
  • IDE: Visual Studio หรือ IDE อื่น ๆ ที่เข้ากันได้กับ C#
  • .NET Framework: ตรวจสอบให้แน่ใจว่าโครงการของคุณได้รับการตั้งค่าด้วย .NET Framework เวอร์ชันที่เหมาะสม
  • ความรู้พื้นฐานเกี่ยวกับ C#: แม้ว่าคู่มือนี้จะมีรายละเอียด แต่การมีความเข้าใจพื้นฐานเกี่ยวกับ C# จะเป็นประโยชน์

แพ็คเกจนำเข้า

ในการเริ่มต้น คุณจะต้องนำเข้าเนมสเปซที่จำเป็นจาก Aspose.PDF สำหรับ .NET เข้าสู่โปรเจ็กต์ของคุณ แพ็คเกจเหล่านี้มีความจำเป็นสำหรับการทำงานกับ PDF และการดำเนินการค้นหาโดยใช้ regex

using Aspose.Pdf;
using Aspose.Pdf.Text;
using System;

มาแบ่งขั้นตอนการค้นหานิพจน์ทั่วไปในไฟล์ PDF โดยใช้ Aspose.PDF ออกเป็นหลายขั้นตอน

ขั้นตอนที่ 1: ตั้งค่าไดเรกทอรีเอกสาร

การดำเนินการ PDF ทุกครั้งเริ่มต้นด้วยการระบุตำแหน่งที่ตั้งของเอกสารของคุณ คุณจะต้องกำหนดเส้นทางไปยังไฟล์ PDF ของคุณ ซึ่งจะถูกเก็บไว้ในdataDir ตัวแปร.

ขั้นตอนที่ 1.1: กำหนดเส้นทางเอกสารของคุณ

// กำหนดเส้นทางไปยังเอกสาร PDF ของคุณ
string dataDir = "YOUR DOCUMENT DIRECTORY";

แทนที่"YOUR DOCUMENT DIRECTORY" ด้วยเส้นทางจริงไปยังไฟล์ PDF ของคุณ ขั้นตอนนี้มีความสำคัญเนื่องจากจะชี้โค้ดของคุณไปยังไฟล์ที่คุณต้องการใช้งาน

ขั้นตอนที่ 1.2: เปิดเอกสาร PDF

ขั้นต่อไปคุณต้องเปิดเอกสาร PDF โดยใช้Document คลาสจาก Aspose.PDF

// เปิดเอกสาร
Document pdfDocument = new Document(dataDir + "SearchRegularExpressionAll.pdf");

ที่นี่,"SearchRegularExpressionAll.pdf" เป็นไฟล์ PDF ตัวอย่างที่เราจะใช้ค้นหา regex

ขั้นตอนที่ 2: ตั้งค่า TextFragmentAbsorber

ที่นี่คือจุดที่เวทมนตร์เกิดขึ้น!TextFragmentAbsorber คลาสช่วยในการจับส่วนของข้อความที่ตรงกับรูปแบบเฉพาะหรือนิพจน์ทั่วไป

มาตั้งค่าตัวดูดซับเพื่อค้นหารูปแบบโดยใช้ regex กัน ในกรณีนี้ เราจะค้นหารูปแบบของปี เช่น “1999-2000”

// สร้างวัตถุ TextAbsorber เพื่อค้นหาวลีทั้งหมดที่ตรงกับนิพจน์ทั่วไป
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("\\d{4}-\\d{4}"); // ประมาณปี 1999-2000

นิพจน์ปกติ\\d{4}-\\d{4} ค้นหารูปแบบตัวเลขสี่หลักตามด้วยเครื่องหมายขีดกลางและตัวเลขอีกสี่หลัก ซึ่งถือเป็นลักษณะทั่วไปของช่วงปี

ขั้นตอนที่ 3: เปิดใช้งานการค้นหาด้วยนิพจน์ทั่วไป

เพื่อให้แน่ใจว่าการดำเนินการค้นหาตีความรูปแบบเป็นนิพจน์ทั่วไป คุณจำเป็นต้องกำหนดค่าตัวเลือกการค้นหาโดยใช้TextSearchOptions ระดับ.

// ตั้งค่าตัวเลือกการค้นหาข้อความเพื่อระบุการใช้งานนิพจน์ปกติ
TextSearchOptions textSearchOptions = new TextSearchOptions(true);
textFragmentAbsorber.TextSearchOptions = textSearchOptions;

การตั้งค่าTextSearchOptions ถึงtrue ช่วยให้แน่ใจว่าตัวดูดซับจะใช้การค้นหาตามนิพจน์ปกติแทนข้อความธรรมดา

ขั้นตอนที่ 4: ยอมรับ Text Absorber

ในขั้นตอนนี้ คุณจะใช้ตัวดูดซับข้อความกับเอกสาร PDF เพื่อให้สามารถดำเนินการค้นหาได้ ซึ่งทำได้โดยการเรียกใช้Accept วิธีการบนPages วัตถุของเอกสาร PDF

// รับตัวดูดซับทุกหน้า
pdfDocument.Pages.Accept(textFragmentAbsorber);

คำสั่งนี้จะประมวลผลหน้าทั้งหมดของ PDF โดยค้นหาข้อความใดๆ ที่ตรงกับนิพจน์ทั่วไป

ขั้นตอนที่ 5: ดึงข้อมูลและแสดงผลลัพธ์

หลังจากการค้นหาเสร็จสิ้น คุณต้องดึงผลลัพธ์ออกมาTextFragmentAbsorber เก็บผลลัพธ์เหล่านี้ไว้ในTextFragmentCollectionคุณสามารถวนซ้ำผ่านคอลเลกชันนี้เพื่อเข้าถึงและแสดงข้อความที่ตรงกันแต่ละส่วน

ขั้นตอนที่ 5.1: ดึงข้อมูลส่วนที่แยกออกมา

// รับชิ้นส่วนข้อความที่แยกออกมา
TextFragmentCollection textFragmentCollection = textFragmentAbsorber.TextFragments;

ตอนนี้คุณได้รวบรวมชิ้นส่วนต่างๆ แล้ว ถึงเวลาที่จะวนซ้ำและแสดงรายละเอียดที่เกี่ยวข้อง เช่น ข้อความ ตำแหน่ง รายละเอียดแบบอักษร และอื่นๆ

ขั้นตอนที่ 5.2: วนซ้ำผ่านเศษส่วน

// วนผ่านชิ้นส่วน
foreach (TextFragment textFragment in textFragmentCollection)
{
    Console.WriteLine("Text : {0} ", textFragment.Text);
    Console.WriteLine("Position : {0} ", textFragment.Position);
    Console.WriteLine("XIndent : {0} ", textFragment.Position.XIndent);
    Console.WriteLine("YIndent : {0} ", textFragment.Position.YIndent);
    Console.WriteLine("Font - Name : {0}", textFragment.TextState.Font.FontName);
    Console.WriteLine("Font - IsAccessible : {0} ", textFragment.TextState.Font.IsAccessible);
    Console.WriteLine("Font - IsEmbedded : {0} ", textFragment.TextState.Font.IsEmbedded);
    Console.WriteLine("Font - IsSubset : {0} ", textFragment.TextState.Font.IsSubset);
    Console.WriteLine("Font Size : {0} ", textFragment.TextState.FontSize);
    Console.WriteLine("Foreground Color : {0} ", textFragment.TextState.ForegroundColor);
}

สำหรับแต่ละTextFragmentรายละเอียดต่างๆ เช่น ขนาดตัวอักษร ชื่อตัวอักษร และตำแหน่งจะถูกพิมพ์ออกมา ซึ่งไม่เพียงแต่ช่วยในการค้นหาข้อความเท่านั้น แต่ยังช่วยให้คุณระบุรูปแบบและตำแหน่งที่แน่นอนของข้อความได้อีกด้วย

บทสรุป

นั่นแหละ! การค้นหารูปแบบในไฟล์ PDF โดยใช้นิพจน์ทั่วไปนั้นมีประสิทธิภาพอย่างยิ่ง โดยเฉพาะอย่างยิ่งสำหรับข้อความที่มีโครงสร้าง เช่น วันที่ หมายเลขโทรศัพท์ และรูปแบบที่คล้ายกัน Aspose.PDF สำหรับ .NET มอบวิธีการที่ราบรื่นในการดำเนินการดังกล่าวได้อย่างง่ายดาย ตอนนี้คุณสามารถใช้ประโยชน์จากพลังของนิพจน์ทั่วไปในการค้นหาข้อความ PDF โดยอัตโนมัติ ทำให้เวิร์กโฟลว์ของคุณมีประสิทธิภาพมากขึ้น

คำถามที่พบบ่อย

ฉันสามารถค้นหารูปแบบต่างๆ ใน PDF เดียวได้ไหม

ใช่ คุณสามารถรันได้หลาย ๆTextFragmentAbsorber วัตถุแต่ละชิ้นมีรูปแบบ regex ที่แตกต่างกันใน PDF เดียวกัน

Aspose.PDF รองรับการค้นหารูปแบบที่ไม่คำนึงถึงตัวพิมพ์ใหญ่หรือเล็กหรือไม่

แน่นอน! คุณสามารถกำหนดค่าได้TextSearchOptions เพื่อให้การค้นหาไม่คำนึงถึงตัวพิมพ์เล็ก/ใหญ่

มีข้อจำกัดเกี่ยวกับขนาดของ PDF ที่ฉันค้นหาได้หรือไม่

ไม่มีข้อจำกัดที่เข้มงวด แต่ประสิทธิภาพอาจแตกต่างกันไปขึ้นอยู่กับขนาดของ PDF และความซับซ้อนของรูปแบบ regex

ฉันสามารถเน้นข้อความที่พบใน PDF ได้หรือไม่

ใช่ Aspose.PDF ช่วยให้คุณเน้นข้อความหรือแม้แต่แทนที่ข้อความได้ เมื่อพบโดยใช้ตัวดูดซับ

ฉันจะจัดการข้อผิดพลาดอย่างไรหากไม่พบรูปแบบ?

หากไม่พบการจับคู่TextFragmentCollection จะว่างเปล่า คุณสามารถจัดการสถานการณ์นี้ด้วยการตรวจสอบง่ายๆ ก่อนที่จะวนซ้ำผ่านผลลัพธ์