Lucrul cu imagini

Aspose.Words permite utilizatorilor să lucreze cu imagini într-un mod foarte flexibil. În acest articol, poți explora doar câteva dintre posibilitățile de a lucra cu imagini.

Cum să Inserezi o imagine

DocumentBuilder oferă mai multe suprascrieri ale metodei InsertImage care îți permite să inserezi o imagine în linie sau plutitoare. Dacă imaginea este un fișier EMF sau WMF meta-fișier, acesta va fi introdus în document în format de fișier meta. Toate celelalte imagini vor fi stocate în formatul PNG. Metoda InsertImage poate folosi imagini din diferite surse:

  • Din fișier sau URL trecând un String parametru InsertImage
  • De la un flux prin trecerea unui Stream parametru InsertImage
  • Din obiectul Imagine prin transmiterea unui parametru imagine InsertImage
  • din matricea de octeți prin transmiterea unui parametru de matrice de octeți InsertImage

Pentru fiecare dintre cele InsertImage metode există suprascrieri suplimentare care îți permit să inserezi o imagine cu următoarele opțiuni:

  • Inline sau plutitoare la o poziție specifică, de exemplu, InsertImage
  • Scala procentuală sau dimensiune personalizată, de exemplu, InsertImage; mai mult, metoda InsertImage returnează un obiect Shape care tocmai a fost creat și inserat astfel încât să puteți modifica în continuare proprietățile formei

Cum să introduceți o imagine în linie

Treceți un șir unic reprezentând un fișier care conține imaginea la InsertImage pentru a insera imaginea în document ca o imagine în linie

Exemplul de cod următor arată cum să inserezi o imagine în linie la poziția cursorului într-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);

Cum să inserezi o imagine plutitoare

Exemplul următor de cod arată cum să inserezi o imagine plutitoare dintr-un fișier sau URL la o poziție și dimensiune specificate:

// 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);

Cum să extragi imagini dintr-un document

Toate imaginile sunt stocate în Shape noduri într-un Document. Pentru a extrage toate imaginile sau imagini de tip specific din document, urmați acești pași:

  • Utilizaţi metoda GetChildNodes pentru a selecta toate nodurile Shape.
  • Parcurge colecțiile de noduri rezultante.
  • Verificați proprietatea booleană HasImage.
  • Extrage datele imaginii folosind proprietatea ImageData.
  • Salvați datele imaginii într-un fișier.

Exemplul de cod următor arată cum să extragi imagini dintr-un document și să le salvezi ca fișiere:

// 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++;
}
}

Cum să inserez un cod de bare pe fiecare pagină de document

Acest exemplu demonstrează cum să adaugi același sau coduri de bare diferite pe toate sau paginile specifice ale unui document Word. Nu există o modalitate directă de a adăuga bare pe toate paginile unui document, dar puteți folosi metodele MoveToSection, MoveToHeaderFooter și InsertImage pentru a trece la orice secțiune sau antet/ subsol și pentru a insera imaginile cu bare ca puteți vedea în codul următor.

Exemplul de cod următor arată cum se introduce o imagine cu coduri de bare pe fiecare pagină dintr-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);
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
private static void InsertBarcodeIntoFooter(DocumentBuilder builder, Section section, int pageId, HeaderFooterType footerType)
{
// Move to the footer type in the specific section.
builder.MoveToSection(section.Document.IndexOf(section));
builder.MoveToHeaderFooter(footerType);
// Insert the barcode, then move to the next line and insert the ID along with the page number.
// Use pageId if you need to insert a different barcode on each page. 0 = First page, 1 = Second page etc.
builder.InsertImage(System.Drawing.Image.FromFile( RunExamples.GetDataDir_WorkingWithImages() + "Barcode1.png"));
builder.Writeln();
builder.Write("1234567890");
builder.InsertField("PAGE");
// Create a right aligned tab at the right margin.
double tabPos = section.PageSetup.PageWidth - section.PageSetup.RightMargin - section.PageSetup.LeftMargin;
builder.CurrentParagraph.ParagraphFormat.TabStops.Add(new TabStop(tabPos, TabAlignment.Right, TabLeader.None));
// Move to the right hand side of the page and insert the page and page total.
builder.Write(ControlChar.Tab);
builder.InsertField("PAGE");
builder.Write(" of ");
builder.InsertField("NUMPAGES");
}

Bloca raportul de aspect al imaginii

Raportul de aspect al unei forme geometrice este raportul dintre dimensiunile sale în diferite dimensiuni. Poţi bloca raportul dintre laturi al imaginii folosind AspectRatioLocked. Valoarea implicită a raportului de aspect al formei depinde de ShapeType. Este true pentru ShapeType.Image și false pentru tipurile de forme alte.

Exemplul de cod de mai sus arată cum se lucrează cu raportul de aspecte:

// 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);

Cum să obţii limitele reale ale formei în puncte

Dacă doriți caseta delimitatoare reală a formei așa cum este redată pe pagină, puteți obține acest lucru folosind proprietatea BoundsInPoints.

Exemplul de cod următor arată cum se folosește această proprietate:

// 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);

Crop Images

Decuparea unei imagini se referă de obicei la eliminarea părților exterioare neplăcute ale unei imagini pentru a ajuta la îmbunătățirea încadrării. Se folosește, de asemenea, pentru eliminarea unor părți dintr-o imagine pentru a crește focalizarea pe o anumită zonă.

Exemplul de cod următor arată cum să realizezi acest lucru folosind 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));
}

Salvează imaginile ca WMF

Aspose.Words oferă funcționalitatea de a salva toate imaginile disponibile dintr-un document la WMF format în timp ce se convertește DOCX pentru RTF.

Exemplul de cod următor arată cum să salvezi imagini ca WMF cu opțiuni de salvare 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);