บทความนี้ส่วนใหญ่แบ่งปันเนื้อหาที่เกี่ยวข้องเกี่ยวกับ Apache Poi ที่แปลง PPT เป็นรูปภาพ มันแนะนำ Apache Poi สั้น ๆ และเนื้อหาเฉพาะมีดังนี้
1. บทนำสู่ Apache Poi
Apache Poi เป็น Java API แบบข้ามแพลตฟอร์มฟรีและโอเพ่นซอร์สที่เขียนใน Java Apache Poi จัดเตรียมฟังก์ชั่นของโปรแกรม Java เพื่ออ่านและเขียนคลังเก็บรูปแบบ Microsoft Office
คุณสามารถดูเอกสารอย่างเป็นทางการเว็บไซต์อย่างเป็นทางการของ Apache Poi
มีสองวิธีในการใช้งานเอกสาร PPT ด้วย Apache Poi:
1. รูปแบบไฟล์ต่อท้ายของ PowerPoint '97 (-2007) ที่สอดคล้องกับ POI-HSLF คือ. ppt
2. รูปแบบไฟล์ต่อท้ายของ PowerPoint 2007 OoxML ที่สอดคล้องกับ poi-xslf คือ. pptx
2. แพ็คเกจ JAR
การดำเนินงาน POI ของสำนักงานต้องใช้แพ็คเกจ JAR:
POI-3.12.JAR POI-OOXML-3.12.JAR POI-OOXML-SCHEMAS-3.12.JAR POI-SCRATCHPAD-3.12.JAR XMLBEANS-2.0.0.JAR
วิธีการ maven แนะนำ:
วิธีการ Maven ต้องแนะนำสองอย่างเท่านั้นเพราะพวกเขาพึ่งพาคนอื่นหลายคน
<การพึ่งพา> <roupId> org.apache.poi </groupId> <ratifactid> poi-ooxml </artifactid> <sersion> 3.12 </version> </การพึ่งพาอาศัย> <การพึ่งพา> <roupid> org.apache.poi </groupid> <ratifactid>
3. วิธี POI-HSLF
วิธี POI-HSLF จัดการเอกสารที่ลงท้ายด้วย. pppt คำต่อท้ายของ ppt
/** * คำต่อท้ายการแปลงของเอกสาร PPT2003 คือ. ppt * @param pptfile ppt ไฟล์ * @param imgfile ไดเรกทอรีที่รูปภาพจะถูกบันทึก (ไม่ใช่ไฟล์) * @return */public boolean doppt2003toimage (ไฟล์ pptfile ไฟล์ imgfile FileInputStream (pptfile); slideshow ppt = slideshow ใหม่ (IS); // ปิดสตรีมอินพุตในเวลาคือ. close (); มิติ pgsize = ppt.getPagesize (); slide [] slide = ppt.getSlides () (int i = 0; "หน้า."); textrun [] truns = slide [i] .gettextruns (); สำหรับ (int k = 0; k <truns.length; k ++) {richtextrun [] rtruns = truns [k] .getRichtextruns (); rtruns [l] .getFontIndex (); ชื่อสตริง = rtruns [l] .getFontName (); log.info ("ดัชนีตัวอักษรดั้งเดิมและชื่อตัวอักษร:"+ดัชนี+" -"+ชื่อ); // รีเซ็ตดัชนีตัวอักษรและชื่อตัวอักษร rtruns [l] .setFontIndex (1); rtruns [l] .setFontName ("宋体");}} // สร้างภาพตามขนาดของสไลด์บัฟเฟอร์เมจ IMG = bufferedimage ใหม่ (pgsize.width, pgsize img.createGraphics (); graphics.setPaint (color.white); graphics.fill (ใหม่ rectangle2d.float (0, 0, pgsize.width, pgsize.height); slide [i] .draw (กราฟิก); ".jpeg"; ไฟล์ jpegfile = ไฟล์ใหม่ (AbsolutePath); // พา ธ ภาพถูกเก็บไว้ใน list.add ((i + 1) + ".jpeg"); // ถ้าภาพมีอยู่, ไม่มีการสร้าง (jpegfile.exists ()) การสร้างเส้นทางไฟล์ FileOutputStream out = ใหม่ fileOutputStream (jpegfile); imageio.write (img, "jpeg", out); out.close ();} log.error ("ppt แปลงเป็นภาพที่ประสบความสำเร็จ!");4. วิธี poi-xslf
วิธีการ POI-XSLF จัดการเอกสารที่ลงท้ายด้วย. pptx ต่อท้ายของไฟล์ ppt
/** * คำต่อท้ายการแปลงของเอกสาร PPT2007 คือ. pptx * @param pptfile ไฟล์ ppt * @param imgfile ไดเรกทอรีเส้นทางที่รูปภาพจะถูกบันทึก (ไม่ใช่ไฟล์) * @param รายการรายการที่เก็บชื่อไฟล์ * @return * {fileInputStream คือ = null; ลอง {is = ใหม่ fileInputStream (pptfile); xmlslideshow xmlslideshow = ใหม่ xmlslideshow (IS); is.close (); xmlslideshow.getSlides (); สำหรับ (int i = 0; i <slides.length; i ++) {// แก้ปัญหาที่อ่านไม่ออก xslfshape [] รูปร่าง = สไลด์ [i] .getShapes () (xslfShape (xslfStape) รูปร่าง; รายการ <xslftextaragraph> textParagraphs = sh.getTextParagraphs (); สำหรับ (xslftextaragraph XSLFTextParagraphs: ข้อความพาราม {xslftextrun.setfontfamily ("安");}}}} // สร้างภาพตามขนาดของสไลด์บัฟเฟอร์เมจ img = bufferedimage ใหม่ (pgsize.width, pgsize.height, bufferedimage.type_int_rgb); img.createGraphics (); graphics.setPaint (color.white); graphics.fill (ใหม่ rectangle2d.float (0, 0, pgsize.width, pgsize.height)); // สไลด์รหัสหลักมากที่สุด imgfile.getAbsolutepath () + "/" + (i + 1) + ".jpeg"; ไฟล์ jpegfile = ไฟล์ใหม่ (AbsolutePath); // เส้นทางรูปภาพจะถูกเก็บไว้ใน list.add ((i + 1) + ".jpeg"); (jpeg, png, bmp ฯลฯ ) ให้ความสนใจกับไฟล์ path ไฟล์ path FileOutputStream = ใหม่ fileOutputStream (jpegfile); // เขียนลงในภาพไปยัง imageio.write (img, "jpeg", ออก); out.close (); เมื่อการแปลงเป็นภาพถูกแปลงเป็นรูปภาพ! ", e);} return false;}5. ข้อผิดพลาดที่เป็นไปได้
org.apache.poi.poifs.filesystem.officexmlfileexception: ข้อมูลที่ให้มาดูเหมือนจะอยู่ใน Office 2007+ XML คุณกำลังเรียกส่วนหนึ่งของ POI ที่เกี่ยวข้องกับเอกสารสำนักงาน OLE2 คุณต้องเรียกส่วนที่แตกต่างกันของ POI เพื่อประมวลผลข้อมูลนี้ (เช่น XSSF แทน HSSF)
ข้อผิดพลาดข้างต้นเกิดขึ้นซึ่งหมายความว่ามันไม่ได้ใช้ในการติดต่อและควรใช้วิธีที่สองในการแปลง PPT
บางครั้งปัญหาเกิดขึ้นเมื่อการแปลงหลักเปลี่ยนไปได้ง่ายเพราะ POI ไม่ได้ดีและบางครั้งรูปภาพก็บิดเบี้ยวได้ง่าย
// สไลด์รหัสหลักมากที่สุด [i] .Draw (กราฟิก);
สรุป
ข้างต้นเป็นเรื่องเกี่ยวกับ Apache Poi ที่แปลง PPT เป็นรหัสอินสแตนซ์ภาพ ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!