วิธีการรับจำนวนหน้าของ PDF ด้วย Java และสกัดข้อมูลเมตาด็อกิวเมนต์

หากคุณต้องการ java pdf page count โดยไม่ต้องเปิดเอกสาร คุณมาถูกที่แล้ว ไม่ว่าคุณจะกำลังสร้างระบบจัดการเอกสาร, ตรวจสอบการอัปโหลด, หรืออัตโนมัติขั้นตอนการประมวลผลเนื้อหา การสกัดประเภทไฟล์, ขนาด, และจำนวนหน้าโดยโปรแกรมช่วยประหยัดเวลาและลดข้อผิดพลาด ในคู่มือนี้เราจะพาคุณผ่านการใช้ GroupDocs.Comparison for Java เพื่อ java get file type, java read file size, และ java get page count, พร้อมเคล็ดลับการปฏิบัติที่ดีที่สุดสำหรับการจัดการกรณีขอบและไฟล์ขนาดใหญ่

คำตอบสั้น

  • What library can I use to java get file type? GroupDocs.Comparison for Java.
  • Can I also java extract pdf metadata? ฉันสามารถ java extract pdf metadata ได้หรือไม่? ใช่ – API เดียวกันทำงานกับ PDF และรูปแบบอื่น ๆ มากมาย.
  • Do I need a license? ฉันต้องการไลเซนส์หรือไม่? ไลเซนส์ทดลองหรือไลเซนส์ชั่วคราวทำงานสำหรับการพัฒนา; ไลเซนส์เต็มจำเป็นสำหรับการใช้งานจริง.
  • What Java version is required? ต้องการเวอร์ชัน Java ใด? JDK 8+ (แนะนำ JDK 11+).
  • Is the code thread‑safe? โค้ดนี้ปลอดภัยต่อการทำงานหลายเธรดหรือไม่? สร้างอินสแตนซ์ Comparer แยกสำหรับแต่ละเธรด.

ทำไมต้องสกัดข้อมูลเมตาด็อกิวเมนต์ของเอกสาร?

การสกัดข้อมูลเมตาด็อกิวเมนต์ของเอกสารทำให้คุณสามารถกำหนดประเภทไฟล์, ขนาด, และจำนวนหน้าโดยอัตโนมัติ ซึ่งช่วยให้ทำการตรวจสอบ, ทำดัชนี, และตัดสินใจกระบวนการทำงานได้อัตโนมัติ คุณสามารถปฏิเสธรูปแบบที่ไม่รองรับได้ทันที, ส่งไฟล์ขนาดใหญ่ไปยังคิวการประมวลผลแยก, หรือสร้างรายงานสรุปคอลเลกชันของเอกสาร ในสถานการณ์จริงสิ่งนี้ช่วยลดความพยายามของมนุษย์, ปรับปรุงการตรวจสอบการปฏิบัติตาม, และเร่งความเร็วของการดำเนินการแบบแบตช์หลายพันไฟล์

สิ่งที่คุณจะได้เรียนรู้ในคู่มือนี้

ในบทเรียนนี้คุณจะได้เรียนรู้วิธีตั้งค่า GroupDocs.Comparison for Java, ดึง java pdf page count, รับประเภทไฟล์และขนาด, และจัดการข้อผิดพลาดทั่วไป เพื่อให้คุณสามารถรวมการสกัดเมตาดาต้าเข้ากับแอปพลิเคชัน Java ใดก็ได้ คุณยังจะได้เห็นรูปแบบการปฏิบัติที่ดีที่สุดสำหรับการจัดการทรัพยากร, การจัดการข้อผิดพลาด, และการปรับประสิทธิภาพเมื่อทำงานกับเอกสารขนาดใหญ่

ข้อกำหนดเบื้องต้น: สิ่งที่คุณต้องมีก่อนเริ่ม

คุณต้องมี JDK 8 หรือสูงกว่า, Maven สำหรับการจัดการ dependencies, และ IDE เช่น IntelliJ IDEA, Eclipse, หรือ VS Code, พร้อมไลเซนส์ GroupDocs.Comparison (ทดลองหรือเต็ม) เพื่อรันตัวอย่างโค้ด ไลบรารีทำงานบนแพลตฟอร์มใด ๆ ที่รองรับ Java 8+ และคุณควรมีสิทธิ์อ่าน/เขียนในโฟลเดอร์ที่เก็บเอกสารที่คุณวางแผนจะวิเคราะห์

การตั้งค่า GroupDocs.Comparison สำหรับ Java

ขั้นตอนที่ 1: การกำหนดค่า Maven

เพิ่ม dependency ของ GroupDocs.Comparison ลงในไฟล์ pom.xml ของคุณ วางโค้ดส่วนนี้ภายในส่วน <dependencies>:

<repositories>
   <repository>
      <id>repository.groupdocs.com</id>
      <name>GroupDocs Repository</name>
      <url>https://releases.groupdocs.com/comparison/java/</url>
   </repository>
</repositories>
<dependencies>
   <dependency>
      <groupId>com.groupdocs</groupId>
      <artifactId>groupdocs-comparison</artifactId>
      <version>25.2</version>
   </dependency>
</dependencies>

เคล็ดลับ: ตรวจสอบเวอร์ชันล่าสุดเสมอบนเว็บไซต์ของ GroupDocs—การใช้เวอร์ชันเก่าอาจทำให้เกิดคำเตือนความเข้ากันได้และขาดฟีเจอร์

ขั้นตอนที่ 2: การตั้งค่าไลเซนส์ (ห้ามข้าม!)

GroupDocs.Comparison ต้องการไลเซนส์ที่ถูกต้องสำหรับการใช้งานในสภาพแวดล้อมการผลิต

  1. Free trial – เหมาะสำหรับการทดสอบและโครงการขนาดเล็ก ดาวน์โหลดจากหน้า free trial page.
  2. Temporary license – มีประโยชน์สำหรับการพัฒนาและการประเมินผล ขอรับไลเซนส์ชั่วคราว here.
  3. Full license – จำเป็นสำหรับการใช้งานเชิงพาณิชย์ Purchase a license.

ขั้นตอนที่ 3: ตรวจสอบการตั้งค่าของคุณ

สร้างคลาสทดสอบง่าย ๆ เพื่อให้แน่ใจว่าไลบรารีโหลดอย่างถูกต้อง:

import com.groupdocs.comparison.Comparer;

public class SetupTest {
    public static void main(String[] args) {
        System.out.println("GroupDocs.Comparison is ready to use!");
        // We'll add actual functionality next
    }
}

หากโปรแกรมทำงานโดยไม่มีข้อยกเว้น คุณพร้อมที่จะสกัดเมตาดาต้าแล้ว

คู่มือการทำงาน: การสกัดข้อมูลเมตาด็อกิวเมนต์ทีละขั้นตอน

java get file type – เริ่มต้นอ็อบเจ็กต์ Comparer

Comparer คือคลาสหลักที่โหลดเอกสารและให้เข้าถึงเมตาดาต้าของมัน

import com.groupdocs.comparison.Comparer;
import java.io.IOException;

try (Comparer comparer = new Comparer("YOUR_DOCUMENT_DIRECTORY/source_document.docx")) {
    // We'll extract info here
} catch (Exception e) {
    System.err.println("Error initializing comparer: " + e.getMessage());
}

เกิดอะไรขึ้น?

  • บล็อก try‑with‑resources รับประกันว่าอินสแตนซ์ Comparer จะถูกปิดโดยอัตโนมัติ ป้องกันการรั่วของหน่วยความจำ.
  • อ็อบเจ็กต์ loadOptions สามารถขยายต่อในภายหลังสำหรับไฟล์ที่มีการป้องกันด้วยรหัสผ่านหรือการตั้งค่าโหลดแบบกำหนดเอง.

รับอ็อบเจ็กต์ข้อมูลเอกสาร

DocumentInfo ให้มุมมองแบบอ่านอย่างเดียวของคุณสมบัติที่สกัดจากเอกสาร เช่น ประเภทไฟล์, ขนาด, และจำนวนหน้า

import com.groupdocs.comparison.interfaces.IDocumentInfo;

try (Comparer comparer = new Comparer("YOUR_DOCUMENT_DIRECTORY/source_document.docx")) {
    try (IDocumentInfo info = comparer.getSource().getDocumentInfo()) {
        // Extract metadata here
    }
} catch (Exception e) {
    System.err.println("Error retrieving document info: " + e.getMessage());
}

ประเด็นสำคัญ:

  • getSource() คืนค่า wrapper ของเอกสารต้นทาง.
  • getDocumentInfo() ให้มุมมองแบบอ่านอย่างเดียวของเมตาดาต้าทั้งหมดที่สกัด.

สกัดข้อมูลสำคัญ

FileType แสดงรูปแบบที่ตรวจพบของเอกสาร, ส่วน getSize() คืนค่าความยาวเป็นไบต์ของไฟล์

try (Comparer comparer = new Comparer("YOUR_DOCUMENT_DIRECTORY/source_document.docx")) {
    try (IDocumentInfo info = comparer.getSource().getDocumentInfo()) {
        // Extract key information
        String fileType = info.getFileType().getFileFormat();
        int pageCount = info.getPageCount();
        long fileSize = info.getSize();
        
        // Display the results
        System.out.printf("File type: %s\n", fileType);
        System.out.printf("Number of pages: %d\n", pageCount);
        System.out.printf("Document size: %d bytes (%.2f KB)\n", 
                         fileSize, fileSize / 1024.0);
    }
} catch (Exception e) {
    System.err.println("Error extracting document info: " + e.getMessage());
}

ผลลัพธ์ของแต่ละเมธอด:

  • getFileType().getFileFormat() → รูปแบบไฟล์เช่น DOCX, PDF, หรือ TXT.
  • getPageCount() → จำนวนหน้าทั้งหมด, คือ java pdf page count ที่คุณมักต้องการ.
  • getSize() → ขนาดไฟล์เป็นไบต์, มีประโยชน์สำหรับการตรวจสอบ java read file size.

ตัวอย่างในโลกจริง: การทำงานเต็มรูปแบบ

ด้านล่างเป็นโค้ดสแนปพร้อมใช้งานในสภาพแวดล้อมการผลิตที่เชื่อมทุกอย่างเข้าด้วยกัน แสดงการโหลดไฟล์, สกัดคุณสมบัติหลักสามอย่าง, และพิมพ์ผลลัพธ์ไปยังคอนโซล

import com.groupdocs.comparison.Comparer;
import com.groupdocs.comparison.interfaces.IDocumentInfo;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class DocumentMetadataExtractor {
    
    public static void extractDocumentInfo(String filePath) {
        // First, check if file exists
        Path path = Paths.get(filePath);
        if (!Files.exists(path)) {
            System.err.println("File not found: " + filePath);
            return;
        }
        
        try (Comparer comparer = new Comparer(filePath)) {
            try (IDocumentInfo info = comparer.getSource().getDocumentInfo()) {
                displayDocumentInfo(info, filePath);
            }
        } catch (Exception e) {
            System.err.println("Error processing file " + filePath + ": " + e.getMessage());
        }
    }
    
    private static void displayDocumentInfo(IDocumentInfo info, String filePath) {
        String fileName = Paths.get(filePath).getFileName().toString();
        String fileType = info.getFileType().getFileFormat();
        int pageCount = info.getPageCount();
        long fileSize = info.getSize();
        
        System.out.println("=== Document Information ===");
        System.out.printf("File name: %s\n", fileName);
        System.out.printf("File type: %s\n", fileType);
        System.out.printf("Pages: %d\n", pageCount);
        System.out.printf("Size: %d bytes (%.2f KB)\n", fileSize, fileSize / 1024.0);
        System.out.println("============================\n");
    }
    
    public static void main(String[] args) {
        // Test with different file types
        extractDocumentInfo("path/to/your/document.docx");
        extractDocumentInfo("path/to/your/document.pdf");
    }
}

ปัญหาทั่วไปและวิธีแก้

ปัญหา 1: ข้อผิดพลาด “File not found”

อาการ: เกิดข้อยกเว้นเมื่อเริ่มต้น Comparer.
วิธีแก้: ตรวจสอบเส้นทางไฟล์เสมอก่อนสร้างอินสแตนซ์ Comparer:

Path filePath = Paths.get(documentPath);
if (!Files.exists(filePath)) {
    throw new IllegalArgumentException("File does not exist: " + documentPath);
}
if (!Files.isReadable(filePath)) {
    throw new IllegalArgumentException("File is not readable: " + documentPath);
}

ปัญหา 2: ปัญหาหน่วยความจำกับไฟล์ขนาดใหญ่

อาการ: OutOfMemoryError หรือประสิทธิภาพช้าเมื่อประมวลผล PDF หลายร้อยหน้า.
วิธีแก้: ประมวลผลไฟล์ทีละไฟล์, ใช้ try‑with‑resources, และพิจารณาเพิ่มขนาด heap ของ JVM (-Xmx2g สำหรับสูงสุด 2 GB). GroupDocs.Comparison สามารถจัดการไฟล์ขนาดถึง 2 GB โดยไม่ต้องโหลดเอกสารทั้งหมดเข้าสู่หน่วยความจำ.

// Always use try-with-resources
try (Comparer comparer = new Comparer(filePath)) {
    // Process immediately and don't store large objects
    processDocumentInfo(comparer.getSource().getDocumentInfo());
} // Resources automatically cleaned up here

ปัญหา 3: รูปแบบไฟล์ที่ไม่รองรับ

อาการ: ข้อยกเว้นเมื่อไลบรารีพบส่วนขยายที่ไม่รู้จัก.
วิธีแก้: ตรวจสอบรายการรูปแบบที่รองรับก่อนทำการประมวลผล. GroupDocs.Comparison รองรับ รูปแบบเข้าและออกกว่า 50+, รวมถึง DOCX, PDF, XLSX, PPTX, TXT, RTF, และ HTML.

public static boolean isSupportedFormat(String filePath) {
    String extension = FilenameUtils.getExtension(filePath).toLowerCase();
    return Arrays.asList("docx", "doc", "pdf", "txt", "rtf", "odt").contains(extension);
}

ปัญหา 4: ปัญหาไลเซนส์ในสภาพแวดล้อมการผลิต

อาการ: ปรากฏลายน้ำหรือ API บางส่วนถูกปิดใช้งาน.
วิธีแก้: ตรวจสอบให้แน่ใจว่าไฟล์ไลเซนส์โหลดอย่างถูกต้องเมื่อแอปพลิเคชันเริ่มทำงานและเวอร์ชันไลเซนส์ตรงกับเวอร์ชันของไลบรารี.

// Apply license at application startup
License license = new License();
license.setLicense("path/to/your/license.lic");

แนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้งานในสภาพแวดล้อมการผลิต

1. การจัดการทรัพยากร

ใช้ try‑with‑resources เสมอสำหรับการทำความสะอาดอัตโนมัติของ Comparer และสตรีมที่เกี่ยวข้อง:

// Good - resources cleaned up automatically
try (Comparer comparer = new Comparer(filePath);
     IDocumentInfo info = comparer.getSource().getDocumentInfo()) {
    // Process info
}

// Bad - potential memory leaks
Comparer comparer = new Comparer(filePath);
IDocumentInfo info = comparer.getSource().getDocumentInfo();
// Processing code
// Resources might not be cleaned up properly

2. กลยุทธ์การจัดการข้อผิดพลาด

ห่อการสกัดเมตาดาต้าในบล็อก try เดียวและบันทึกข้อมูลข้อผิดพลาดอย่างละเอียด สิ่งนี้ทำให้การแก้ไขปัญหาง่ายขึ้นและป้องกันแอปพลิเคชันจากการหยุดทำงานโดยไม่คาดคิด.

public DocumentInfo extractSafely(String filePath) {
    try {
        return extractDocumentInfo(filePath);
    } catch (SecurityException e) {
        log.warn("Access denied for file: " + filePath, e);
        return null;
    } catch (IOException e) {
        log.error("I/O error processing file: " + filePath, e);
        return null;
    } catch (Exception e) {
        log.error("Unexpected error processing file: " + filePath, e);
        return null;
    }
}

3. การปรับประสิทธิภาพ

เมื่อประมวลผลเป็นชุด, ใช้ ComparerFactory ที่เป็น thread‑local ซ้ำเพื่อหลีกเลี่ยงการสร้างอ็อบเจ็กต์ซ้ำ, และจำกัดจำนวนเธรดพร้อมกันให้เท่ากับจำนวนคอร์ของ CPU เพื่อเพิ่มอัตราการทำงานสูงสุด.

public List<DocumentInfo> processDocumentBatch(List<String> filePaths) {
    return filePaths.parallelStream()
                   .map(this::extractSafely)
                   .filter(Objects::nonNull)
                   .collect(Collectors.toList());
}

เมื่อใดควรใช้วิธีนี้เทียบกับวิธีอื่น

ใช้ GroupDocs.Comparison เมื่อ:

  • คุณต้องการการสกัดเมตาดาต้าที่เชื่อถือได้ในหลายรูปแบบของ Office และรูปภาพ.
  • คุณคาดว่าจะต้องการฟีเจอร์การเปรียบเทียบเอกสารในภายหลัง, เนื่องจากคลาส Comparer เดียวกันรองรับทั้งสอง.
  • เอกสารของคุณมีจำนวนหน้ามากกว่า 100 หน้า, และคุณต้องการการนับหน้าที่แม่นยำโดยไม่ต้องเรนเดอร์.

พิจารณาทางเลือกอื่นเมื่อ:

  • คุณต้องการเพียงการตรวจสอบขนาดไฟล์หรือส่วนขยายพื้นฐาน—java.nio.file.Files.probeContentType และ Files.size เพียงพอ.
  • ข้อจำกัดด้านงบประมาณทำให้ไม่สามารถใช้ไลเซนส์เชิงพาณิชย์—ไลบรารีโอเพนซอร์สเช่น Apache Tika สามารถให้เมตาดาต้าพื้นฐานได้แต่ไม่มีการครอบคลุมรูปแบบที่กว้างขวางของ GroupDocs.

คู่มือการแก้ไขปัญหา

ปัญหา: โค้ดคอมไพล์แล้วแต่เกิดข้อยกเว้นขณะรันไทม์

ตรวจสอบสิ่งเหล่านี้:

  1. ไลเซนส์ถูกนำไปใช้อย่างถูกต้องหรือไม่?
  2. คุณกำลังใช้เส้นทางแบบ absolute หรือ resource ของ classpath?
  3. กระบวนการมีสิทธิ์อ่านไฟล์หรือไม่?
  4. รูปแบบไฟล์อยู่ในตารางรูปแบบที่รองรับหรือไม่?

ปัญหา: การใช้หน่วยความจำเพิ่มขึ้นเรื่อย ๆ

วิธีแก้:

  1. ตรวจสอบให้แน่ใจว่า Comparer ทุกตัวถูกสร้างภายในบล็อก try‑with‑resources.
  2. ประมวลผลไฟล์ต่อเนื่องแทนการโหลดหลายไฟล์พร้อมกัน.
  3. เพิ่มขนาด heap ของ JVM เฉพาะเมื่อจำเป็นอย่างยิ่ง; ควรใช้ API แบบสตรีมมิ่งเป็นหลัก.

ปัญหา: ฟิลด์เมตาดาต้าบางส่วนคืนค่า null

นี่เป็นปกติสำหรับไฟล์ที่ไม่มีคุณสมบัติที่ร้องขอ (เช่น ไฟล์ข้อความธรรมดาไม่มีจำนวนหน้า). ควรตรวจสอบค่า null เสมอก่อนนำค่าไปใช้.

สรุปและขั้นตอนต่อไป

ตอนนี้คุณมีพื้นฐานที่มั่นคงสำหรับการสกัดเมตาดาต้าเอกสาร—รวมถึง java pdf page count, ประเภทไฟล์, และขนาด—โดยใช้ GroupDocs.Comparison for Java. คุณได้เรียนรู้วิธีตั้งค่าไลบรารี, ดึงคุณสมบัติสำคัญ, จัดการกับข้อผิดพลาดทั่วไป, และนำแนวทางปฏิบัติที่ดีที่สุดสำหรับการผลิตไปใช้.

ขั้นตอนต่อไปคืออะไร?

  • สำรวจ API document comparison เพื่อค้นหาการเปลี่ยนแปลงระหว่างเวอร์ชัน.
  • ผสานการสกัดเมตาดาต้าเข้ากับบริการ REST Spring Boot เพื่อการวิเคราะห์ตามความต้องการ.
  • ดำเนินการ batch processing ด้วยระบบคิว (เช่น RabbitMQ) สำหรับงานที่มีปริมาณสูง.
  • ศึกษาการสกัด custom property สำหรับไฟล์ Office หากคุณต้องการเมตาดาต้าเฉพาะบริษัท.

สำหรับข้อมูลเชิงลึกเพิ่มเติม, ดูที่ official GroupDocs documentation และอ้างอิง API แบบเต็ม

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

Q: ฉันสามารถสกัดเมตาดาต้าจากเอกสารที่ป้องกันด้วยรหัสผ่านได้หรือไม่?
A: ใช่, ให้ระบุรหัสผ่านผ่าน LoadOptions เมื่อสร้างอินสแตนซ์ Comparer.

Q: รูปแบบไฟล์ใดที่รองรับการสกัดเมตาดาต้า?
A: GroupDocs.Comparison รองรับรูปแบบกว่า 50+, รวมถึง DOCX, PDF, XLSX, PPTX, TXT, RTF, HTML, และหลายประเภทของภาพ.

Q: มีวิธีสกัดคุณสมบัติกำหนดเองจากไฟล์ Office หรือไม่?
A: DocumentInfo มาตรฐานครอบคลุมคุณสมบัติมาตรฐาน; สำหรับคุณสมบัติกำหนดเองคุณต้องผสาน GroupDocs กับ Office Open XML SDK หรือไลบรารีที่คล้ายกัน.

Q: ฉันจะจัดการไฟล์ขนาดใหญ่มากโดยไม่ทำให้หน่วยความจำเต็มได้อย่างไร?
A: ใช้ try‑with‑resources, ประมวลผลไฟล์ทีละไฟล์, และจัดสรร heap ของ JVM ให้เพียงพอ (เช่น -Xmx2g). ไลบรารีสตรีมไฟล์ขนาดใหญ่, ดังนั้นคุณมักไม่จำเป็นต้องโหลดเอกสารทั้งหมดเข้าสู่หน่วยความจำ.

Q: สามารถทำงานกับเอกสารที่เก็บในคลาวด์ได้หรือไม่?
A: ใช่, ดาวน์โหลดไฟล์ไปยังเส้นทางชั่วคราวบนเครื่องหรือสตรีมโดยตรงเข้าสู่ ByteArrayInputStream ก่อนส่งให้ Comparer.

Q: ควรทำอย่างไรหากได้รับข้อผิดพลาดเกี่ยวกับไลเซนส์?
A: ตรวจสอบว่าเส้นทางไฟล์ไลเซนส์ถูกต้อง, เวอร์ชันไลเซนส์ตรงกับเวอร์ชันของไลบรารี, และไลเซนส์ยังไม่หมดอายุ. ติดต่อฝ่ายสนับสนุนของ GroupDocs หากปัญหายังคงอยู่.

Q: ปลอดภัยหรือไม่ในการใช้ในแอปพลิเคชันหลายเธรด?
A: แน่นอน, ตราบใดที่แต่ละเธรดสร้างอินสแตนซ์ Comparer ของตนเอง. อย่าแชร์อินสแตนซ์เดียวกันระหว่างเธรด.

แหล่งข้อมูลเพิ่มเติม


อัปเดตล่าสุด: 2026-08-25
ทดสอบกับ: GroupDocs.Comparison 25.2
ผู้เขียน: GroupDocs

บทเรียนที่เกี่ยวข้อง