protected internal override void DoDraw(SvgDrawContext context) { ResourceResolver resourceResolver = context.GetResourceResolver(); if (resourceResolver == null || this.attributesAndStyles == null) { return; } String uri = this.attributesAndStyles.Get(SvgConstants.Attributes.XLINK_HREF); PdfXObject xObject = resourceResolver.RetrieveImageExtended(uri); if (xObject == null) { return; } PdfCanvas currentCanvas = context.GetCurrentCanvas(); float x = 0; if (attributesAndStyles.ContainsKey(SvgConstants.Attributes.X)) { x = CssUtils.ParseAbsoluteLength(attributesAndStyles.Get(SvgConstants.Attributes.X)); } float y = 0; if (attributesAndStyles.ContainsKey(SvgConstants.Attributes.Y)) { y = CssUtils.ParseAbsoluteLength(attributesAndStyles.Get(SvgConstants.Attributes.Y)); } float width = 0; if (attributesAndStyles.ContainsKey(SvgConstants.Attributes.WIDTH)) { width = CssUtils.ParseAbsoluteLength(attributesAndStyles.Get(SvgConstants.Attributes.WIDTH)); } float height = 0; if (attributesAndStyles.ContainsKey(SvgConstants.Attributes.HEIGHT)) { height = CssUtils.ParseAbsoluteLength(attributesAndStyles.Get(SvgConstants.Attributes.HEIGHT)); } if (attributesAndStyles.ContainsKey(SvgConstants.Attributes.PRESERVE_ASPECT_RATIO)) { } // TODO RND-876 float v = y + height; currentCanvas.AddXObject(xObject, width, 0, 0, -height, x, v); }
protected internal override void DoDraw(SvgDrawContext context) { ResourceResolver resourceResolver = context.GetResourceResolver(); if (resourceResolver == null || this.attributesAndStyles == null) { return; } String uri = this.attributesAndStyles.Get(SvgConstants.Attributes.XLINK_HREF); PdfXObject xObject = resourceResolver.RetrieveImageExtended(uri); if (xObject == null) { return; } PdfCanvas currentCanvas = context.GetCurrentCanvas(); float x = 0; if (attributesAndStyles.ContainsKey(SvgConstants.Attributes.X)) { x = CssUtils.ParseAbsoluteLength(attributesAndStyles.Get(SvgConstants.Attributes.X)); } float y = 0; if (attributesAndStyles.ContainsKey(SvgConstants.Attributes.Y)) { y = CssUtils.ParseAbsoluteLength(attributesAndStyles.Get(SvgConstants.Attributes.Y)); } float width = 0; if (attributesAndStyles.ContainsKey(SvgConstants.Attributes.WIDTH)) { width = CssUtils.ParseAbsoluteLength(attributesAndStyles.Get(SvgConstants.Attributes.WIDTH)); } float height = 0; if (attributesAndStyles.ContainsKey(SvgConstants.Attributes.HEIGHT)) { height = CssUtils.ParseAbsoluteLength(attributesAndStyles.Get(SvgConstants.Attributes.HEIGHT)); } String preserveAspectRatio = ""; if (attributesAndStyles.ContainsKey(SvgConstants.Attributes.PRESERVE_ASPECT_RATIO)) { preserveAspectRatio = attributesAndStyles.Get(SvgConstants.Attributes.PRESERVE_ASPECT_RATIO); } preserveAspectRatio = preserveAspectRatio.ToLowerInvariant(); if (!SvgConstants.Values.NONE.Equals(preserveAspectRatio) && !(width == 0 || height == 0)) { float normalizedWidth; float normalizedHeight; if (xObject.GetWidth() / width > xObject.GetHeight() / height) { normalizedWidth = width; normalizedHeight = xObject.GetHeight() / xObject.GetWidth() * width; } else { normalizedWidth = xObject.GetWidth() / xObject.GetHeight() * height; normalizedHeight = height; } switch (preserveAspectRatio.ToLowerInvariant()) { case SvgConstants.Values.XMIN_YMIN: { break; } case SvgConstants.Values.XMIN_YMID: { y += Math.Abs(normalizedHeight - height) / 2; break; } case SvgConstants.Values.XMIN_YMAX: { y += Math.Abs(normalizedHeight - height); break; } case SvgConstants.Values.XMID_YMIN: { x += Math.Abs(normalizedWidth - width) / 2; break; } case SvgConstants.Values.XMID_YMAX: { x += Math.Abs(normalizedWidth - width) / 2; y += Math.Abs(normalizedHeight - height); break; } case SvgConstants.Values.XMAX_YMIN: { x += Math.Abs(normalizedWidth - width); break; } case SvgConstants.Values.XMAX_YMID: { x += Math.Abs(normalizedWidth - width); y += Math.Abs(normalizedHeight - height) / 2; break; } case SvgConstants.Values.XMAX_YMAX: { x += Math.Abs(normalizedWidth - width); y += Math.Abs(normalizedHeight - height); break; } case SvgConstants.Values.DEFAULT_ASPECT_RATIO: default: { x += Math.Abs(normalizedWidth - width) / 2; y += Math.Abs(normalizedHeight - height) / 2; break; } } width = normalizedWidth; height = normalizedHeight; } float v = y + height; currentCanvas.AddXObject(xObject, width, 0, 0, -height, x, v); }