แปลงเอกสารเป็นภาพด้วย GroupDocs.Watermark Java

การสร้างภาพตัวอย่างที่มีขนาดเบาของเอกสารหลายหน้าเป็นความต้องการทั่วไปสำหรับพอร์ทัล, ระบบการจัดการเนื้อหา, และบริการจัดเก็บข้อมูลบนคลาวด์ โดย convert document to image คุณจะมอบสัญญาณภาพที่รวดเร็วให้ผู้ใช้โดยไม่ต้องโหลดไฟล์เต็มไปรวม ทั้งนี้ไลบรารี GroupDocs.Watermark Java ไม่เพียงเพิ่มลายน้ำแต่ยังให้เครื่องยนต์ตัวอย่างที่มีประสิทธิภาพสูงที่สามารถ java generate thumbnails สำหรับทุกหน้าภายในหนึ่งรอบ

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

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

  • ขั้นตอนแรกคืออะไร? เพิ่มการพึ่งพา Maven ของ GroupDocs.Watermark และเริ่มต้น Watermarker ด้วยเส้นทางไฟล์ต้นฉบับ.
  • ภาพตัวอย่างถูกสร้างอย่างไร? Implement ICreatePageStream เพื่อเปิด output stream สำหรับแต่ละหน้า, จากนั้นเรียก generatePreview() พร้อมตัวเลือกที่เหมาะสม.
  • ฉันต้องการใบอนุญาตหรือไม่? รุ่นทดลองทำงานได้สำหรับสถานการณ์พื้นฐาน, แต่ใบอนุญาตเต็มจะลบลายน้ำและเปิดใช้งานการประมวลผลแบบแบตช์.
  • ฉันสามารถประมวลผล PDF ที่มีหน้ามากกว่า 200 หน้าได้หรือไม่? ได้ – ไลบรารีสตรีมหน้าต่าง ๆ ทำให้การใช้หน่วยความจำต่ำแม้ไฟล์ 500 หน้า.
  • รูปแบบภาพที่รองรับคืออะไร? PNG, JPEG, BMP, และ TIFF มีให้ใช้โดยตรง.

convert document to image คืออะไร?

วลี convert document to image อธิบายกระบวนการเรนเดอร์แต่ละหน้าของไฟล์ต้นฉบับ (PDF, DOCX, PPTX ฯลฯ) ให้เป็นภาพแรสเตอร์ เช่น PNG หรือ JPEG การแปลงนี้มีประโยชน์สำหรับแกลเลอรี์รูปย่อ, แผงตัวอย่าง, และตัวดูเอกสารที่เหมาะกับมือถือ

ทำไมต้องใช้ GroupDocs.Watermark สำหรับการสร้างตัวอย่าง?

GroupDocs.Watermark รองรับ 30+ รูปแบบอินพุต และสามารถสร้างตัวอย่างสำหรับเอกสารได้ถึง 500 หน้า โดยไม่ต้องโหลดไฟล์ทั้งหมดเข้าสู่หน่วยความจำ ภายในจะประมวลผลหน้าแบบต่อเนื่อง ทำให้การใช้ heap ของ Java ต่ำกว่า 50 MB แม้สำหรับ PDF ขนาดใหญ่ ไลบรารียังมีการปรับรูปภาพในตัว, ให้คุณระบุ DPI, ความลึกสี, และระดับการบีบอัด, ซึ่งทำให้รูปย่อโดยทั่วไป เล็กลง 70 % เมื่อเทียบกับการเรนเดอร์แบบธรรมดา

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

ก่อนเริ่ม, โปรดตรวจสอบว่าคุณมีสิ่งต่อไปนี้:

  • Java Development Kit (JDK) 11 หรือใหม่กว่า – ไลบรารีคอมไพล์สำหรับ Java 8+, แต่ JDK 11 ให้การสนับสนุนระยะยาวและประสิทธิภาพที่ดีกว่า.
  • Maven 3.6+ – สำหรับการจัดการการพึ่งพา.
  • GroupDocs.Watermark for Java เวอร์ชัน 24.11 – รุ่นเสถียรล่าสุด ณ เวลาที่เขียน.
  • ความรู้พื้นฐานเกี่ยวกับ Java I/O streams – คุณจะต้องสร้างอ็อบเจ็กต์ FileOutputStream สำหรับแต่ละหน้าตัวอย่าง.
  • คีย์ใบอนุญาต (ไม่บังคับสำหรับการผลิต) – รุ่นทดลองจำกัดขนาดตัวอย่างที่ 5 MB ต่อเอกสาร.

วิธีตั้งค่า GroupDocs.Watermark สำหรับ Java

เพื่อกำหนดค่า GroupDocs.Watermark, ก่อนอื่นให้เพิ่มรีโพซิทอรี Maven แล้วใส่ไลบรารีเป็นการพึ่งพาใน pom.xml ของโปรเจกต์ของคุณ ซึ่งจะทำให้ Maven ดาวน์โหลดอาร์ติแฟกต์ที่ถูกต้องและทำให้คลาสพร้อมใช้งานบน classpath สำหรับการคอมไพล์และรันไทม์

เพิ่มการพึ่งพา Maven

ไลบรารีจัดจำหน่ายผ่าน Maven Central. เพิ่มโค้ดสแนปด้านล่างนี้ใน pom.xml ของคุณภายในบล็อก <dependencies>:

<dependency>
    <groupId>com.groupdocs</groupId>
    <artifactId>groupdocs-watermark</artifactId>
    <version>24.11</version>
</dependency>

Pro tip: เก็บหมายเลขเวอร์ชันใน property (<groupdocs.watermark.version>24.11</groupdocs.watermark.version>) เพื่อให้คุณอัปเกรดได้ง่าย

ดาวน์โหลดโดยตรง (ทางเลือก)

หากคุณต้องการติดตั้งด้วยตนเอง, สามารถดาวน์โหลด JAR จากหน้า releases อย่างเป็นทางการ: GroupDocs.Watermark for Java releases.

วิธีรับและใช้ใบอนุญาต

การใช้ใบอนุญาตกับ GroupDocs.Watermark จะลบข้อจำกัดของรุ่นทดลองและปิดการแสดงลายน้ำเริ่มต้น วางไฟล์ใบอนุญาตในตำแหน่งที่รู้จักและชี้ API ไปที่ไฟล์นั้น, หรือฝังพาธใบอนุญาตโดยตรงในโค้ดก่อนเรียกใช้ API ใด ๆ หลังจากโหลดแล้ว, การดำเนินการทั้งหมดต่อไปจะทำงานในโหมดเต็มฟีเจอร์

คุณสามารถ:

  • ขอทดลองใช้งานฟรี จากพอร์ทัล GroupDocs – จะให้ไฟล์ใบอนุญาต 30‑วัน.
  • สร้างใบอนุญาตชั่วคราว ผ่านเครื่องมือสร้างใบอนุญาตออนไลน์สำหรับสภาพแวดล้อมการประเมิน.
  • ซื้อใบอนุญาตเชิงพาณิชย์ เพื่อการใช้งานผลิตภัณฑ์ไม่จำกัดและรับการสนับสนุนระดับพรีเมียม.

วางไฟล์ใบอนุญาต (GroupDocs.Watermark.lic) ไว้ที่รูทของโปรเจกต์หรือระบุพาธโดยโปรแกรมด้วย Watermarker.setLicense("path/to/license.file").

วิธีเริ่มต้น Watermarker

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

คลาส Watermarker เป็นออบเจ็กต์หลักของ GroupDocs.Watermark ที่โหลดเอกสารและเปิดเผยการดำเนินการต่าง ๆ เช่น การแทรกลายน้ำและการสร้างตัวอย่าง.

Watermarker watermarker = new Watermarker("YOUR_DOCUMENT_DIRECTORY/diagram.vdx");
  • inputDocumentPath – พาธแบบ absolute หรือ relative ไปยังไฟล์ต้นฉบับ.
  • ตัวสร้างตรวจสอบรูปแบบไฟล์และเตรียม parser ภายใน.

Definition anchor: Watermarker คือจุดเริ่มต้นสำหรับการประมวลผลเอกสารทั้งหมดใน GroupDocs.Watermark for Java.

วิธีสร้างสตรีมหน้าสำหรับการสร้างตัวอย่าง

สร้างสตรีมหน้าที่กำหนดเองโดยการ implement อินเทอร์เฟซ ICreatePageStream, ซึ่งไลบรารีจะเรียกใช้สำหรับแต่ละหน้าที่เรนเดอร์ การทำงานของคุณควรสร้าง OutputStream ใหม่—โดยทั่วไปเป็น FileOutputStream—ที่ชี้ไปยังไฟล์ที่มีชื่อเฉพาะตามหมายเลขหน้า วิธีนี้จะแยกเอาต์พุตของแต่ละหน้าและป้องกันการทับซ้อนของข้อมูล

เพื่อ java generate thumbnails, คุณต้องให้สตรีมสำหรับแต่ละหน้าที่ภาพที่เรนเดอร์จะถูกเขียนลงไป Implement อินเทอร์เฟซ ICreatePageStream; ไลบรารีจะเรียกการทำงานของคุณสำหรับทุกหน้าที่ประมวลผล

public class FeatureCreatePageStream implements ICreatePageStream {
    private final String outputDir;
    private final String fileNameTemplate; // e.g. "preview_page_{0}.png"

    public FeatureCreatePageStream(String outputDir, String fileNameTemplate) {
        this.outputDir = outputDir;
        this.fileNameTemplate = fileNameTemplate;
    }

    @Override
    public OutputStream createPageStream(int pageNumber) throws IOException {
        String fileName = fileNameTemplate.replace("{0}", String.valueOf(pageNumber));
        return new FileOutputStream(Paths.get(outputDir, fileName).toFile());
    }
}
  • fileNameTemplate ช่วยให้คุณฝังหมายเลขหน้าโดยตรงในชื่อไฟล์, ทำให้การประมวลผลแบบแบตช์ทำได้ง่าย.
  • เมธอดจะคืน OutputStream ใหม่สำหรับแต่ละหน้า, เพื่อให้แน่ใจว่าหน้าก่อนหน้าไม่รบกวนการเขียนของหน้าถัดไป.

Definition anchor: ICreatePageStream เป็นอินเทอร์เฟซ callback ที่ให้คุณกำหนดวิธีการสร้าง output stream สำหรับแต่ละหน้าตัวอย่าง.

วิธีปล่อยสตรีมหน้าหลังการสร้างตัวอย่าง

หลังจากเขียนภาพหน้าสำเร็จ, ไลบรารีจะเรียก IReleasePageStream เพื่อให้คุณปิดและทำความสะอาดสตรีมที่เกี่ยวข้อง Implement callback นี้เพื่อปิดไฟล์แฮนด์เดิล, flush buffer, และทำการบันทึกเพิ่มเติม การทำความสะอาดที่เหมาะสมจะป้องกันการรั่วของ descriptor และทำให้หน้าถัดไปสามารถประมวลผลได้โดยไม่มีปัญหา

การทำความสะอาดทรัพยากรอย่างถูกต้องช่วยป้องกันการรั่วของไฟล์แฮนด์เดิลและทำให้ JVM ไม่หมด descriptor. Implement IReleasePageStream เพื่อปิดสตรีมเมื่อไลบรารีสัญญาณว่าหน้านั้นเสร็จแล้ว

public class FeatureReleasePageStream implements IReleasePageStream {
    @Override
    public void releasePageStream(OutputStream stream) throws IOException {
        stream.close();
    }
}

Definition anchor: IReleasePageStream เป็นอินเทอร์เฟซ callback ที่ให้คุณกำหนดตรรกะการทำลายทรัพยากร output เฉพาะหน้าที่คุณต้องการ.

วิธีสร้างตัวอย่างเอกสาร (convert document to image)

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

เมื่อ Watermarker, FeatureCreatePageStream, และ FeatureReleasePageStream พร้อม, คุณสามารถเรียก engine ตัวอย่างได้ เมธอด generatePreview() จะวนลูปแต่ละหน้า, เรียกตัวสร้างสตรีมของคุณ, เขียนภาพ, และสุดท้ายปล่อยสตรีม

Watermarker watermarker = new Watermarker("YOUR_DOCUMENT_DIRECTORY/diagram.vdx");
ICreatePageStream createPageStream = new FeatureCreatePageStream("output/previews", "preview_page_{0}.png");
IReleasePageStream releasePageStream = new FeatureReleasePageStream();

PreviewOptions previewOptions = new PreviewOptions();
previewOptions.setResolution(150); // DPI, higher = sharper but larger files
previewOptions.setImageFormat(ImageFormat.Png); // PNG is lossless and web‑friendly

watermarker.generatePreview(previewOptions, createPageStream, releasePageStream);
  • Resolution ควบคุม DPI; 150 DPI เป็นสมดุลที่ดีสำหรับรูปย่อบนเว็บ.
  • ImageFormat สามารถเป็น PNG, JPEG, BMP หรือ TIFF ตามความต้องการของระบบต่อไป.
  • เมธอดประมวลผลหน้าแบบต่อเนื่อง, ทำให้การใช้หน่วยความจำต่ำแม้กับเอกสารที่มีหลายร้อยหน้า.

Definition anchor: generatePreview() คือการเรียก API ที่เรนเดอร์แต่ละหน้าของเอกสารที่โหลดเป็นภาพโดยใช้สตรีมที่คุณจัดเตรียมไว้.

การใช้งานจริงของ convert document to image

การสร้างภาพตัวอย่างเปิดโอกาสหลายอย่าง:

  1. เบราว์เซอร์เอกสาร – แสดงกริดของรูปย่อ PNG เพื่อให้ผู้ใช้สามารถสแกน PDF ขนาดใหญ่ได้โดยไม่ต้องเปิดไฟล์.
  2. สแนปช็อตผลการค้นหา – แนบภาพตัวอย่างกับรายการดัชนีการค้นหาเพื่อ UI ที่สมบูรณ์ยิ่งขึ้น.
  3. ไฟล์แนบอีเมล – ฝังภาพตัวอย่างขนาดเล็กของ PDF ที่แนบในเนื้อหาอีเมล.
  4. แอปมือถือ – ลดแบนด์วิธโดยส่งรูปย่อ PNG ขนาด 200 KB แทน PDF เต็ม.
  5. พอร์ทัลการปฏิบัติตาม – แสดงเวอร์ชันที่มีลายน้ำของสัญญาเป็นภาพสำหรับการตรวจสอบตามข้อกำหนด.

ข้อควรพิจารณาด้านประสิทธิภาพเมื่อคุณ java generate thumbnails

เมื่อทำการประมวลผลเป็นกลุ่ม, ควรคำนึงถึงเคล็ดลับการเพิ่มประสิทธิภาพต่อไปนี้:

  • การบัฟเฟอร์สตรีม – ห่อ FileOutputStream ด้วย BufferedOutputStream เพื่อลด I/O บนดิสก์.
  • การประมวลผลแบบขนาน – ใช้ ForkJoinPool ของ Java เพื่อประมวลผลหลายเอกสารพร้อมกัน; แต่ละงานควรสร้างอินสแตนซ์ Watermarker ของตนเองเพื่อหลีกเลี่ยงปัญหา thread‑safety.
  • จำกัด DPI สำหรับรูปย่อ – 72–150 DPI เพียงพอสำหรับ UI ส่วนใหญ่; DPI สูงควรสงวนไว้สำหรับตัวอย่างที่พร้อมพิมพ์.
  • ใช้ใบอนุญาตซ้ำ – โหลดไฟล์ใบอนุญาตเพียงครั้งเดียวต่อ JVM เพื่อลดภาระ.
  • ตรวจสอบหน่วยความจำ – ไลบรารีเก็บเฉพาะหน้าปัจจุบันในหน่วยความจำ. สำหรับไฟล์ใหญ่มาก, พิจารณาเพิ่ม heap ของ JVM เล็กน้อย (เช่น -Xmx512m) เพื่อรองรับสปายค์ที่อาจเกิดขึ้น.

ข้อผิดพลาดทั่วไปและวิธีหลีกเลี่ยง

อาการสาเหตุที่เป็นไปได้วิธีแก้
OutOfMemoryError ระหว่างการสร้างตัวอย่างใช้ ImageFormat.Jpeg ที่ 300 DPI กับ PDF 1000 หน้าลด DPI หรือสลับเป็น PNG ที่ความลึกสีต่ำกว่า
ไฟล์ตัวอย่างว่างเปล่าFeatureCreatePageStream คืน FileOutputStream เดียวกันสำหรับทุกหน้าตรวจสอบให้สร้างสตรีมใหม่สำหรับแต่ละ pageNumber
รูปตัวอย่างหมุนผิดPDF ต้นฉบับมีเมตาดาต้าการหมุนที่ไม่ได้รับการเคารพเรียก previewOptions.setRotatePages(true) (หากมี)
คำเตือนใบอนุญาตปรากฏไม่พบไฟล์ใบอนุญาตหรือพาธไม่ถูกต้องตรวจสอบว่า Watermarker.setLicense("path/to/license.file") ทำงานก่อนการเรียก API ใด ๆ

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

Q: ฉันสามารถสร้างตัวอย่างสำหรับ PDF ที่มีการป้องกันด้วยรหัสผ่านได้หรือไม่?
A: ได้. ส่งรหัสผ่านไปยังคอนสตรัคเตอร์ Watermarker: new Watermarker("file.pdf", "password").

Q: รูปแบบภาพใดบ้างที่รองรับสำหรับผลลัพธ์ตัวอย่าง?
A: มี PNG, JPEG, BMP, และ TIFF ให้เลือก. แนะนำให้ใช้ PNG สำหรับรูปย่อที่ไม่มีการสูญเสียคุณภาพ.

Q: สามารถประมวลผลได้กี่หน้าต่อการเรียกครั้งเดียว?
A: ไลบรารีไม่มีขีดจำกัดคงที่; คุณสามารถสร้างตัวอย่างเอกสารที่มีหลายพันหน้าได้, จำกัดเพียงพื้นที่จัดเก็บและอัตราการ I/O.

Q: ฉันต้องการใบอนุญาตแยกต่างหากสำหรับแต่ละอินสแตนซ์ของเซิร์ฟเวอร์หรือไม่?
A: ไฟล์ใบอนุญาตเดียวสามารถใช้ซ้ำได้หลายอินสแตนซ์ ตราบใดที่การใช้งานรวมสอดคล้องกับเงื่อนไขของใบอนุญาต.

Q: มีวิธีสร้างรูปย่อรวมเดียว (เช่น หน้าแรกเท่านั้น) หรือไม่?
A: มี. ตั้งค่า previewOptions.setPages(new int[]{1}) เพื่อจำกัดการสร้างเฉพาะหน้าแรก.

สรุป

คุณมีเวิร์กโฟลว์ที่พร้อมใช้งานในระดับผลิตสำหรับ convert document to image และ java generate thumbnails ด้วย GroupDocs.Watermark. ด้วยการกำหนดตัวจัดการสตรีมหน้าที่กำหนดเอง, คุณจะรักษาการใช้หน่วยความจำให้ต่ำ, และโดยการปรับ PreviewOptions คุณสามารถควบคุมคุณภาพภาพและขนาดไฟล์ เทคนิคเหล่านี้ช่วยให้คุณฝังตัวอย่างที่เร็วและคุณภาพสูงลงในแอปพลิเคชัน Java ใด ๆ — ไม่ว่าจะเป็นพอร์ทัลเว็บ, ไคลเอนต์เดสก์ท็อป, หรือไมโครเซอร์วิสคลาวด์‑เนทีฟ


Last Updated: 2026-09-26
Tested With: GroupDocs.Watermark 24.11 for Java
Author: GroupDocs

<repositories>
   <repository>
      <id>repository.groupdocs.com</id>
      <name>GroupDocs Repository</name>
      <url>https://releases.groupdocs.com/watermark/java/</url>
   </repository>
</repositories>

<dependencies>
   <dependency>
      <groupId>com.groupdocs</groupId>
      <artifactId>groupdocs-watermark</artifactId>
      <version>24.11</version>
   </dependency>
</dependencies>
import com.groupdocs.watermark.Watermarker;

public class FeatureInitializeWatermarker {
    public static void main(String[] args) {
        String inputDocumentPath = "YOUR_DOCUMENT_DIRECTORY/diagram.vdx";
        
        // Initialize Watermarker with the specified document
        Watermarker watermarker = new Watermarker(inputDocumentPath);
        
        System.out.println("Watermarker initialized.");
    }
}
import java.io.FileOutputStream;
import com.groupdocs.watermark.options.ICreatePageStream;
import java.io.OutputStream;

public class FeatureCreatePageStream implements ICreatePageStream {
    private final String fileNameTemplate;

    public FeatureCreatePageStream(String outputDirectory) {
        this.fileNameTemplate = outputDirectory + "/page%s.png";
    }

    @Override
    public OutputStream createPageStream(int pageNumber) {
        String fileName = String.format(this.fileNameTemplate, pageNumber);
        try {
            return new FileOutputStream(fileName);
        } catch (Exception ex) 
        {
            throw new RuntimeException(ex);
        }
    }
}
import com.groupdocs.watermark.options.IReleasePageStream;
import java.io.OutputStream;

public class FeatureReleasePageStream implements IReleasePageStream {
    @Override
    public void releasePageStream(int pageNumber, OutputStream pageStream) {
        try 
        {
            pageStream.close();
        } catch (Exception ex)
        {
            throw new RuntimeException(ex);
        }
    }
}
import com.groupdocs.watermark.Watermarker;
import com.groupdocs.watermark.options.PreviewOptions;

public class FeatureGenerateDocumentPreview {
    public static void main(String[] args) {
        String inputDocumentPath = "YOUR_DOCUMENT_DIRECTORY/diagram.vdx";
        
        Watermarker watermarker = new Watermarker(inputDocumentPath);
        
        FeatureCreatePageStream createPageStream = new FeatureCreatePageStream("YOUR_OUTPUT_DIRECTORY");
        FeatureReleasePageStream releasePageStream = new FeatureReleasePageStream();
        
        PreviewOptions previewOptions = new PreviewOptions(createPageStream, releasePageStream);
        
        watermarker.generatePreview(previewOptions);
        
        watermarker.close();
    }
}

บทแนะนำที่เกี่ยวข้อง