Ejemplo n.º 1
0
 protected void ProcessImage(XmlElement currentBlock, bool inlined,
         Picture picture, String url)
 {
     XmlElement externalGraphic = foDocumentFacade
            .CreateExternalGraphic(url);
     WordToFoUtils.SetPictureProperties(picture, externalGraphic);
     currentBlock.AppendChild(externalGraphic);
 }
Ejemplo n.º 2
0
        /**
         * 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"));
        }
Ejemplo n.º 3
0
        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");
            }
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
 protected override void ProcessImage(XmlElement currentBlock, bool inlined,
         Picture picture)
 {
     // ignore
 }