protected void ProcessImage(XmlElement currentBlock, bool inlined, Picture picture, String url) { XmlElement externalGraphic = foDocumentFacade .CreateExternalGraphic(url); WordToFoUtils.SetPictureProperties(picture, externalGraphic); currentBlock.AppendChild(externalGraphic); }
/** * This method shall store image bytes in external file and convert it if * necessary. Images shall be stored using PNG format (for bitmap) or SVG * (for vector). Other formats may be not supported by your XSL FO * processor. * <p> * Please note the * {@link WordToFoUtils#setPictureProperties(Picture, XmlElement)} method. * * @param currentBlock * currently processed FO element, like <tt>fo:block</tt>. Shall * be used as parent of newly created * <tt>fo:external-graphic</tt> or * <tt>fo:instream-foreign-object</tt> * @param inlined * if image is inlined * @param picture * HWPF object, contained picture data and properties */ protected override void ProcessImage(XmlElement currentBlock, bool inlined, Picture picture) { PicturesManager fileManager = GetPicturesManager(); if (fileManager != null) { String url = fileManager .SavePicture(picture.GetContent(), picture.SuggestPictureType(), picture.SuggestFullFileName()); if (!string.IsNullOrEmpty(url)) { ProcessImage(currentBlock, inlined, picture, url); return; } } // no default implementation -- skip currentBlock.AppendChild(foDocumentFacade.Document .CreateComment("Image link to '" + picture.SuggestFullFileName() + "' can be here")); }
public static void SetPictureProperties(Picture picture, XmlElement graphicXmlElement) { int horizontalScale = picture.HorizontalScalingFactor; int verticalScale = picture.VerticalScalingFactor; if (horizontalScale > 0) { graphicXmlElement .SetAttribute("content-width", ((picture.DxaGoal * horizontalScale / 1000) / TWIPS_PER_PT) + "pt"); } else graphicXmlElement.SetAttribute("content-width", (picture.DxaGoal / TWIPS_PER_PT) + "pt"); if (verticalScale > 0) graphicXmlElement .SetAttribute("content-height", ((picture.DyaGoal * verticalScale / 1000) / TWIPS_PER_PT) + "pt"); else graphicXmlElement.SetAttribute("content-height", (picture.DyaGoal / TWIPS_PER_PT) + "pt"); if (horizontalScale <= 0 || verticalScale <= 0) { graphicXmlElement.SetAttribute("scaling", "uniform"); } else { graphicXmlElement.SetAttribute("scaling", "non-uniform"); } graphicXmlElement.SetAttribute("vertical-align", "text-bottom"); if (picture.DyaCropTop != 0 || picture.DxaCropRight != 0 || picture.DyaCropBottom != 0 || picture.DxaCropLeft != 0) { int rectTop = picture.DyaCropTop / TWIPS_PER_PT; int rectRight = picture.DxaCropRight / TWIPS_PER_PT; int rectBottom = picture.DyaCropBottom / TWIPS_PER_PT; int rectLeft = picture.DxaCropLeft / TWIPS_PER_PT; graphicXmlElement.SetAttribute("clip", "rect(" + rectTop + "pt, " + rectRight + "pt, " + rectBottom + "pt, " + rectLeft + "pt)"); graphicXmlElement.SetAttribute("overflow", "hidden"); } }
protected void ProcessImage(XmlElement currentBlock, bool inlined, Picture picture, String imageSourcePath) { int aspectRatioX = picture.HorizontalScalingFactor; int aspectRatioY = picture.VerticalScalingFactor; StringBuilder style = new StringBuilder(); float imageWidth; float imageHeight; float cropTop; float cropBottom; float cropLeft; float cropRight; if (aspectRatioX > 0) { imageWidth = picture.DxaGoal * aspectRatioX / 1000 / AbstractWordUtils.TWIPS_PER_INCH; cropRight = picture.DxaCropRight * aspectRatioX / 1000 / AbstractWordUtils.TWIPS_PER_INCH; cropLeft = picture.DxaCropLeft * aspectRatioX / 1000 / AbstractWordUtils.TWIPS_PER_INCH; } else { imageWidth = picture.DxaGoal / AbstractWordUtils.TWIPS_PER_INCH; cropRight = picture.DxaCropRight / AbstractWordUtils.TWIPS_PER_INCH; cropLeft = picture.DxaCropLeft / AbstractWordUtils.TWIPS_PER_INCH; } if (aspectRatioY > 0) { imageHeight = picture.DyaGoal * aspectRatioY / 1000 / AbstractWordUtils.TWIPS_PER_INCH; cropTop = picture.DyaCropTop * aspectRatioY / 1000 / AbstractWordUtils.TWIPS_PER_INCH; cropBottom = picture.DyaCropBottom * aspectRatioY / 1000 / AbstractWordUtils.TWIPS_PER_INCH; } else { imageHeight = picture.DyaGoal / AbstractWordUtils.TWIPS_PER_INCH; cropTop = picture.DyaCropTop / AbstractWordUtils.TWIPS_PER_INCH; cropBottom = picture.DyaCropBottom / AbstractWordUtils.TWIPS_PER_INCH; } XmlElement root; if (cropTop != 0 || cropRight != 0 || cropBottom != 0 || cropLeft != 0) { float visibleWidth = Math.Max(0, imageWidth - cropLeft - cropRight); float visibleHeight = Math.Max(0, imageHeight - cropTop - cropBottom); root = htmlDocumentFacade.CreateBlock(); htmlDocumentFacade.AddStyleClass(root, "d", "vertical-align:text-bottom;width:" + visibleWidth + "in;height:" + visibleHeight + "in;"); // complex XmlElement inner = htmlDocumentFacade.CreateBlock(); htmlDocumentFacade.AddStyleClass(inner, "d", "position:relative;width:" + visibleWidth + "in;height:" + visibleHeight + "in;overflow:hidden;"); root.AppendChild(inner); XmlElement image = htmlDocumentFacade.CreateImage(imageSourcePath); htmlDocumentFacade.AddStyleClass(image, "i", "position:absolute;left:-" + cropLeft + ";top:-" + cropTop + ";width:" + imageWidth + "in;height:" + imageHeight + "in;"); inner.AppendChild(image); style.Append("overflow:hidden;"); } else { root = htmlDocumentFacade.CreateImage(imageSourcePath); root.SetAttribute("style", "width:" + imageWidth + "in;height:" + imageHeight + "in;vertical-align:text-bottom;"); } currentBlock.AppendChild(root); }
protected override void ProcessImage(XmlElement currentBlock, bool inlined, Picture picture) { // ignore }