การทำงานกับภาพ

Aspose.Wordsช่วยให้ผู้ใช้สามารถทำงานกับภาพในทางที่ยืดหยุ่นมาก ในบทความนี้คุณสามารถสำรวจเพียงบางส่วนของความเป็นไปได้ของการทำงานกับภาพ.

วิธีการแยกภาพจากเอกสาร

รูปภาพทั้งหมดจะถูกเก็บไว้ภายในShapeโหนดในเอกสาร เมื่อต้องการแยกภาพหรือรูปภาพทั้งหมดที่มีชนิดเฉพาะจากเอกสารให้ทำตามขั้นตอนเหล่านี้:

  • ใช้วิธีการgetChildNodesเพื่อเลือกโหนดรูปร่างทั้งหมด.
  • ย้ำผ่านคอลเลกชันโหนดที่เกิด.
  • ตรวจสอบคุณสมบัติบูลีนhasImage.
  • แยกข้อมูลภาพโดยใช้คุณสมบัติImageData.
  • บันทึกข้อมูลภาพไปยังแฟ้ม.
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// The path to the documents directory.
String dataDir = Utils.getDataDir(ExtractImagesToFiles.class);
Document doc = new Document(dataDir + "Image.SampleImages.doc");
NodeCollection<Shape> shapes = (NodeCollection<Shape>) doc.getChildNodes(NodeType.SHAPE, true);
int imageIndex = 0;
for (Shape shape : shapes
) {
if (shape.hasImage()) {
String imageFileName = String.format(
"Image.ExportImages.{0}_out_{1}", imageIndex, FileFormatUtil.imageTypeToExtension(shape.getImageData().getImageType()));
shape.getImageData().save(dataDir + imageFileName);
imageIndex++;
}
}

วิธีการแทรกบาร์โค้ดในแต่ละหน้าเอกสาร

ตัวอย่างนี้ช่วยให้คุณสามารถเพิ่มบาร์โค้ดเดียวกันหรือต่างกันในหน้าทั้งหมดหรือเฉพาะขอ ไม่มีวิธีโดยตรงในการเพิ่มบาร์โค้ดในทุกหน้าของเอกสารแต่คุณสามารถใช้วิธีการmoveToSection,moveToHeaderFooterและinsertImageเพื่

ตัวอย่างรหัสต่อไปนี้แสดงวิธีการแทรกรูปภาพบาร์โค้ดในแต่ละหน้าของเอกสาร:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// The path to the documents directory.
String dataDir = Utils.getDataDir(InsertBarcodeImage.class);
Document doc = new Document(dataDir + "Image.SampleImages.doc");
DocumentBuilder builder = new DocumentBuilder(doc);
// The number of pages the document should have.
int numPages = 4;
// The document starts with one section, insert the barcode into this existing section.
InsertBarcodeIntoFooter(builder, doc.getFirstSection(), 1, HeaderFooterType.FOOTER_PRIMARY);
InsertBarcodeIntoFooter(builder, doc.getFirstSection(), 1, HeaderFooterType.FOOTER_PRIMARY);
for (int i = 1; i < numPages; i++) {
// Clone the first section and add it into the end of the document.
Section cloneSection = (Section) doc.getFirstSection().deepClone(false);
// cloneSection.getPageSetup().getSectionStart() = SectionStart.NEW_PAGE;
doc.appendChild(cloneSection);
// Insert the barcode and other information into the footer of the section.
InsertBarcodeIntoFooter(builder, cloneSection, i, HeaderFooterType.FOOTER_PRIMARY);
}
dataDir = dataDir + "Document_out_.docx";
// Save the document as a PDF to disk. You can also save this directly to a stream.
doc.save(dataDir);
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
private static void InsertBarcodeIntoFooter(DocumentBuilder builder, Section section, int pageId, int footerType) {
// Move to the footer type in the specific section.
try {
builder.moveToSection(section.getDocument().indexOf(section));
builder.moveToHeaderFooter(footerType);
String dataDir = Utils.getDataDir(InsertBarcodeImage.class);
// Insert the barcode, then move to the next line and insert the ID along with the page number.
// Use pageId if you need to insert a different barcode on each page. 0 = First page, 1 = Second page etc.
builder.insertImage(dataDir + "Barcode1.png");
builder.writeln();
builder.write("1234567890");
builder.insertField("PAGE");
// Create a right aligned tab at the right margin.
double tabPos = section.getPageSetup().getPageWidth() - section.getPageSetup().getRightMargin() - section.getPageSetup().getLeftMargin();
builder.getCurrentParagraph().getParagraphFormat().getTabStops().add(new TabStop(tabPos, TabAlignment.RIGHT, TabLeader.NONE));
// Move to the right hand side of the page and insert the page and page total.
builder.write(ControlChar.TAB);
builder.insertField("PAGE");
builder.write(" of ");
builder.insertField("NUMPAGES");
} catch (Exception x) {
}
}

ล็อคอัตราส่วนภาพของภาพ

อัตราส่วนของรูปทรงเรขาคณิตเป็นอัตราส่วนของขนาดของมันในมิติที่แตกต่างกัน ท่านสามารถล็อกอัตราส่วนของภาพได้ด้วยAspectRatioLocked ค่าดีฟอลต์ของอัตราส่วนของรูปร่างจะขึ้นอยู่กับShapeType มันเป็นความจริงสำหรับShapeType.Imageและเท็จสำหรับประเภทรูปร่างอื่นๆ.

ตัวอย่างรหัสต่อไปนี้แสดงวิธีการทำงานกับอัตราส่วน:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// The path to the documents directory.
String dataDir = Utils.getDataDir(DocumentBuilderSetImageAspectRatioLocked.class);
// Open the document.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
Shape shape = builder.insertImage(dataDir + "Test.png");
shape.setAspectRatioLocked(false);
doc.save(dataDir + "output.doc");

วิธีการได้รับขอบเขตที่แท้จริงของรูปร่างในจุด

หากคุณต้องการให้กล่องขอบที่แท้จริงของรูปร่างที่แสดงผลบนหน้าเว็บคุณสามารถบรรลุสิ่งนี้ได้โดยใช้คุณสมบัติBoundsInPoints.

ตัวอย่างรหัสต่อไปนี้แสดงวิธีใช้คุณสมบัตินี้:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
Shape shape = builder.insertImage(dataDir + "Test.png");
shape.setAspectRatioLocked(false);
System.out.print("\nGets the actual bounds of the shape in points. ");
System.out.println(shape.getShapeRenderer().getBoundsInPoints());

ภาพพืช

การครอบตัดของรูปภาพมักจะหมายถึงการเอาออกของส่วนภายนอกที่ไม่พึงประสงค์ของรูป นอกจากนี้ยังใช้สำหรับการลบบางส่วนของภาพเพื่อเพิ่มโฟกัสในพื้นที่เฉพาะ.

ตัวอย่างรหัสต่อไปนี้แสดงวิธีการบรรลุนี้โดยใช้Aspose.WordsAPI:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// The path to the documents directory.
String dataDir = Utils.getDataDir(CropImages.class);
String inputPath = dataDir + "ch63_Fig0013.jpg";
String outputPath = dataDir + "cropped-1.jpg";
cropImage(inputPath, outputPath, 124, 90, 570, 571);
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
public static void cropImage(String inPath, String outPath, int left, int top, int width, int height) throws Exception {
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
BufferedImage img = ImageIO.read(new File(inPath));
int effectiveWidth = img.getWidth() - width;
int effectiveHeight = img.getHeight() - height;
Shape croppedImage = builder.insertImage(img,
ConvertUtil.pixelToPoint(img.getWidth() - effectiveWidth),
ConvertUtil.pixelToPoint(img.getHeight() - effectiveHeight));
double widthRatio = croppedImage.getWidth() / ConvertUtil.pixelToPoint(img.getWidth());
double heightRatio = croppedImage.getHeight() / ConvertUtil.pixelToPoint(img.getHeight());
if (widthRatio < 1)
croppedImage.getImageData().setCropRight(1 - widthRatio);
if (heightRatio < 1)
croppedImage.getImageData().setCropBottom(1 - heightRatio);
float leftToWidth = (float) left / img.getWidth();
float topToHeight = (float) top / img.getHeight();
croppedImage.getImageData().setCropLeft(leftToWidth);
croppedImage.getImageData().setCropRight(croppedImage.getImageData().getCropRight() - leftToWidth);
croppedImage.getImageData().setCropTop(topToHeight);
croppedImage.getImageData().setCropBottom(croppedImage.getImageData().getCropBottom() - topToHeight);
croppedImage.getShapeRenderer().save(outPath, new ImageSaveOptions(SaveFormat.JPEG));
}

บันทึกภาพเป็นWMF

Aspose.Wordsให้ฟังก์ชั่นเพื่อบันทึกรูปภาพทั้งหมดที่มีอยู่ในเอกสารไปที่ WMFรูปแบบขณะแปลงDOCXเป็นRTF.

ตัวอย่างรหัสต่อไปนี้แสดงวิธีการบันทึกภาพเป็นWMFด้วยRTFตัวเลือกการบันทึก:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
String fileName = "TestFile.doc";
Document doc = new Document(dataDir + fileName);
RtfSaveOptions saveOpts = new RtfSaveOptions();
saveOpts.setSaveImagesAsWmf(true);
doc.save(dataDir + "output.rtf", saveOpts);