Praca z obrazami
Aspose.Words pozwala użytkownikom pracować z obrazami w bardzo elastyczny sposób. W tym artykule, można zbadać tylko niektóre z możliwości pracy z obrazami.
Jak wyodrębnić obrazy z dokumentu
Wszystkie obrazy są przechowywane wewnątrz Shape węzły w dokumencie. Aby wyodrębnić wszystkie obrazy lub obrazy o określonym typie z dokumentu, wykonaj następujące czynności:
- Użyj getChildNodes metoda wyboru wszystkich węzłów kształtu.
- Iterate poprzez kolekcje węzłów.
- Sprawdź hasImage Posiadłość boolean.
- Ekstrakcja danych obrazu za pomocą ImageData nieruchomości.
- Zapisz dane obrazu do pliku.
// 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++; | |
} | |
} |
Jak wpisać kod kreskowy na każdej stronie dokumentu
Ten przykład pozwala na dodanie tych samych lub różnych kodów kreskowych na wszystkich lub konkretnych stronach dokumentu Word. Nie ma bezpośredniego sposobu na dodanie kodów kreskowych na wszystkich stronach dokumentu, ale można użyć moveToSection, moveToHeaderFooter oraz insertImage metody przechodzenia do dowolnej sekcji lub nagłówków / stóp i wstawiania obrazów kodu kreskowego, jak można zobaczyć w poniższym kodzie
Poniższy przykład kodu pokazuje, jak umieścić obrazek kodu kreskowego na każdej stronie dokumentu:
// 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); |
Zablokuj wskaźnik ostrości obrazu
Stosunek kształtu geometrycznego jest stosunkiem jego rozmiarów w różnych wymiarach. Można zablokować proporcje obrazu za pomocą AspectRatioLocked. Domyślna wartość współczynnika kształtu zależy od ShapeType. Jest. true zamiast ShapeType.Image
oraz false dla innych typów kształtów.
Poniższy przykład kodu pokazuje, jak pracować z proporcjami:
// 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"); |
Jak uzyskać rzeczywiste bounds kształtów w punktach
Jeśli chcesz rzeczywiste bounding pole kształtu jako renderowane na stronie, można to osiągnąć za pomocą BoundsInPoints nieruchomości.
Poniższy przykład kodu pokazuje jak korzystać z tej właściwości:
// 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()); |
Obrazy zbożowe
Uprawa obrazu zazwyczaj odnosi się do usunięcia niechcianych zewnętrznych części obrazu, aby pomóc poprawić kadrowanie. Jest również stosowany do usuwania niektórych części obrazu w celu zwiększenia koncentracji na danym obszarze.
Poniższy przykład kodu pokazuje, jak to osiągnąć używając 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)); | |
} |
Zapisywanie zdjęć jako WMF
Aspose.Words zapewnia funkcjonalność, aby zapisać wszystkie dostępne obrazy w dokumencie WMFformat podczas konwersji DOCX do RTF.
Poniższy przykład kodu pokazuje, jak zapisać obrazy jako WMF z RTF zapisać opcje:
// 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); |