/** * 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.Close(); } } 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. RelationPart rp = AddRelation(null, XWPFRelation.IMAGES, xwpfPicData); pictures.Add(xwpfPicData); return(rp.Relationship.Id); } else { /* Part already existed, Get relation id and return it */ return(GetRelationId(xwpfPicData)); } }
public override bool Equals(object obj) { if (obj == this) { return(true); } if (obj == null || !(obj is XWPFPictureData)) { return(false); } XWPFPictureData xwpfPictureData = (XWPFPictureData)obj; PackagePart packagePart1 = xwpfPictureData.GetPackagePart(); PackagePart packagePart2 = this.GetPackagePart(); if (packagePart1 != null && packagePart2 == null || packagePart1 == null && packagePart2 != null) { return(false); } if (packagePart2 != null) { OPCPackage package1 = packagePart1.Package; OPCPackage package2 = packagePart2.Package; if (package1 != null && package2 == null || package1 == null && package2 != null || package2 != null && !package2.Equals((object)package1)) { return(false); } } if (!this.Checksum.Equals(xwpfPictureData.Checksum)) { return(false); } return(Arrays.Equals((object)this.GetData(), (object)xwpfPictureData.GetData())); }
public string AddPictureData(byte[] pictureData, int format) { XWPFPictureData packagePictureData = this.document.FindPackagePictureData(pictureData, format); POIXMLRelation descriptor = XWPFPictureData.RELATIONS[format]; if (packagePictureData == null) { int nextPicNameNumber = this.document.GetNextPicNameNumber(format); XWPFPictureData relationship = (XWPFPictureData)this.CreateRelationship(descriptor, (POIXMLFactory)XWPFFactory.GetInstance(), nextPicNameNumber); PackagePart packagePart = relationship.GetPackagePart(); Stream stream = (Stream)null; try { stream = packagePart.GetOutputStream(); stream.Write(pictureData, 0, pictureData.Length); } catch (IOException ex) { throw new POIXMLException((Exception)ex); } finally { try { stream.Close(); } catch (IOException ex) { } } this.document.RegisterPackagePictureData(relationship); this.pictures.Add(relationship); return(this.GetRelationId((POIXMLDocumentPart)relationship)); } if (this.GetRelations().Contains((POIXMLDocumentPart)packagePictureData)) { return(this.GetRelationId((POIXMLDocumentPart)packagePictureData)); } PackagePart packagePart1 = packagePictureData.GetPackagePart(); TargetMode targetMode = TargetMode.Internal; PackagePartName partName = packagePart1.PartName; string relation = descriptor.Relation; string id = this.GetPackagePart().AddRelationship(partName, targetMode, relation).Id; this.AddRelation(id, (POIXMLDocumentPart)packagePictureData); this.pictures.Add(packagePictureData); return(id); }
public override bool Equals(Object obj) { /** * In case two objects ARE Equal, but its not the same instance, this * implementation will always run through the whole * byte-array-comparison before returning true. If this will turn into a * performance issue, two possible approaches are available:<br> * a) Use the Checksum only and take the risk that two images might have * the same CRC32 sum, although they are not the same.<br> * b) Use a second (or third) Checksum algorithm to minimise the chance * that two images have the same Checksums but are not equal (e.g. * CRC32, MD5 and SHA-1 Checksums, Additionally compare the * data-byte-array lengths). */ if (obj == this) { return(true); } if (obj == null) { return(false); } if (!(obj is XWPFPictureData)) { return(false); } XWPFPictureData picData = (XWPFPictureData)obj; PackagePart foreignPackagePart = picData.GetPackagePart(); PackagePart ownPackagePart = this.GetPackagePart(); if ((foreignPackagePart != null && ownPackagePart == null) || (foreignPackagePart == null && ownPackagePart != null)) { return(false); } if (ownPackagePart != null) { OPCPackage foreignPackage = foreignPackagePart.Package; OPCPackage ownPackage = ownPackagePart.Package; if ((foreignPackage != null && ownPackage == null) || (foreignPackage == null && ownPackage != null)) { return(false); } if (ownPackage != null) { if (!ownPackage.Equals(foreignPackage)) { return(false); } } } long foreignChecksum = picData.Checksum; long localChecksum = Checksum; if (!(localChecksum.Equals(foreignChecksum))) { return(false); } return(Arrays.Equals(this.Data, picData.Data)); }