public void TestFindPackagePictureData() { XWPFDocument doc = XWPFTestDataSamples.OpenSampleDocument("issue_51265_1.docx"); byte[] nature1 = XWPFTestDataSamples.GetImage("nature1.gif"); XWPFPictureData part = doc.FindPackagePictureData(nature1, (int)PictureType.GIF); Assert.IsNotNull(part); Assert.IsTrue(doc.AllPictures.Contains(part)); Assert.IsTrue(doc.AllPackagePictures.Contains(part)); doc.Package.Revert(); }
/** * Adds a picture to the document. * * @param pictureData The picture data * @param format The format of the picture. * * @return the index to this picture (0 based), the Added picture can be obtained from {@link #getAllPictures()} . * @throws InvalidFormatException */ public String AddPictureData(byte[] pictureData, int format) { XWPFPictureData xwpfPicData = document.FindPackagePictureData(pictureData, format); POIXMLRelation relDesc = XWPFPictureData.RELATIONS[format]; if (xwpfPicData == null) { /* Part doesn't exist, create a new one */ int idx = document.GetNextPicNameNumber(format); xwpfPicData = (XWPFPictureData)CreateRelationship(relDesc, XWPFFactory.GetInstance(), idx); /* write bytes to new part */ PackagePart picDataPart = xwpfPicData.GetPackagePart(); Stream out1 = null; try { out1 = picDataPart.GetOutputStream(); out1.Write(pictureData, 0, pictureData.Length); } catch (IOException e) { throw new POIXMLException(e); } finally { try { if (out1 != null) { out1.Dispose(); } } catch (IOException) { // ignore } } document.RegisterPackagePictureData(xwpfPicData); pictures.Add(xwpfPicData); return(GetRelationId(xwpfPicData)); } else if (!GetRelations().Contains(xwpfPicData)) { /* * Part already existed, but was not related so far. Create * relationship to the already existing part and update * POIXMLDocumentPart data. */ PackagePart picDataPart = xwpfPicData.GetPackagePart(); // TODO add support for TargetMode.EXTERNAL relations. TargetMode targetMode = TargetMode.Internal; PackagePartName partName = picDataPart.PartName; String relation = relDesc.Relation; PackageRelationship relShip = GetPackagePart().AddRelationship(partName, targetMode, relation); String id = relShip.Id; AddRelation(id, xwpfPicData); pictures.Add(xwpfPicData); return(id); } else { /* Part already existed, Get relation id and return it */ return(GetRelationId(xwpfPicData)); } }