เปรียบเทียบเอกสารใน Java – คู่มือเต็มของ GroupDocs API

บทนำ

เคยพบว่าตัวเองต้องเปรียบเทียบเอกสารสองไฟล์ด้วยตนเองทีละบรรทัด แล้วพลาดความแตกต่างที่สำคัญหรือไม่? คุณไม่ได้เป็นคนเดียว compare documents in java เป็นความท้าทายทั่วไป โดยเฉพาะเมื่อคุณต้องการรักษา metadata, จัดการไฟล์ที่มีการป้องกันด้วยรหัสผ่าน, หรือเปรียบเทียบไฟล์จำนวนมากพร้อมกัน

Here’s the thing: ส่วนใหญ่ของนักพัฒนาต้องเผชิญกับปัญหาเพราะพวกเขาหรือสร้างสิ่งใหม่จากศูนย์ (ซึ่งใช้เวลานาน) หรือใช้เครื่องมือ diff พื้นฐานที่ละเลยการจัดรูปแบบ, metadata, และการตั้งค่าความปลอดภัย. นั่นคือจุดที่ GroupDocs.Comparison for Java เข้ามาช่วย

ในบทแนะนำที่ครอบคลุมนี้ คุณจะได้ค้นพบวิธีการทำการเปรียบเทียบเอกสารอย่างแข็งแรงในแอปพลิเคชัน Java ของคุณ เราจะครอบคลุมทุกอย่างตั้งแต่การตั้งค่าเบื้องต้นจนถึงการจัดการ metadata ขั้นสูง พร้อมตัวอย่างจากโลกจริงที่คุณสามารถใช้ในการผลิตได้จริง เมื่อจบคุณจะรู้วิธี:

  • ตั้งค่า GroupDocs.Comparison ในโปรเจกต์ Java ของคุณ (ง่ายกว่าที่คิด)
  • compare documents in java พร้อมรักษาความสมบูรณ์ของ metadata
  • จัดการสถานการณ์ java compare multiple files และ java compare password protected
  • ปรับประสิทธิภาพสำหรับการประมวลผลเอกสารขนาดใหญ่

พร้อมที่จะทำให้การเปรียบเทียบเอกสารเป็นเรื่องง่ายในแอป Java ของคุณหรือยัง? ไปดูกันเลย!

คำตอบอย่างรวดเร็ว

  • ไลบรารีใดที่ให้ฉันเปรียบเทียบเอกสารใน java? GroupDocs.Comparison for Java
  • ฉันสามารถเปรียบเทียบหลายไฟล์พร้อมกันได้หรือไม่? ใช่ – เพิ่มเอกสารเป้าหมายได้ตามต้องการ
  • ฉันจะจัดการเอกสารที่ป้องกันด้วยรหัสผ่านอย่างไร? ใช้ LoadOptions พร้อมรหัสผ่านของเอกสาร
  • ฉันต้องการไลเซนส์สำหรับการผลิตหรือไม่? ไลเซนส์ GroupDocs ที่ถูกต้องจะลบลายน้ำและข้อจำกัด
  • ต้องการเวอร์ชัน Java ใด? JDK 8+, แนะนำ JDK 11+

คือ compare documents in java คืออะไร?

การเปรียบเทียบเอกสารใน Java หมายถึงการตรวจจับความแตกต่างแบบโปรแกรมเมติก—การเปลี่ยนแปลงข้อความ, การแก้ไขรูปแบบ, หรือการอัปเดต metadata—ระหว่างสองไฟล์หรือมากกว่าโดยใช้ไลบรารีที่เข้าใจโครงสร้างของเอกสาร GroupDocs.Comparison แยกความซับซ้อนออกให้คุณด้วย API ที่ง่ายต่อการสร้างเอกสาร diff ที่ไฮไลท์การเปลี่ยนแปลงทุกอย่าง

ทำไมต้องใช้ GroupDocs.Comparison for Java?

  • รองรับฟอร์แมตหลากหลาย – DOCX, PDF, XLSX, PPTX, TXT, และอื่น ๆ
  • จัดการ Metadata – เลือกใช้ metadata ของต้นฉบับ, เป้าหมาย, หรือไม่มี metadata สำหรับผลลัพธ์
  • รองรับรหัสผ่าน – เปิดไฟล์ที่ป้องกันโดยไม่ต้องถอดรหัสด้วยตนเอง
  • ประสิทธิภาพขยายได้ – ประมวลผลเป็นชุด, การทำงานแบบ async, และออกแบบให้ใช้หน่วยความจำน้อย

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

  • สภาพแวดล้อม Java: JDK 8+ (แนะนำ JDK 11+), IDE ที่คุณชอบ, Maven (หรือ Gradle)
  • ไลบรารี GroupDocs.Comparison: เวอร์ชัน 25.2 หรือใหม่กว่า (ควรใช้เวอร์ชันล่าสุดเสมอ)
  • ไลเซนส์: ทดลองใช้ฟรี, ไลเซนส์ชั่วคราว 30 วัน, หรือไลเซนส์เชิงพาณิชย์

การตั้งค่า GroupDocs.Comparison ในโปรเจกต์ของคุณ

การกำหนดค่า Maven

เริ่มแรกให้เพิ่มรีโพสิตอรีของ GroupDocs และ dependency ลงใน pom.xml ของคุณ นี่คือจุดที่หลายบทเรียนทำให้ซับซ้อนเกินความจำเป็น แต่จริง ๆ แล้วง่ายมาก:

<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>

Pro tip: ตรวจสอบหมายเลขเวอร์ชันล่าสุดที่หน้า GroupDocs releases page เวอร์ชันใหม่มักมีการปรับปรุงประสิทธิภาพและแก้บั๊กที่ช่วยลดปัญหาให้คุณ

การจัดการไลเซนส์ของคุณ

สิ่งที่หลายคนไม่รู้คือคุณสามารถเริ่มทดสอบ GroupDocs.Comparison ได้ทันทีด้วยรุ่นทดลองฟรี ไม่ต้องใช้บัตรเครดิต ไม่ต้องมีเงื่อนไขใด ๆ

ตัวเลือกของคุณ:

  1. Free Trial – เหมาะสำหรับการทดสอบและโปรเจกต์ขนาดเล็ก ดาวน์โหลดและเริ่มเขียนโค้ดได้เลย!
  2. Temporary License – ต้องการเวลามากกว่านี้เพื่อประเมิน? รับไลเซนส์ชั่วคราว 30 วัน ที่นี่
  3. Commercial License – พร้อมสำหรับการผลิต? ดูราคา ที่นี่

รุ่นทดลองฟรีให้คุณเข้าถึงทุกฟีเจอร์ แต่จะใส่ลายน้ำในไฟล์ผลลัพธ์ สำหรับการพัฒนาและการทดสอบโดยทั่วไปถือว่าเพียงพอ

การทำงานเปรียบเทียบเอกสาร: ขั้นตอนเต็มรูปแบบ

นี่คือส่วนสำคัญ! เราจะสร้างโซลูชันการเปรียบเทียบเอกสารแบบครบวงจรทีละขั้นตอน ไม่ต้องกังวล เราจะอธิบายไม่เพียง “วิธีทำ” แต่ยังรวม “ทำไม” ของแต่ละการตัดสินใจด้วย

ทำความเข้าใจแหล่งที่มาของ Metadata (สำคัญมาก!)

ก่อนเริ่มเขียนโค้ด เรามาพูดถึงเรื่องที่ทำให้หลายคนสับสน: แหล่งที่มาของ metadata เมื่อคุณ compare documents in java คุณต้องกำหนดว่า metadata ของเอกสารใด (ผู้เขียน, วันที่สร้าง, คุณสมบัติเฉพาะ ฯลฯ) ควรจะถูกเก็บไว้ในผลลัพธ์

GroupDocs.Comparison มีสามตัวเลือก:

  • SOURCE – ใช้ metadata จากเอกสารต้นฉบับ
  • TARGET – ใช้ metadata จากเอกสารที่เปรียบเทียบกับต้นฉบับ
  • NONE – ลบ metadata ทั้งหมดออกจากผลลัพธ์

สำหรับแอปพลิเคชันธุรกิจส่วนใหญ่ คุณมักจะเลือก SOURCE เพื่อรักษาความสอดคล้อง

การทำตามขั้นตอน

เราจะสร้างยูทิลิตี้ที่สามารถนำกลับมาใช้ใหม่ได้ในทุกโปรเจกต์

ขั้นตอนที่ 1: นำเข้าคลาสที่จำเป็น

import com.groupdocs.comparison.Comparer;
import com.groupdocs.comparison.options.enums.MetadataType;
import com.groupdocs.comparison.options.save.SaveOptions;
import java.nio.file.Path;
import java.io.IOException;

ขั้นตอนที่ 2: สร้างอินสแตนซ์ Comparer

นี่คือจุดเริ่มต้นของความมหัศจรรย์ คลาส Comparer เป็นจุดเข้าหลักสำหรับการเปรียบเทียบทั้งหมด:

try (Comparer comparer = new Comparer("YOUR_DOCUMENT_DIRECTORY/source.docx")) {
    // All our comparison logic goes here
}

Why use try‑with‑resources? คลาส Comparer implements AutoCloseable ซึ่งหมายความว่ามันจะทำความสะอาดทรัพยากรโดยอัตโนมัติเมื่อใช้งานเสร็จ ช่วยป้องกัน memory leak โดยเฉพาะเมื่อต้องประมวลผลเอกสารจำนวนมาก

ขั้นตอนที่ 3: เพิ่มเอกสารเป้าหมายสำหรับการเปรียบเทียบ

comparer.add("YOUR_DOCUMENT_DIRECTORY/target1.docx");

Here’s something cool: คุณสามารถเพิ่มเอกสารเป้าหมายหลายไฟล์และเปรียบเทียบทั้งหมดกับต้นฉบับในหนึ่งการทำงาน เพียงเรียก add() หลายครั้ง:

comparer.add("YOUR_DOCUMENT_DIRECTORY/target1.docx");
comparer.add("YOUR_DOCUMENT_DIRECTORY/target2.docx");
comparer.add("YOUR_DOCUMENT_DIRECTORY/target3.docx");

ขั้นตอนที่ 4: ตั้งค่า Metadata Handling และรันการเปรียบเทียบ

นี่คือขั้นตอนที่เราตั้งค่าแหล่งที่มาของ metadata และสั่งให้ทำการเปรียบเทียบจริง:

final Path resultPath = comparer.compare("output/comparison_result.docx",
        new SaveOptions.Builder()
                .setCloneMetadataType(MetadataType.SOURCE)
                .build());

What’s happening here? เรากำลังบอก GroupDocs ให้:

  1. เปรียบเทียบเอกสารที่เพิ่มทั้งหมดกับต้นฉบับ
  2. บันทึกผลลัพธ์ลงในพาธที่กำหนด
  3. ใช้ metadata ของเอกสาร SOURCE ในผลลัพธ์สุดท้าย

ตัวอย่างทำงานเต็มรูปแบบ

รวมทุกขั้นตอนไว้ในเมธอดที่คุณสามารถเรียกใช้ได้ทันที:

public class DocumentComparison {
    
    public static Path compareDocumentsWithMetadata(
            String sourcePath, 
            String targetPath, 
            String outputPath) throws IOException {
        
        try (Comparer comparer = new Comparer(sourcePath)) {
            // Add the target document
            comparer.add(targetPath);
            
            // Configure comparison options
            SaveOptions saveOptions = new SaveOptions.Builder()
                    .setCloneMetadataType(MetadataType.SOURCE)
                    .build();
            
            // Execute comparison and return result path
            return comparer.compare(outputPath, saveOptions);
        }
    }
}

ปัญหาที่พบบ่อยและวิธีหลีกเลี่ยง

หลังจากช่วยนักพัฒนาหลายร้อยคนทำการเปรียบเทียบเอกสาร ผมพบปัญหาเดิม ๆ ซ้ำ ๆ ต่อไปนี้คือปัญหาใหญ่ (และวิธีแก้)

ปัญหาเกี่ยวกับพาธไฟล์

Problem: FileNotFoundException แม้ว่าไฟล์จะมีอยู่จริง
Solution: ใช้พาธแบบ absolute เสมอหรือแก้ไขการ resolve พาธ relative อย่างถูกต้อง

// Instead of this:
String sourcePath = "documents/source.docx";

// Do this:
String sourcePath = Paths.get("documents", "source.docx").toAbsolutePath().toString();

ปัญหาเรื่องการจัดการหน่วยความจำ

Problem: เกิด Out of memory เมื่อเปรียบเทียบเอกสารขนาดใหญ่
Solution: เพิ่มขนาด heap ของ JVM และใช้การจัดการทรัพยากรอย่างเหมาะสม

# Add these JVM arguments when running your application
-Xmx4g -XX:+UseG1GC

การจัดการ Metadata ผิดพลาด

Problem: สูญเสีย metadata ที่สำคัญระหว่างการเปรียบเทียบ
Solution: ตั้งค่า metadata type อย่างชัดเจน – อย่าพึ่งพาค่าตั้งต้น

// Always be explicit about metadata handling
SaveOptions saveOptions = new SaveOptions.Builder()
        .setCloneMetadataType(MetadataType.SOURCE)  // Be explicit!
        .build();

ปัญหาเกี่ยวกับการตั้งค่าไลเซนส์

Problem: ปรากฏลายน้ำในสภาพการผลิต
Solution: ตรวจสอบว่าไลเซนส์ถูกโหลดอย่างถูกต้องก่อนสร้างอินสแตนซ์ Comparer

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

แนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้งานใน Production

จากประสบการณ์จริง นี่คือแนวทางที่ทำให้โค้ดระดับมืออาชีพแตกต่างจากโค้ดทดลอง

การจัดการข้อผิดพลาดที่มีประโยชน์จริง

อย่าแค่จับ Exception – ให้จัดการอย่างมีความหมาย:

public ComparisonResult compareDocuments(String source, String target) {
    try (Comparer comparer = new Comparer(source)) {
        comparer.add(target);
        Path result = comparer.compare("output.docx", 
            new SaveOptions.Builder()
                .setCloneMetadataType(MetadataType.SOURCE)
                .build());
        
        return new ComparisonResult(true, result.toString(), null);
        
    } catch (IOException e) {
        logger.error("File access error during comparison", e);
        return new ComparisonResult(false, null, "Unable to access document files");
        
    } catch (Exception e) {
        logger.error("Unexpected error during document comparison", e);
        return new ComparisonResult(false, null, "Document comparison failed");
    }
}

การเพิ่มประสิทธิภาพ

สำหรับสถานการณ์ที่ต้องประมวลผลจำนวนมาก ให้พิจารณาการปรับแต่งต่อไปนี้:

  1. Reuse Comparer instances เมื่อเป็นไปได้ (ต้องระวังเรื่อง thread‑safety)
  2. Process documents in batches เพื่อไม่ให้ระบบทรัพยากรถูกใช้จนเต็ม
  3. Use asynchronous processing สำหรับเอกสารขนาดใหญ่
  4. Monitor memory usage และปรับตั้งค่า JVM ตามความจำเป็น

ข้อควรระวังด้านความปลอดภัย

เมื่อจัดการเอกสารที่เป็นความลับ:

  • Validate file types ก่อนทำการประมวลผล
  • Implement proper access controls
  • Clean up temporary files ทันทีหลังการใช้งาน
  • Consider encrypting ผลลัพธ์การเปรียบเทียบ

การใช้งานจริงและกรณีศึกษา

มาดูว่าผู้พัฒนาจริงใช้ GroupDocs.Comparison อย่างไรในระบบผลิต

การตรวจสอบเอกสารทางกฎหมาย

สำนักงานกฎหมายใช้การเปรียบเทียบเอกสารเพื่อติดตามการเปลี่ยนแปลงในสัญญาและข้อตกลงทางกฎหมาย ฟีเจอร์การรักษา metadata มีความสำคัญมากเพราะต้องคงที่มาของเอกสาร

// Typical legal document comparison workflow
public void reviewContractChanges(String originalContract, String revisedContract) {
    try (Comparer comparer = new Comparer(originalContract)) {
        comparer.add(revisedContract);
        
        SaveOptions options = new SaveOptions.Builder()
                .setCloneMetadataType(MetadataType.SOURCE)  // Preserve original metadata
                .build();
        
        Path result = comparer.compare("contract_review.docx", options);
        
        // Send result to legal team for review
        notifyLegalTeam(result);
    }
}

ระบบจัดการเนื้อหา (CMS)

แพลตฟอร์ม CMS ใช้การเปรียบเทียบเอกสารเพื่อควบคุมเวอร์ชันและติดตามการเปลี่ยนแปลง:

public class CMSDocumentVersioning {
    
    public VersionComparisonResult compareVersions(
            DocumentVersion current, 
            DocumentVersion previous) {
        
        try (Comparer comparer = new Comparer(current.getFilePath())) {
            comparer.add(previous.getFilePath());
            
            String outputName = String.format("comparison_%s_vs_%s.docx", 
                current.getVersionNumber(), 
                previous.getVersionNumber());
            
            Path result = comparer.compare(outputName, 
                new SaveOptions.Builder()
                    .setCloneMetadataType(MetadataType.SOURCE)
                    .build());
            
            return new VersionComparisonResult(result, current, previous);
        }
    }
}

การวิเคราะห์เอกสารทางการเงิน

สถาบันการเงินใช้เพื่อการปฏิบัติตามกฎระเบียบและสร้าง audit trail:

public AuditResult auditFinancialDocument(String originalReport, String submittedReport) {
    // Compare submitted report against original
    // Metadata preservation is critical for audit compliance
    try (Comparer comparer = new Comparer(originalReport)) {
        comparer.add(submittedReport);
        
        Path auditResult = comparer.compare("audit_comparison.docx",
            new SaveOptions.Builder()
                .setCloneMetadataType(MetadataType.SOURCE)
                .build());
        
        return generateAuditReport(auditResult);
    }
}

การเพิ่มประสิทธิภาพและการขยายขนาด

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

การจัดการหน่วยความจำ

เอกสารขนาดใหญ่สามารถกินหน่วยความจำได้เร็ว นี่คือวิธีจัดการอย่างมีประสิทธิภาพ:

public class OptimizedDocumentProcessor {
    
    private final ExecutorService executor = Executors.newFixedThreadPool(
        Runtime.getRuntime().availableProcessors());
    
    public CompletableFuture<Path> compareDocumentsAsync(
            String source, 
            String target, 
            String output) {
        
        return CompletableFuture.supplyAsync(() -> {
            try (Comparer comparer = new Comparer(source)) {
                comparer.add(target);
                return comparer.compare(output, 
                    new SaveOptions.Builder()
                        .setCloneMetadataType(MetadataType.SOURCE)
                        .build());
            }
        }, executor);
    }
}

การประมวลผลเป็นชุด

สำหรับการเปรียบเทียบหลายไฟล์พร้อมกัน การประมวลผลเป็นชุดคือเพื่อนที่ดีที่สุด:

public List<ComparisonResult> processBatch(List<DocumentPair> documentPairs) {
    return documentPairs.parallelStream()
        .map(this::compareDocumentPair)
        .collect(Collectors.toList());
}

private ComparisonResult compareDocumentPair(DocumentPair pair) {
    try (Comparer comparer = new Comparer(pair.getSourcePath())) {
        comparer.add(pair.getTargetPath());
        Path result = comparer.compare(pair.getOutputPath(),
            new SaveOptions.Builder()
                .setCloneMetadataType(MetadataType.SOURCE)
                .build());
        return new ComparisonResult(pair, result, true);
    } catch (Exception e) {
        return new ComparisonResult(pair, null, false, e.getMessage());
    }
}

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

เมื่อเกิดข้อผิดพลาด (และบางครั้งก็เกิด) นี่คือเช็คลิสต์สำหรับการดีบัก

ข้อผิดพลาด “Comparison Failed”

สาเหตุที่พบบ่อยที่สุด:

  1. ฟอร์แมตไฟล์ไม่รองรับ
  2. ไฟล์ต้นฉบับเสียหาย
  3. หน่วยความจำไม่พอ
  4. ปัญหาการอนุญาตไฟล์

ขั้นตอนการดีบัก:

// Add comprehensive logging to identify the issue
logger.debug("Starting comparison: source={}, target={}", sourcePath, targetPath);

try (Comparer comparer = new Comparer(sourcePath)) {
    logger.debug("Comparer initialized successfully");
    
    comparer.add(targetPath);
    logger.debug("Target document added successfully");
    
    Path result = comparer.compare(outputPath, saveOptions);
    logger.info("Comparison completed successfully: result={}", result);
    
    return result;
} catch (Exception e) {
    logger.error("Comparison failed", e);
    throw new DocumentComparisonException("Failed to compare documents", e);
}

ปัญหาประสิทธิภาพ

หากการเปรียบเทียบใช้เวลานานเกินไป:

  1. ตรวจสอบขนาดเอกสาร – ไฟล์ที่ใหญ่กว่า 100 MB อาจต้องการการจัดการพิเศษ
  2. ตรวจสอบการใช้หน่วยความจำ – เพิ่ม heap หากจำเป็น
  3. ตรวจสอบประสิทธิภาพ I/O – ที่เก็บข้อมูลช้าอาจเป็นคอขวด
  4. พิจารณาฟอร์แมตของเอกสาร – บางฟอร์แมตซับซ้อนต่อการประมวลผลมากกว่า

การรั่วของหน่วยความจำ

สัญญาณที่บ่งบอกว่ามี memory leak:

  • ประสิทธิภาพของแอปลดลงตามเวลา
  • OutOfMemoryError หลังจากประมวลผลหลายไฟล์
  • การทำงานของ garbage collector เพิ่มขึ้นอย่างมาก

Solution: ใช้ try‑with‑resources เสมอและตรวจสอบแอปด้วยเครื่องมือ profiling

การจัดการไฟล์ที่ป้องกันด้วยรหัสผ่าน

หากต้อง java compare password protected เอกสาร ให้ใช้ LoadOptions ขณะเปิดไฟล์ต้นฉบับหรือเป้าหมาย:

LoadOptions loadOptions = new LoadOptions("your_password");
try (Comparer comparer = new Comparer("protected_document.docx", loadOptions)) {
    // Process password‑protected document
}

วิธีเปรียบเทียบไฟล์ที่ป้องกันด้วยรหัสผ่านใน Java

ไฟล์ที่ป้องกันด้วยรหัสผ่านเป็นเรื่องปกติในอุตสาหกรรมที่ต้องการการควบคุมอย่างเข้มงวด โดยการส่งรหัสผ่านผ่าน LoadOptions คุณจะยังคงกระบวนการเปรียบเทียบได้โดยไม่ต้องเปลี่ยนแปลงโค้ดหลัก จำเป็นต้องเก็บรหัสผ่านใน vault หรือ environment variable แทนการ hard‑code

วิธีจัดการเอกสารขนาดใหญ่ใน Java

เมื่อเอกสารมีขนาดหลายร้อยเมกะไบต์ คุณอาจเจอการประมวลผลช้า หรือการใช้หน่วยความจำสูง เพื่อลดผลกระทบ:

  • เพิ่มขนาด heap ของ JVM (-Xmx) โดยเฉพาะงาน batch
  • เปิดใช้ streaming หากเป็นไปได้ – GroupDocs.Comparison ประมวลผลไฟล์เป็นชิ้นส่วนภายในแล้ว แต่คุณยังสามารถลดการใช้หน่วยความจำได้โดยไม่โหลดไฟล์ทั้งหมดเข้าสู่ memory
  • รันการเปรียบเทียบแบบ asynchronous (ดูตัวอย่าง async ด้านบน) เพื่อให้ UI ตอบสนองได้
  • แยก PDF ขนาดใหญ่ออกเป็นส่วนย่อย หากโลจิกธุรกิจอนุญาต

การรวมกับ Spring Boot

สำหรับนักพัฒนาที่สร้าง microservice ให้ห่อหุ้มตรรกะการเปรียบเทียบไว้ใน Spring service bean:

@Service
public class DocumentComparisonService {
    
    public ComparisonResult compareDocuments(String source, String target) {
        try (Comparer comparer = new Comparer(source)) {
            comparer.add(target);
            Path result = comparer.compare("output.docx",
                new SaveOptions.Builder()
                    .setCloneMetadataType(MetadataType.SOURCE)
                    .build());
            return new ComparisonResult(result);
        }
    }
}

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

Q: สามารถเปรียบเทียบมากกว่าสองเอกสารพร้อมกันได้หรือไม่?
A: แน่นอน! เพิ่มเอกสารเป้าหมายหลายไฟล์ด้วย comparer.add() ก่อนเรียกทำการเปรียบเทียบ

Q: GroupDocs.Comparison รองรับฟอร์แมตไฟล์ใดบ้าง?
A: รองรับ DOCX, PDF, XLSX, PPTX, TXT และอื่น ๆ อีกหลายรูปแบบ ดูรายการเต็มในเอกสารอย่างเป็นทางการ

Q: จะจัดการไฟล์ที่ป้องกันด้วยรหัสผ่านอย่างไร?
A: ใช้คลาส LoadOptions เพื่อส่งรหัสผ่านเมื่อสร้างอินสแตนซ์ Comparer (ดูตัวอย่างด้านบน)

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

Q: จะเพิ่มประสิทธิภาพสำหรับเอกสารขนาดใหญ่ได้อย่างไร?
A: เพิ่ม heap (-Xmx), ประมวลผลแบบ asynchronous, ทำเป็น batch, และ reuse Comparer เมื่อเหมาะสม

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


Last Updated: 2026-02-23
Tested With: GroupDocs.Comparison 25.2
Author: GroupDocs