Trabajar con Imágenes
Aspose.Words permite a los usuarios trabajar con imágenes de una manera muy flexible. En este artículo, puede explorar solo algunas de las posibilidades de trabajar con imágenes.
Cómo Extraer Imágenes de un documento
Todas las imágenes se almacenan dentro de Shape nodos en un documento. Para extraer todas las imágenes o imágenes que tengan un tipo específico del documento, siga estos pasos:
- Utilice el método getChildNodes para seleccionar todos los nodos de forma.
- Iterar a través de las colecciones de nodos resultantes.
- Compruebe la propiedad booleana hasImage.
- Extraiga los datos de la imagen utilizando la propiedad ImageData.
- Guarde los datos de la imagen en un archivo.
// 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++; | |
} | |
} |
Cómo Insertar un código de barras en cada página del documento
Este ejemplo le permite agregar códigos de barras iguales o diferentes en todas las páginas o en páginas específicas de un documento de Word. No hay una forma directa de agregar códigos de barras en todas las páginas de un documento, pero puede usar los métodos moveToSection, moveToHeaderFooter y insertImage para moverse a cualquier sección o encabezado/pie de página e insertar las imágenes del código de barras como puede ver en el siguiente código.
El siguiente ejemplo de código muestra cómo insertar una imagen de código de barras en cada página de un documento:
// 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); |
Bloquear la Relación de aspecto de la Imagen
La relación de aspecto de una forma geométrica es la relación de sus tamaños en diferentes dimensiones. Puede bloquear la relación de aspecto de una imagen usando AspectRatioLocked. El valor predeterminado de la relación de aspecto de la forma depende de ShapeType. Es verdadero para ShapeType.Image
y falso para otros tipos de formas.
El siguiente ejemplo de código muestra cómo trabajar con la relación de aspecto:
// 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"); |
Cómo Obtener Límites Reales de Forma en Puntos
Si desea que el cuadro delimitador real de la forma se represente en la página, puede lograrlo utilizando la propiedad BoundsInPoints.
El siguiente ejemplo de código muestra cómo usar esta propiedad:
// 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()); |
Recortar Imágenes
El recorte de una imagen generalmente se refiere a la eliminación de las partes externas no deseadas de una imagen para ayudar a mejorar el encuadre. También se utiliza para eliminar algunas de las partes de una imagen para aumentar el enfoque en un área en particular.
El siguiente ejemplo de código muestra cómo lograr esto usando 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)); | |
} |
Guardar imágenes como WMF
Aspose.Words proporciona funcionalidad para guardar todas las imágenes disponibles en un documento en WMFformatee mientras convierte DOCX a RTF.
El siguiente ejemplo de código muestra cómo guardar imágenes como WMF con las opciones de guardado 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); |