Tvary renderování 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 externí 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. Nicméně, někdy můžete chtít podobně extrahovat jiné typy grafického obsahu, který je reprezentován jiným typem kreslení objektu, například textové pole obsahující odstavce, tvary šipek a malý obrázek. Neexistuje žádný jednoduchý způsob vykreslování tohoto objektu, protože je kombinací 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 funkčnosti k vytvoření tvarů nezávisle na dokumentu.
Typy tvarů Aspose.Words
Veškerý obsah vrstvy výkresu 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 také dovážena 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.image_data 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.TEXT_BOX 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 Paragraph, ale pluje 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čítkoGroupV pravém menu.
In Aspose.Words, Tyto skupiny tvarů jsou zastoupeny GroupShape Uzel. Lze je také použít stejným způsobem, aby celá skupina byla image.
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í zvláštní metodu pro zobrazení tvarů prostřednictvím ShapeRenderer třída. Instance ShapeRenderer třída se získává pro Shape nebo GroupShape prostřednictvím get_shape_renderer způsob nebo předáním Shape konstruktorovi ShapeRenderer třída. Tato třída poskytuje přístup k členům, které umožňují vykreslit tvar:
- Soubor na disku
- Stream
Předkládání souboru nebo proudu
• 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, s uvedením, že neexistují žádné vlastní možnosti.
Tvar lze exportovat v jakémkoli formátu obrázku uvedeném v SaveFormat vyjmenování. Například obraz může být přeložen jako rastrový obraz, jako je JPEG, a to upřesněním SaveFormat.JPEG počet nebo jako vektorový obraz, jako například EMF upřesněním SaveFormat.EMF.
Příklad kódu níže ilustruje vykreslování tvaru EMF obrazu odděleně od dokumentu a uložení na disk:
r = shape.get_shape_renderer()
# Define custom options which control how the image is rendered. Render the shape to the JPEG raster format.
imageOptions = aw.saving.ImageSaveOptions(aw.SaveFormat.EMF)
imageOptions.scale = 1.5
# Save the rendered image to disk.
r.save(docs_base.artifacts_dir + "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:
r = shape.get_shape_renderer()
# Define custom options which control how the image is rendered. Render the shape to the vector format EMF.
imageOptions = aw.saving.ImageSaveOptions(aw.SaveFormat.JPEG)
# Output the image in gray scale
imageOptions.image_color_mode = aw.saving.ImageColorMode.GRAYSCALE
# Reduce the brightness a bit (default is 0.5f).
imageOptions.image_brightness = 0.45
stream = io.FileIO(docs_base.artifacts_dir + "TestFile.RenderToStream_out.jpg", "w+b")
# Save the rendered image to the stream using different options.
r.save(stream, imageOptions)
# Close the stream
stream.close()
• ImageSaveOptions třída vám 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.
Opravovat tvarový obrázek
• 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 shape_type. Tvary různých typů mohou mít různé schopnosti v dokumentu Word. Například pouze obraz 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 Shape do obrazu JPEG odděleně od dokumentu a uložit jej na disk:
# Save the rendered image to disk.
shape.get_shape_renderer().save(docs_base.artifacts_dir + "TestFile.RenderShapeImage.jpeg", None)
Získávání velikosti tvaru
• ShapeRenderer třída také poskytuje funkčnost pro získání velikosti tvaru v pixelech prostřednictvím get_size_in_pixels metoda. Tato metoda akceptuje dva float (Single) parametry, tj. stupnici a DPI, které se používají při výpočtu velikosti tvaru při překreslení tvaru. Metoda vrací Size objekt, který obsahuje šířku a výšku vypočtené velikosti. To je užitečné, pokud je požadováno znát velikost vykresleného tvaru předem. • size_in_points vlastnost vrací velikost tvaru měřená v bodech. Výsledkem je SizeF objekt obsahující šířku a výšku. Také můžete použít bounds_in_points majetek získat skutečné hranice tvaru.