การแสดงผลรูปร่างแยกต่างหากจากเอกสาร
เมื่อการประมวลผลเอกสาร,งานทั่วไปคือการแยกภาพทั้งหมดที่พบในเอกสารและส่งออกไ งานนี้กลายเป็นเรื่องง่ายด้วยAspose.WordsAPIซึ่งมีฟังก์ชันการทำงานสำหรับการแยกและบันทึกข้อมูลภาพ อย่างไรก็ตามบางครั้งคุณอาจต้องการแยกชนิดอื่นของเนื้อหากราฟิกที่แสดงโดยวัตถุรูปว ไม่มีวิธีที่ตรงไปตรงมาในการแสดงผลวัตถุนี้เนื่องจากเป็นการรวมกันขององค์ประกอบเนื้อ นอกจากนี้คุณยังอาจพบกรณีที่เนื้อหาได้รับการจัดกลุ่มเข้าด้วยกันเป็นวัตถุที่มีลักษณะเหมือน.
Aspose.Wordsให้ฟังก์ชันการทำงานสำหรับการแยกเนื้อหาประเภทนี้ในลักษณะเดียวกับที่คุณสามารถดึง บทความนี้อธิบายวิธีการใช้ฟังก์ชันการทำงานนี้เพื่อแสดงรูปร่างเป็นอิสระจากเอกสาร.
ประเภทรูปร่างในAspose.Words
เนื้อหาทั้งหมดในเลเยอร์การวาดรูปเอกสารจะแสดงโดยโหนดShapeหรือGroupShapeในโมดูลออบเจกต์เอกสารAspose.Words(DOM) เนื้อหาดังกล่าวสามารถเป็นกล่องข้อความ,ภาพ,AutoShapes,OLEวัตถุฯลฯ บางฟิลด์จะถูกนำเข้าเป็นรูปร่างเช่นฟิลด์INCLUDEPICTURE
.
รูปภาพธรรมดาจะแสดงโดยโหนด Shape ของ ShapeType.Image โหนดรูปร่างนี้ไม่มีโหนดย่อย แต่ข้อมูลรูปภาพที่อยู่ในโหนดรูปร่างนี้สามารถเข้าถึงได้โดยคุณสมบัติ Shape.ImageData ในทางกลับกัน รูปร่างสามารถประกอบด้วยโหนดย่อยจำนวนมากได้ ตัวอย่างเช่น รูปร่างของกล่องข้อความซึ่งแสดงโดยคุณสมบัติ ShapeType.TextBox สามารถประกอบด้วยโหนดจำนวนมาก เช่น Paragraph และ Table รูปร่างส่วนใหญ่สามารถรวมโหนดระดับบล็อก Paragraph และ Table ได้ ซึ่งเป็นโหนดเดียวกับที่ปรากฏในเนื้อหาหลัก รูปร่างมักจะเป็นส่วนหนึ่งของย่อหน้าบางย่อหน้า ซึ่งอาจรวมโดยตรงในบรรทัดหรือยึดกับ Paragraph, แต่ “ลอย” อยู่ที่ใดก็ได้ในหน้าเอกสาร.
เอกสารยังสามารถประกอบด้วยรูปร่างที่จัดกลุ่มเข้าด้วยกัน การจัดกลุ่มสามารถเปิดใช้งานได้ในMicrosoft Wordโดยการเลือกหลายวัตถุและคลิก"กลุ่ม"ในเมนูคลิกขวา.
ในAspose.Wordsกลุ่มของรูปร่างเหล่านี้จะแสดงโดยโหนดGroupShape สามารถเรียกใช้เหล่านี้ในลักษณะเดียวกับเพื่อให้ทั้งกลุ่มภาพ.
รูปแบบDOCXสามารถประกอบด้วยรูปภาพประเภทพิเศษเช่นไดอะแกรมหรือแผนภูมิ รูปร่างเหล่านี้ยังถูกแสดงผ่านโหนดShapeในAspose.Wordsซึ่งมีวิธีการที่คล้ายกันสำหรับการแสดงผลเป็นรูปภ โดยการออกแบบรูปร่างไม่สามารถมีรูปร่างอื่นเป็นเด็กเว้นแต่รูปร่างที่เป็นภาพ(ShapeType.Image) ตัวอย่างเช่นMicrosoft Wordไม่อนุญาตให้คุณแทรกกล่องข้อความภายในกล่องข้อความอื่น.
ประเภทรูปร่างที่อธิบายข้างต้นมีวิธีการพิเศษเพื่อแสดงรูปร่างผ่านคลาสของShapeRenderer อินสแตนซ์ของShapeRendererคลาสถูกดึงสำหรับShapeหรือGroupShapeผ่านวิธีการGetShapeRendererหรือโดยการส่งผ่านShapeไปยังตัวสร้างของShapeRenderer คลาสนี้ให้การเข้าถึงสมาชิกซึ่งอนุญาตให้แสดงรูปร่างดังต่อไปนี้:
- แฟ้มบนดิสก์โดยใช้วิธีการโอเวอร์โหลดSave
- สตรีมโดยใช้วิธีการโอเวอร์โหลดSave
- วัตถุกราฟิกโดยใช้วิธีการRenderToSizeและRenderToScale
การแสดงผลไปยังแฟ้มหรือสตรีม
วิธีการSaveให้โอเวอร์โหลดที่ทำให้รูปร่างโดยตรงกับแฟ้มหรือสตรีม ทั้งสองโอเวอร์โหลดยอมรับอินสแตนซ์ของImageSaveOptionsคลาสซึ่งจะช่วยให้การกำหนดตัวเลือกสำหรับก นี้ทำงานในลักษณะเดียวกับวิธีการDocument.Save แม้ว่าพารามิเตอร์นี้จำเป็นต้องใช้คุณสามารถส่งผ่านค่าโมฆะโดยระบุว่าไม่มีอ็อพชันแบบก.
รูปร่างสามารถส่งออกในรูปแบบภาพใดๆที่ระบุไว้ในการแจงนับSaveFormat เช่นJPEGโดยระบุการแจงนับSaveFormat.Jpegหรือเป็นภาพเวกเตอร์เช่นEMFโดยการระบุSaveFormat.Emf.
ตัวอย่างโค้ดด้านล่างแสดงการแสดงผลรูปร่างเป็นEMFรูปภาพแยกต่างหากจากเอกสารและบันทึกลงในดิสก์:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
// For complete examples and data files, please go to | |
// https://github.com/aspose-words/Aspose.Words-for-Java | |
ShapeRenderer r = shape.getShapeRenderer(); | |
// Define custom options which control how the image is rendered. Render the | |
// shape to the JPEG raster format. | |
ImageSaveOptions imageOptions = new ImageSaveOptions(SaveFormat.EMF); | |
imageOptions.setScale(1.5f); | |
// Save the rendered image to disk. | |
r.save(dataDir + "TestFile.RenderToDisk_Out.emf", imageOptions); |
ตัวอย่างโค้ดด้านล่างแสดงการแสดงผลรูปร่างเป็นJPEGรูปภาพแยกต่างหากจากเอกสารและบันทึกลงในสตรีม:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
// For complete examples and data files, please go to | |
// https://github.com/aspose-words/Aspose.Words-for-Java | |
ShapeRenderer r = new ShapeRenderer(shape); | |
// Define custom options which control how the image is rendered. Render the | |
// shape to the vector format EMF. | |
ImageSaveOptions imageOptions = new ImageSaveOptions(SaveFormat.JPEG); | |
// Output the image in gray scale | |
imageOptions.setImageColorMode(ImageColorMode.GRAYSCALE); | |
// Reduce the brightness a bit (default is 0.5f). | |
imageOptions.setImageBrightness(0.45f); | |
FileOutputStream stream = new FileOutputStream(dataDir + "TestFile.RenderToStream_Out.jpg"); | |
// Save the rendered image to the stream using different options. | |
r.save(stream, imageOptions); |
คลาสImageSaveOptionsช่วยให้คุณสามารถระบุตัวเลือกต่างๆที่ควบคุมวิธีการแสดงผลภาพ ฟังก์ชันที่อธิบายข้างต้นสามารถใช้ได้ในลักษณะเดียวกันกับGroupShapeและShapeโหนด.
การแสดงผลไปยังออบเจกต์Graphics
การเรนเดอร์โดยตรงไปยังอ็อบเจ็กต์ Graphics ช่วยให้คุณสามารถกำหนดค่าและสถานะของคุณเองสำหรับอ็อบเจ็กต์ Graphics ได้ สถานการณ์ทั่วไปเกี่ยวข้องกับการเรนเดอร์รูปร่างโดยตรงไปยังอ็อบเจ็กต์ Graphics ที่ดึงมาจากฟอร์ม Windows หรือบิตแมป เมื่อเรนเดอร์โหนด Shape การตั้งค่าจะส่งผลต่อลักษณะรูปร่าง ตัวอย่างเช่น คุณสามารถหมุนหรือปรับขนาดรูปร่างได้โดยใช้เมธอด RotateTransform หรือ ScaleTransform สำหรับอ็อบเจ็กต์ Graphics.
ตัวอย่างด้านล่างแสดงวิธีแสดงรูปร่างให้กับออบเจกต์Graphicsแยกต่างหากจากเอกสารและใช้กา:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
// For complete examples and data files, please go to | |
// https://github.com/aspose-words/Aspose.Words-for-Java | |
// The shape renderer is retrieved using this method. This is made into a | |
// separate object from the shape as it internally | |
// caches the rendered shape. | |
ShapeRenderer r = shape.getShapeRenderer(); | |
// Find the size that the shape will be rendered to at the specified scale and | |
// resolution. | |
Dimension shapeSizeInPixels = r.getSizeInPixels(1.0f, 96.0f); | |
// Rotating the shape may result in clipping as the image canvas is too small. | |
// Find the longest side | |
// and make sure that the graphics canvas is large enough to compensate for | |
// this. | |
int maxSide = Math.max(shapeSizeInPixels.width, shapeSizeInPixels.height); | |
BufferedImage image = new BufferedImage((int) (maxSide * 1.25), (int) (maxSide * 1.25), | |
BufferedImage.TYPE_INT_ARGB); | |
// Rendering to a graphics object means we can specify settings and | |
// transformations to be applied to | |
// the shape that is rendered. In our case we will rotate the rendered shape. | |
Graphics2D gr = (Graphics2D) image.getGraphics(); | |
// Clear the shape with the background color of the document. | |
gr.setBackground(shape.getDocument().getPageColor()); | |
gr.clearRect(0, 0, image.getWidth(), image.getHeight()); | |
// Center the rotation using translation method below | |
gr.translate(image.getWidth() / 8, image.getHeight() / 2); | |
// Rotate the image by 45 degrees. | |
gr.rotate(45 * Math.PI / 180); | |
// Undo the translation. | |
gr.translate(-image.getWidth() / 8, -image.getHeight() / 2); | |
// Render the shape onto the graphics object. | |
r.renderToSize(gr, 0, 0, shapeSizeInPixels.width, shapeSizeInPixels.height); | |
ImageIO.write(image, "png", new File(dataDir + "TestFile.RenderToGraphics_out.png")); | |
gr.dispose(); |
ในทำนองเดียวกันกับวิธีการRenderToSizeวิธีการRenderToSizeที่สืบทอดมาจากNodeRendererBaseจะเป็นประโยชน์สำหรับการสร้างภาพขนาดย่อของเนื้อหาเอกสาร ขนาดรูปร่างที่ระบุผ่านตัวสร้าง วิธีRenderToSizeจะยอมรับวัตถุGraphicsพิกัดและพิกัดของตำแหน่งของภาพและขนาดของภาพ(ความกว้างและความสูง)ที่จะวาดลงบนวัตถุGraphics.
Shapeสามารถแสดงผลในระดับหนึ่งโดยใช้วิธีการShapeRenderer.RenderToScaleที่สืบทอดมาจากคลาสของNodeRendererBase นี้จะคล้ายกับวิธีการDocument.RenderToScaleที่ยอมรับพารามิเตอร์หลักเดียวกัน ความแตกต่างระหว่างสองวิธีนี้คือด้วยวิธีการShapeRenderer.RenderToScaleแทนที่จะเป็นขนาดตัวอักษรคุณเลือกค่าลอยที่ ถ้าค่าลอยเท่ากับ1.0ทำให้รูปร่างแสดงผลที่ 100%ของขนาดเดิม ค่าลอยตัวของ0.5จะลดขนาดภาพลงครึ่งหนึ่ง.
การแสดงผลรูปภาพรูปร่าง
คลาสShapeแสดงถึงวัตถุในเลเยอร์รูปวาดเช่นAutoShapeกล่องข้อความแบบอิสระOLEวัตถุควบคุมแอคทีฟเอ็กซ์ ใช้ชั้นเรียนShapeคุณสามารถสร้างหรือปรับเปลี่ยนรูปร่างในเอกสารMicrosoft Word คุณสมบัติที่สำคัญของรูปร่างคือShapeType รูปร่างของชนิดที่แตกต่างกันสามารถมีความสามารถที่แตกต่างกันในเอกสารคำ ตัวอย่างเช่นรูปภาพและOLEรูปทรงเท่านั้นที่สามารถมีรูปภาพภายในได้ในขณะที่รูปทรงส่วนให.
ตัวอย่างต่อไปนี้แสดงวิธีการแสดงผลอิมเมจรูปร่างไปยังอิมเมจJPEGแยกต่างหากจากเอกสา:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
// For complete examples and data files, please go to | |
// https://github.com/aspose-words/Aspose.Words-for-Java | |
dataDir = dataDir + "TestFile.RenderShape_out.jpg"; | |
// Save the Shape image to disk in JPEG format and using default options. | |
shape.getShapeRenderer().save(dataDir, null); |
ดึงขนาดรูปร่าง
คลาสShapeRendererยังให้ฟังก์ชันเพื่อดึงขนาดของรูปร่างเป็นพิกเซลผ่านวิธีการGetSizeInPixels เมธอดนี้ยอมรับพารามิเตอร์ลอย(เดี่ยว)สองตัว-สเกลและDPIซึ่งใช้ในการคำนวณขนาดรูปร่างเมื่ วิธีการส่งคืนออบเจกต์Sizeซึ่งมีความกว้างและความสูงของขนาดที่คำนวณ นี้จะมีประโยชน์เมื่อจำเป็นต้องทราบขนาดของรูปร่างที่แสดงผลล่วงหน้าตัวอย่างเช่นเมื่อ.
ตัวอย่างด้านล่างแสดงวิธีการสร้างบิตแมปใหม่และวัตถุกราฟิกที่มีความกว้างและความสู:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
// For complete examples and data files, please go to | |
// https://github.com/aspose-words/Aspose.Words-for-Java | |
Point2D.Float shapeSizeInDocument = shape.getShapeRenderer().getSizeInPoints(); | |
float width = shapeSizeInDocument.x; // The width of the shape. | |
float height = shapeSizeInDocument.y; // The height of the shape. | |
Dimension shapeRenderedSize = shape.getShapeRenderer().getSizeInPixels(1.0f, 96.0f); | |
BufferedImage image = new BufferedImage(shapeRenderedSize.width, shapeRenderedSize.height, | |
BufferedImage.TYPE_INT_RGB); | |
Graphics gr = image.getGraphics(); | |
// Render shape onto the graphics object using the RenderToScale or RenderToSize | |
// methods of ShapeRenderer class. | |
gr.dispose(); |
เมื่อใช้วิธีการRenderToSizeหรือRenderToScaleขนาดภาพที่แสดงผลจะถูกส่งกลับไปยังออบเจกต์SizeF นี้สามารถกำหนดให้ตัวแปรและใช้ในกรณีที่จำเป็น.
คุณสมบัติSizeInPointsจะส่งคืนขนาดรูปร่างที่วัดเป็นจุด(ดูShapeRenderer) ผลลัพธ์คือSizeF
วัตถุที่มีความกว้างและความสูง.