Obnovovací tvary Samostatně od dokumentu
Při zpracování dokumentů je společným úkolem extrahovat všechny obrázky nalezené v dokumentu a exportovat je na vnější místo. Tento úkol se stává jednoduchý s Aspose.Words API, která již poskytuje funkci pro získávání a ukládání obrazových dat. Někdy však můžete chtít podobně extrahovat jiné typy grafického obsahu, které jsou reprezentovány jiným typem kreslícího objektu, například textový rámeček obsahující odstavce, tvary šipek a malý obraz. Neexistuje jednoduchý způsob vykreslování tohoto objektu, protože se jedná o kombinaci jednotlivých prvků obsahu. Můžete se také setkat s případem, kdy obsah byl seskupen do objektu, který vypadá jako jeden obrázek.
Aspose.Words poskytuje funkce pro extrahování tohoto typu obsahu stejným způsobem, jak můžete extrahovat jednoduchý obraz z tvaru kresleného obsahu. Tento článek popisuje, jak využít této funkce k vytvoření tvarů nezávisle na dokumentu.
Typy tvarů Aspose.Words
Veškerý obsah v kresbě dokumentu představuje Shape nebo GroupShape uzel v Aspose.Words Modul objektu dokumentu (DOM). Takovým obsahem mohou být textové schránky, obrázky, AutoShapes, OLE objekty atd. Některá pole jsou importována také jako tvary, například INCLUDEPICTURE
pole.
Jednoduchý obrázek představuje Shape uzel ShapeType.Image. Tento tvar uzel nemá dětské uzly, ale obrazové údaje obsažené v tomto tvaru uzlu lze získat pomocí Shape.ImageData majetek. Naproti tomu tvar může být také tvořen mnoha dětskými uzly. Například tvar textového pole, který představuje ShapeType.TextBox majetek, může být tvořen z mnoha uzlů, jako je Paragraph a Table. Většina tvarů může zahrnovat Paragraph a Table blokové uzly. Jsou to stejné uzly jako ty, které se objevují v hlavním těle. Tvary jsou vždy součástí některého odstavce, buď přímo inline nebo ukotvené na Odstavec, ale všude na stránce dokumentu.
Dokument může také obsahovat tvary, které jsou seskupeny dohromady. Grouping může být povolen Microsoft Word výběrem více objektů a kliknutím na tlačítko?GroupV pravém menu.
In Aspose.Words, Tyto skupiny tvarů jsou zastoupeny GroupShape Uzel. Lze je také použít stejným způsobem, aby se celá skupina dostala k obrazu.
Formát DOCX může obsahovat speciální typy obrázků, jako jsou diagramy nebo grafy. Tyto tvary jsou také zastoupeny prostřednictvím Shape uzel Aspose.Words, která také poskytuje podobnou metodu pro jejich zobrazování jako obrázky. Podle návrhu nemůže tvar obsahovat jako dítě jiný tvar, pokud tento tvar není obrazem (ShapeType.Image). Například, Microsoft Word nedovoluje vám vložit textové pole do jiného textového pole.
Výše popsané typy tvarů poskytují speciální metodu, jak tvary vykreslit ShapeRenderer třída. Instance ShapeRenderer třída se získává pro Shape nebo GroupShape skrze GetShapeRenderer metoda nebo předáním Shape Konstruktorovi ShapeRenderer třída. Tato třída poskytuje přístup k členům, které umožňují vykreslit následující tvar:
- Soubor na disku pomocí Save metoda přetížení
- Stream pomocí Save metoda přetížení
- Grafika Objekt pomocí RenderToSize a RenderToScale metody
Předání souboru nebo streamu
The Save metoda poskytuje přetížení, které vytváří tvar přímo do souboru nebo proudu. Oba přetížení přijmout případ ImageSaveOptions třída, která umožňuje definovat možnosti pro vykreslení tvaru. To funguje stejně jako Document.Save metoda. I když je tento parametr vyžadován, můžete předat nulovou hodnotu, která stanoví, že neexistují žádné vlastní možnosti.
Tvar lze exportovat v jakémkoli formátu obrázku uvedeném v SaveFormat výčtu. Například obraz může být přeložen jako rastrový obraz, jako je JPEG zadáním SaveFormat.Jpeg počet nebo jako vektorový obraz, jako je EMF upřesněním SaveFormat.Emf.
Příklad kódu níže ilustruje vykreslování tvaru do EMF obrazu odděleně od dokumentu a uložení na disk:
// 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); |
Příklad kódu níže ilustruje vykreslení tvaru obrazu JPEG odděleně od dokumentu a uložení do streamu:
// 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); |
The ImageSaveOptions třída umožňuje určit různé možnosti, které kontrolují, jak je obraz vykreslen. Výše popsané funkce lze aplikovat stejným způsobem na GroupShape a Shape uzly.
Předávám Graphics
Předmět
Předávám přímo Graphics objekt umožňuje definovat vlastní nastavení a stav pro Graphics objekt. Společný scénář zahrnuje vytvoření tvaru přímo do Graphics objekt získaný z a Windows Forma nebo Bitmap. Když Shape Uzel je vykreslen, nastavení ovlivní vzhled tvaru. Například můžete otočit nebo zvětšit tvar pomocí RotateTransform nebo ScaleTransform metody Graphics objekt.
Následující příklad ukazuje, jak vytvořit tvar na Graphics objekt odděleně od dokumentu a použít rotaci na vykreslený obrázek:
// 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(); |
Podobně jako RenderToSize metoda, RenderToSizemetoda dědičná po NodeRendererBase je užitečný pro tvorbu náhledů obsahu dokumentu. Velikost tvaru je určena konstruktorem. The RenderToSize metoda přijímá Graphics objekt, souřadnice X a Y polohy obrazu a velikost obrazu (šířka a výška), které budou nakresleny na Graphics objekt.
The Shape může být přeložen do určitého rozsahu pomocí ShapeRenderer.RenderToScale metoda dědičná po NodeRendererBase třída. Je to podobné jako u Document.RenderToScale metoda, která přijímá stejné hlavní parametry. Rozdíl mezi těmito dvěma metodami je, že s ShapeRenderer.RenderToScale metoda, místo doslovné velikosti, zvolíte float hodnotu, která měří tvar během jeho vykreslování. Pokud hodnota plováku rovná 1.0 způsobí, že tvar bude vykreslen na 100% původní velikosti. Hodnota plováku 0,5 sníží velikost obrazu o polovinu.
Obnovit tvarový obrázek
The Shape třída představuje objekty v kresbové vrstvě, jako je AutoShape, textový box, freeform, OLE objekt, ActiveX ovládání, nebo obrázek. Použití Shape třída, můžete vytvořit nebo upravit tvary v Microsoft Word dokument. Důležitá vlastnost tvaru je jeho ShapeType. Tvary různých typů mohou mít různé schopnosti v dokumentu Word. Například pouze obrázky a tvary OLE mohou mít obrázky uvnitř sebe, zatímco většina tvarů může mít pouze text.
Následující příklad ukazuje, jak vykreslit obraz Tvar na obraz JPEG odděleně od dokumentu a uložit jej na disk:
// 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); |
Získávání velikosti tvaru
The ShapeRenderer třída také poskytuje funkčnost pro získání velikosti tvaru v pixelech prostřednictvím GetSizeInPixels metoda. Tato metoda akceptuje dva float (Single) parametry: Metoda vrací Size objekt, který obsahuje šířku a výšku vypočtené velikosti. To je užitečné, když je třeba předem znát velikost vykresleného tvaru, například při vytváření nového Bitmapu z vykresleného výstupu.
Níže uvedený příklad ukazuje, jak vytvořit nový objekt Bitmap a Graphics s šířkou a výškou tvaru, který má být přeložen:
// 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(); |
Při použití RenderToSize nebo RenderToScale metody, vykreslené velikosti obrazu se vrací také v SizeF objekt. To může být přiřazeno proměnné a v případě potřeby použito.
The SizeInPoints vlastnost vrací velikost tvaru naměřená v bodech (viz ShapeRenderer). Výsledkem je: SizeF
objekt obsahující šířku a výšku.