จัดการวัตถุปากกาในงานนำเสนอด้วย Java

บทนำ

PowerPoint มีคุณสมบัติปากกา (ink) ที่ช่วยให้คุณวาดเส้นแบบอิสระได้ ปากกาสามารถใช้เพื่อเน้นวัตถุอื่น ๆ แสดงการเชื่อมต่อและกระบวนการ และดึงความสนใจไปยังรายการเฉพาะบนสไลด์

Aspose.Slides มีประเภทที่จำเป็นสำหรับทำงานกับวัตถุปากกา ตัวอย่างเช่น อินเทอร์เฟซ IInk แสดงวัตถุปากกาบนสไลด์

ความแตกต่างระหว่างวัตถุปกติและวัตถุปากกา

วัตถุบนสไลด์ PowerPoint มักจะแทนด้วยวัตถุรูปร่าง (shape) ในรูปแบบที่ง่ายที่สุด รูปร่างเป็นคอนเทนเนอร์ที่กำหนดพื้นที่ของวัตถุเอง (กรอบ) พร้อมคุณสมบัติเช่น ขนาดคอนเทนเนอร์ รูปร่าง และพื้นหลัง ดูข้อมูลเพิ่มเติมที่ Shape Layout Format

อย่างไรก็ตาม เมื่อ PowerPoint จัดการวัตถุปากกา จะละเลยคุณสมบัติต่าง ๆ ของกรอบวัตถุ (คอนเทนเนอร์) ยกเว้นขนาด ขนาดของพื้นที่คอนเทนเนอร์จะกำหนดโดยเมธอดมาตมาตรฐาน IShape.getWidth และ IShape.getHeight :

ink_powerpoint1

รอยปากกา

รอยปากกาเป็นองค์ประกอบพื้นฐานที่ใช้บันทึกลำดับการเคลื่อนที่ของปากกาเมื่อผู้ใช้เขียนปากกาดิจิทัล รอยปากกาเก็บลำดับของจุดที่เชื่อมต่อกัน

รูปแบบการเข้ารหัสที่ง่ายที่สุดระบุพิกัด X และ Y ของแต่ละจุดตัวอย่าง เมื่อจุดที่เชื่อมต่อทั้งหมดถูกเรนเดอร์ จะได้ภาพเช่นนี้:

ink_powerpoint2

คุณสมบัติของแปรงสำหรับการวาด

แปรงใช้ในการวาดเส้นที่เชื่อมต่อจุดของรอยปากกา แปรงมีสีและขนาดของตัวเอง ซึ่งแสดงโดยเมธอด IInkBrush.getColor และ IInkBrush.getSize.

ตั้งค่าสีแปรงปากกา

โค้ด Java นี้แสดงวิธีตั้งค่าสีของแปรงปากกา:

import com.aspose.slides.*;
import java.awt.Color;

Presentation presentation = new Presentation("pres.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    IInk ink = (IInk) slide.getShapes().get_Item(0);
    IInkBrush brush = ink.getTraces()[0].getBrush();
    brush.setColor(Color.RED);
} finally {
    presentation.dispose();
}

ตั้งค่าขนาดแปรงปากกา

โค้ด Java นี้แสดงวิธีตั้งค่าขนาดของแปรงปากกา:

import com.aspose.slides.*;
import java.awt.Dimension;

Presentation presentation = new Presentation("pres.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    IInk ink = (IInk) slide.getShapes().get_Item(0);
    IInkBrush brush = ink.getTraces()[0].getBrush();
    Dimension brushSize = new Dimension(5, 10);
    brush.setSize(brushSize);
} finally {
    presentation.dispose();
}

โดยทั่วไป ความกว้างและความสูงของแปรงไม่ตรงกัน ดังนั้น PowerPoint จะไม่แสดงขนาดของแปรง (ส่วนข้อมูลที่เกี่ยวข้องจะแสดงเป็นสีเทา) เมื่อความกว้างและความสูงของแปรงตรงกัน PowerPoint จะแสดงขนาดดังนี้:

ink_powerpoint3

เพื่อความชัดเจน เราจะเพิ่มความสูงของวัตถุปากกาและตรวจสอบมิติที่สำคัญ:

ink_powerpoint4

คอนเทนเนอร์ (กรอบ) ไม่คำนึงถึงขนาดของแปรง—มันสมมติว่าความหนาของเส้นเป็นศูนย์เสมอ (ดูภาพก่อนหน้า)

ดังนั้น เพื่อกำหนดพื้นที่ที่มองเห็นได้ของวัตถุปากกาโดยรวม จำเป็นต้องคำนึงถึงขนาดของแปรงในรอยปากกา ที่นี่ วัตถุเป้าหมาย (รอยปากข้อความที่เขียนด้วยมือ) ถูกสเกลให้ตรงกับขนาดของคอนเทนเนอร์ (กรอบ) เมื่อขนาดของคอนเทนเนอร์เปลี่ยนแปลง ขนาดของแปรงจะคงที่ และในทางกลับกัน

ink_powerpoint5

PowerPoint ใช้พฤติกรรมคล้ายกันสำหรับวัตถุข้อความ:

ink_powerpoint6

การควบคุมการแสดงผลปากกาในการส่งออกและการเรนเดอร์

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

ตัวเลือกปากกาพร้อมใช้งานผ่านตัวเลือกการส่งออกหรือการเรนเดอร์สำหรับหลายประเภทของผลลัพธ์:

ผลลัพธ์ คุณสมบัติตัวเลือกปากกา
PDF PdfOptions.getInkOptions
HTML HtmlOptions.getInkOptions
SVG SVGOptions.getInkOptions
TIFF TiffOptions.getInkOptions
Slide image RenderingOptions.getInkOptions

เมธอด IInkOptions ต่อไปนี้เปิดเผยการตั้งค่าสองอย่างเดียวกัน:

  • IInkOptions.getHideInk กำหนดว่าจะรวมวัตถุปากกาไว้ในผลลัพธ์หรือไม่ ค่าเริ่มต้นคือ false
  • IInkOptions.getInterpretMaskOpAsOpacity กำหนดว่าการทำงานมาสก์จะถูกตีความเป็นความทึบเมื่อเรนเดอร์แปรงปากกา ค่าเริ่มต้นคือ true; เรียก IInkOptions.setInterpretMaskOpAsOpacity ด้วย false เพื่อใช้การทำงาน ROP แทน

ซ่อนวัตถุปากกาในผลลัพธ์ PDF

โดยค่าเริ่มต้น วัตถุปากกาจะยังคงมองเห็นได้ระหว่างการส่งออก เพื่อสร้างผลลัพธ์ที่สะอาดโดยไม่มีหมายเหตุเขียนมือหรือเนื้อหาปากกาอื่น ๆ ให้เรียก IInkOptions.setHideInk ด้วย true

ตัวอย่าง Java ด้านล่างส่งออกการนำเสนอเป็น PDF โดยซ่อนวัตถุปากกาทั้งหมด:

import com.aspose.slides.*;

Presentation presentation = new Presentation("presentation.pptx");
try {
    PdfOptions pdfOptions = new PdfOptions();
    pdfOptions.getInkOptions().setHideInk(true);

    presentation.save("presentation_without_ink.pdf", SaveFormat.Pdf, pdfOptions);
} finally {
    presentation.dispose();
}

ซ่อนวัตถุปากกาเมื่อเรนเดอร์สไลด์เป็นภาพ

เพื่อซ่อนวัตถุปากกาเมื่อเรนเดอร์สไลด์เป็นภาพบิตแมพ ให้กำหนดค่า RenderingOptions.getInkOptions แล้วส่งผ่านตัวเลือกการเรนเดอร์ไปยัง ISlide.getImage

ตัวอย่าง Java ด้านล่างเรนเดอร์สไลด์แรกเป็นภาพ PNG โดยไม่มีวัตถุปากกา:

import com.aspose.slides.*;

Presentation presentation = new Presentation("presentation.pptx");
try {
    RenderingOptions renderingOptions = new RenderingOptions();
    renderingOptions.getInkOptions().setHideInk(true);

    ISlide slide = presentation.getSlides().get_Item(0);
    IImage image = slide.getImage(renderingOptions);
    try {
        image.save("slide_without_ink.png", ImageFormat.Png);
    } finally {
        image.dispose();
    }
} finally {
    presentation.dispose();
}

ควบคุมการเรนเดอร์มาสก์ปากกา

การตั้งค่า IInkOptions.getInterpretMaskOpAsOpacity ควบคุมว่าการทำงานมาสก์จะถูกตีความอย่างไรเมื่อเรนเดอร์แปรงปากกา ค่าเริ่มต้นคือ true ซึ่งใช้ความทึบ เพื่อใช้การทำงาน ROP แทน ให้เรียก IInkOptions.setInterpretMaskOpAsOpacity ด้วย false

ตัวอย่าง Java ด้านล่างส่งออกสไลด์เป็น SVG และใช้การเรนเดอร์แบบ ROP สำหรับการทำงานมาสก์ปากกา:

import com.aspose.slides.*;
import java.io.FileOutputStream;
import java.io.IOException;

Presentation presentation = new Presentation("presentation.pptx");
try {
    SVGOptions svgOptions = new SVGOptions();
    svgOptions.getInkOptions().setInterpretMaskOpAsOpacity(false);

    FileOutputStream stream = new FileOutputStream("slide.svg");
    ISlide slide = presentation.getSlides().get_Item(0);
    slide.writeAsSvg(stream, svgOptions);
} finally {
    presentation.dispose();
}

การตั้งค่าเดียวกันสามารถใช้ผ่าน TiffOptions.getInkOptions เมื่อส่งออกการนำเสนอหรือเรนเดอร์สไลด์เป็น TIFF

เลือกว่าจะซ่อนหรือรักษาปากกา

เมื่อคุณต้องการเวอร์ชันที่สะอาดของการนำเสนอที่มีหมายเหตุสำหรับการกระจายโดยไม่มีเครื่องหมายการตรวจสอบ ให้เรียก IInkOptions.setHideInk ด้วย true ในระหว่างการส่งออก

ให้ IInkOptions.getHideInk มีค่าเริ่มต้นเป็น false เมื่อหมายเหตุปากกาเป็นส่วนหนึ่งของเนื้อหาที่ต้องการ เช่น ความคิดเห็นการตรวจสอบ โน้ตเขียนมือ ไฮไลท์ หรือการวาดที่ควรมองเห็นในผลลัพธ์ที่ส่งออก ซึ่งช่วยให้แอปพลิเคชันสร้างผลลัพธ์การตรวจสอบและผลลัพธ์สุดท้ายที่แยกจากกันจากการนำเสนอเดียวโดยไม่ต้องแก้ไขวัตถุปากกาในแหล่งข้อมูล

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

ฉันสามารถเปลี่ยนสีหรือขนาดของเส้นปากกาที่มีอยู่ได้หรือไม่?

ได้. เรียกรอยจาก IInk.getTraces จากนั้นเปลี่ยน IInkTrace.getBrush. เรียก IInkBrush.setColor หรือ IInkBrush.setSize เพื่อเปลี่ยนแปรง

การซ่อนปากกาจะเปลี่ยนแปลงการนำเสนอแหล่งต้นฉบับหรือไม่?

ไม่. การเรียก IInkOptions.setHideInk มีผลเฉพาะต่อผลลัพธ์ที่เรนเดอร์หรือส่งออก; มันไม่ได้ลบหรือแก้ไขวัตถุปากกาในการนำเสนอแหล่งต้นฉบับ

รูปแบบการส่งออกใดบ้างที่สนับสนุนตัวเลือกปากกา?

คุณสามารถกำหนดค่าตัวเลือกปากกาได้สำหรับ PDF, HTML, SVG, TIFF และภาพสไลด์แบบบิตแมพผ่านตัวเลือกการส่งออกหรือการเรนเดอร์ที่เกี่ยวข้องที่แสดงข้างต้น

อ่านเพิ่ม