Werk Met Beelde

Aspose.Words laat gebruikers toe om op’n baie buigsame manier met beelde te werk. In hierdie artikel kan jy slegs sommige van die moontlikhede van werk met beelde verken.

Hoe Om’n Prent {#insert-an-image}In Te Voeg

DocumentBuilder bied verskeie oorladings van die InsertImage metode wat jou toelaat om’n inlyn of drywende beeld in te voeg. As die beeld’n EMF of WMF metafile is, sal dit in die dokument in metafile-formaat ingevoeg word. Alle ander beelde sal in PNG formaat gestoor word. Die InsertImage metode kan beelde van verskillende bronne gebruik:

  • Van’n lêer of URL deur’n String parameter InsertImagete slaag
  • Van’n stroom deur’n Stream parameter InsertImage
  • Van’n Beeld voorwerp deur’n Beeld parameter InsertImage
  • Van’n byte skikking deur’n byte skikking parameter InsertImage

Vir elk van die InsertImage metodes, is daar verdere oorladings wat jou toelaat om’n beeld met die volgende opsies in te voeg:

  • Inlyn of swaai op’n spesifieke posisie, byvoorbeeld, InsertImage
  • Persentasie skaal of persoonlike grootte, byvoorbeeld, InsertImage; verder, die InsertImage metode gee’n Shape voorwerp wat net geskep en ingevoeg sodat jy verder kan verander eienskappe van Die Vorm

Hoe Om’n Inline Beeld {#insert-an-inline-image}In Te Voeg

Gee’n enkele string wat’n lêer verteenwoordig wat die beeld bevat na InsertImage om die beeld in die dokument as’n inlyngrafiek in te voeg.

Die volgende kode voorbeeld toon hoe om’n inline beeld by die wyser posisie in’n dokument in te voeg:

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

Hoe Om’n Drywende Beeld {#insert-a-floating-image}In Te Voeg

Die volgende kode voorbeeld toon hoe om’n drywende beeld van’n lêer of URL in’n gespesifiseerde posisie en grootte in te voeg:

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

Hoe Om Beelde uit’n Dokument {#how-to-extract-images-from-a-document}Te Onttrek

Alle beelde word gestoor binne Shape nodes in a Document. Volg hierdie stappe om alle beelde of beelde met spesifieke tipe uit die dokument te onttrek:

  • Gebruik die GetChildNodes metode om alle Shape nodes te kies.
  • Iterate deur die gevolglike node versamelings.
  • Gaan die HasImage booleaanse eienskap na.
  • Onttrek beelddata met behulp van die ImageData eienskap.
  • Stoor beelddata na’n lêer.

Die volgende kode voorbeeld toon hoe om beelde uit’n dokument te onttrek en stoor hulle as lêers:

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

Hoe Om Strepieskode Op elke Dokumentbladsy {#how-to-insert-barcode-on-each-documen-page}In Te Voeg

Hierdie voorbeeld toon dat jy dieselfde of verskillende strepieskode op alle of spesifieke bladsye van’n Word-dokument moet byvoeg. Daar is geen direkte manier om strepieskode op alle bladsye van’n dokument by te voeg nie, maar jy kan die MoveToSection, MoveToHeaderFooter en InsertImage metodes gebruik om na enige afdeling of koptekste/voetskrifte te beweeg en die strepieskode-beelde in te voeg soos jy in die volgende kode kan sien.

Die volgende kode voorbeeld toon hoe om’n barcode beeld in te voeg op elke bladsy van’n dokument:

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

Sluit Aspekverhouding van Beeld

Die aspekverhouding van’n meetkundige vorm is die verhouding van sy groottes in verskillende dimensies. U kan die beeldverhouding met AspectRatioLocked sluit. Die standaard waarde van die vorm se aspek verhouding hang af van die ShapeType. Dit is true vir ShapeType.Image en false vir ander vorm tipes.

Die volgende kode voorbeeld toon hoe om te werk met aspek verhouding:

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

Hoe Om Werklike Grense Van Vorm in Punte {#how-to-get-actual-bounds-of-shape-in-points}Te Kry

As jy die werklike grens boks van die vorm wil hê soos op die bladsy weergegee, kan jy dit bereik deur die BoundsInPoints eienskap te gebruik.

Die volgende kode voorbeeld toon hoe om hierdie eiendom te gebruik:

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

Sny Beelde

Die sny van’n beeld verwys gewoonlik na die verwydering van die ongewenste buitenste dele van’n beeld om die raamwerk te verbeter. Dit word ook gebruik vir die verwydering van sommige van die dele van’n beeld om die fokus op’n spesifieke gebied te verhoog.

Die volgende kode voorbeeld toon hoe om dit te bereik met behulp van 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));
}

Stoor Beelde as WMF

Aspose.Words bied funksionaliteit om al die beskikbare beelde in’n dokument te stoor WMFformaat terwyl die omskakeling van DOCX na RTF.

Die volgende kode voorbeeld toon hoe om beelde te stoor as WMF met RTF stoor opsies:

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