จัดการวัตถุ Ink ในการนำเสนอ PowerPoint ด้วย PHP

บทนำ

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

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

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

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

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

ink_powerpoint1

Ink Traces

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

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

ink_powerpoint2

Brush Properties for Drawing

Brush ใช้วาดเส้นที่เชื่อมจุดของ Ink trace Brush มีสีและขนาดของตัวเอง แสดงด้วยเมธอด InkBrush.getColor และ InkBrush.getSize

Set Ink Brush Color

โค้ด PHP นี้แสดงวิธีตั้งค่าสีของ Ink brush:

$presentation = new Presentation("pres.pptx");
try {
    $slide = $presentation->getSlides()->get_Item(0);
    $ink = $slide->getShapes()->get_Item(0);
    $brush = $ink->getTraces()[0]->getBrush();
    $brush->setColor(java("java.awt.Color")->RED);
} finally {
    $presentation->dispose();
}

Set Ink Brush Size

โค้ด PHP นี้แสดงวิธีตั้งค่าขนาดของ Ink brush:

$presentation = new Presentation("pres.pptx");
try {
    $slide = $presentation->getSlides()->get_Item(0);
    $ink = $slide->getShapes()->get_Item(0);
    $brush = $ink->getTraces()[0]->getBrush();
    $brushSize = new Java("java.awt.Dimension", 5, 10);
    $brush->setSize($brushSize);
} finally {
    $presentation->dispose();
}

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

ink_powerpoint3

เพื่อความชัดเจน ให้เพิ่มความสูงของวัตถุ Ink และตรวจสอบมิติสำคัญ:

ink_powerpoint4

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

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

ink_powerpoint5

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

ink_powerpoint6

Control Ink Appearance During Export and Rendering

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

ตัวเลือก Ink สามารถกำหนดได้ผ่านตัวเลือกการส่งออกหรือเรนเดอร์สำหรับหลายรูปแบบผลลัพธ์:

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

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

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

Hide Ink Objects in PDF Output

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

ตัวอย่าง PHP ต่อไปนี้ส่งออกงานนำเสนอเป็น PDF พร้อมซ่อนวัตถุ Ink ทั้งหมด:

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

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

Hide Ink Objects When Rendering a Slide as an Image

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

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

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

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

Control Ink Mask Rendering

การตั้งค่า InkOptions.getInterpretMaskOpAsOpacity ควบคุมวิธีตีความการดำเนินการมาสก์เมื่อเรนเดอร์ brush ของ Ink ค่าเริ่มต้นคือ true (ใช้ความทึบแสง) หากต้องการใช้การดำเนินการ ROP ให้เรียก InkOptions.setInterpretMaskOpAsOpacity ด้วย false

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

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

    $outputStream = new Java("java.io.FileOutputStream", "slide.svg");
    try {
        $slide = $presentation->getSlides()->get_Item(0);
        $slide->writeAsSvg($outputStream, $svgOptions);
    } finally {
        $outputStream->close();
    }
} finally {
    $presentation->dispose();
}

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

Choose Whether to Hide or Preserve Ink

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

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

FAQ

Can I change the color or size of an existing ink stroke?

ได้ คุณสามารถดึง trace จาก Ink.getTraces แล้วเปลี่ยน InkTrace.getBrush เรียก InkBrush.setColor หรือ InkBrush.setSize เพื่อเปลี่ยน brush

Does hiding ink change the source presentation?

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

Which export formats support ink options?

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

Further reading