Travailler avec des images
Aspose.Words permet aux utilisateurs de travailler avec des images de manière très flexible. Dans cet article, vous ne pouvez explorer que certaines des possibilités de travail avec des images.
Comment insérer une image
DocumentBuilder fournit plusieurs surcharges de la méthode InsertImage qui vous permettent d’insérer une image en ligne ou flottante. Si l’image est un métafichier EMF ou WMF, elle sera insérée dans le document au format métafichier. Toutes les autres images seront stockées au format PNG. La méthode InsertImage peut utiliser des images provenant de différentes sources:
- Depuis un fichier ou
URL
en passant un paramètre InsertImageString
- Depuis un flux en passant un paramètre
Stream
InsertImage - Depuis un objet Image en passant un paramètre Image InsertImage
- Depuis un tableau d’octets en passant un paramètre de tableau d’octets InsertImage
Pour chacune des méthodes InsertImage, il existe d’autres surcharges qui vous permettent d’insérer une image avec les options suivantes:
- En ligne ou flottant à une position spécifique, par exemple, InsertImage
- Échelle de pourcentage ou taille personnalisée, par exemple, InsertImage ; de plus, la méthode InsertImage renvoie un objet Shape qui vient d’être créé et inséré afin que vous puissiez modifier davantage les propriétés de la forme
Comment insérer une image {#insert-an-inline-image} en ligne
Transmettez une seule chaîne représentant un fichier contenant l’image à InsertImage pour insérer l’image dans le document en tant que graphique en ligne
L’exemple de code suivant montre comment insérer une image en ligne à la position du curseur dans un document:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
builder.InsertImage(dataDir + "Watermark.png"); | |
dataDir = dataDir + "DocumentBuilderInsertInlineImage_out.doc"; | |
doc.Save(dataDir); |
Comment insérer une image flottante
L’exemple de code suivant montre comment insérer une image flottante à partir d’un fichier ou d’un URL
à une position et une taille spécifiées:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
builder.InsertImage(dataDir + "Watermark.png", | |
RelativeHorizontalPosition.Margin, | |
100, | |
RelativeVerticalPosition.Margin, | |
100, | |
200, | |
100, | |
WrapType.Square); | |
dataDir = dataDir + "DocumentBuilderInsertFloatingImage_out.doc"; | |
doc.Save(dataDir); |
Comment extraire des images d’un document
Toutes les images sont stockées dans les nœuds Shape dans un Document. Pour extraire toutes les images ou images d’un type spécifique du document, procédez comme suit:
- Utilisez la méthode GetChildNodes pour sélectionner tous les nœuds Shape.
- Parcourez les collections de nœuds résultantes.
- Vérifiez la propriété booléenne HasImage.
- Extrayez les données d’image à l’aide de la propriété ImageData.
- Enregistrez les données d’image dans un fichier.
L’exemple de code suivant montre comment extraire des images d’un document et les enregistrer sous forme de fichiers:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir_WorkingWithImages(); | |
Document doc = new Document(dataDir + "Image.SampleImages.doc"); | |
NodeCollection shapes = doc.GetChildNodes(NodeType.Shape, true); | |
int imageIndex = 0; | |
foreach (Shape shape in shapes) | |
{ | |
if (shape.HasImage) | |
{ | |
string imageFileName = string.Format( | |
"Image.ExportImages.{0}_out{1}", imageIndex, FileFormatUtil.ImageTypeToExtension(shape.ImageData.ImageType)); | |
shape.ImageData.Save(dataDir + imageFileName); | |
imageIndex++; | |
} | |
} |
Comment insérer un code-barres sur chaque page de document
Cet exemple vous montre comment ajouter des codes-barres identiques ou différents sur toutes les pages ou des pages spécifiques d’un document Word. Il n’existe pas de moyen direct d’ajouter des codes-barres sur toutes les pages d’un document, mais vous pouvez utiliser les méthodes MoveToSection, MoveToHeaderFooter et InsertImage pour vous déplacer vers n’importe quelle section ou en-têtes/pieds de page et insérer les images de codes-barres comme vous pouvez le voir dans le code suivant.
L’exemple de code suivant montre comment insérer une image de code-barres sur chaque page d’un document:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir_WorkingWithImages(); | |
// Create a blank documenet. | |
Document doc = new Document(); | |
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.FirstSection, 1, HeaderFooterType.FooterPrimary); | |
for (int i = 1; i < numPages; i++) | |
{ | |
// Clone the first section and add it into the end of the document. | |
Section cloneSection = (Section)doc.FirstSection.Clone(false); | |
cloneSection.PageSetup.SectionStart = SectionStart.NewPage; | |
doc.AppendChild(cloneSection); | |
// Insert the barcode and other information into the footer of the section. | |
InsertBarcodeIntoFooter(builder, cloneSection, i, HeaderFooterType.FooterPrimary); | |
} | |
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); |
Verrouiller le rapport hauteur/largeur de l’image
Le rapport hauteur/largeur d’une forme géométrique est le rapport de ses tailles dans différentes dimensions. Vous pouvez verrouiller le rapport hauteur/largeur de l’image à l’aide de AspectRatioLocked. La valeur par défaut du rapport hauteur/largeur de la forme dépend du ShapeType. Il s’agit de true pour ShapeType.Image
et false pour les autres types de formes.
L’exemple de code suivant montre comment utiliser les proportions:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
var shape = builder.InsertImage(dataDir + "Test.png"); | |
shape.AspectRatioLocked = false; | |
dataDir = dataDir + "Shape_AspectRatioLocked_out.doc"; | |
// Save the document to disk. | |
doc.Save(dataDir); |
Comment obtenir les limites réelles de la forme en points
Si vous souhaitez que le cadre de délimitation réel de la forme soit rendu sur la page, vous pouvez y parvenir en utilisant la propriété BoundsInPoints.
L’exemple de code suivant montre comment utiliser cette propriété:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
var shape = builder.InsertImage(dataDir + "Test.png"); | |
shape.AspectRatioLocked = false; | |
Console.Write("\nGets the actual bounds of the shape in points."); | |
Console.WriteLine(shape.GetShapeRenderer().BoundsInPoints); |
Recadrer les images
Le recadrage d’une image fait généralement référence à la suppression des parties extérieures indésirables d’une image pour aider à améliorer le cadrage. Il est également utilisé pour supprimer certaines parties d’une image afin d’augmenter la mise au point sur une zone particulière.
L’exemple de code suivant montre comment y parvenir à l’aide de Aspose.Words API:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir_WorkingWithImages(); | |
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-.NET | |
public static void CropImage(string inPath, string outPath, int left, int top,int width, int height) | |
{ | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
Image img = Image.FromFile(inPath); | |
int effectiveWidth = img.Width - width; | |
int effectiveHeight = img.Height - height; | |
Shape croppedImage = builder.InsertImage(img, | |
ConvertUtil.PixelToPoint(img.Width - effectiveWidth), | |
ConvertUtil.PixelToPoint(img.Height - effectiveHeight)); | |
double widthRatio = croppedImage.Width / ConvertUtil.PixelToPoint(img.Width); | |
double heightRatio = croppedImage.Height / ConvertUtil.PixelToPoint(img.Height); | |
if (widthRatio< 1) | |
croppedImage.ImageData.CropRight = 1 - widthRatio; | |
if (heightRatio< 1) | |
croppedImage.ImageData.CropBottom = 1 - heightRatio; | |
float leftToWidth = (float)left / img.Width; | |
float topToHeight = (float)top / img.Height; | |
croppedImage.ImageData.CropLeft = leftToWidth; | |
croppedImage.ImageData.CropRight = croppedImage.ImageData.CropRight - leftToWidth; | |
croppedImage.ImageData.CropTop = topToHeight; | |
croppedImage.ImageData.CropBottom = croppedImage.ImageData.CropBottom - topToHeight; | |
croppedImage.GetShapeRenderer().Save(outPath, new ImageSaveOptions(SaveFormat.Jpeg)); | |
} |
Enregistrer les images au format WMF
Aspose.Words fournit des fonctionnalités pour enregistrer toutes les images disponibles dans un document au format WMF lors de la conversion de DOCX en RTF.
L’exemple de code suivant montre comment enregistrer des images au format WMF avec les options d’enregistrement RTF:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
string fileName = "TestFile.doc"; | |
Document doc = new Document(dataDir + fileName); | |
RtfSaveOptions saveOpts = new RtfSaveOptions(); | |
saveOpts.SaveImagesAsWmf = true; | |
doc.Save(dataDir + "output.rtf", saveOpts); |