Работа с изображениями
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++; | |
| } | |
| } |
Как вставить штрих-код на каждую страницу документа
В этом примере вы можете добавить одинаковые или разные штрих-коды на все или определенные страницы документа Word. Прямого способа добавить штрих-коды на все страницы документа не существует, но вы можете использовать методы 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); |
Зафиксировать соотношение сторон изображения
Соотношение сторон геометрической фигуры - это соотношение ее размеров в разных измерениях. Вы можете настроить соотношение сторон изображения, используя 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.Words API:
| // 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); |