예제 #1
0
        //private IEnumerable<OXmlElement> Image(HtmlDocNodeTagImg imgTag)
        private void Image(HtmlDocNodeTagImg imgTag)
        {
            HtmlImage htmlImage = GetHtmlImage(imgTag);

            if (htmlImage.File == null)
            {
                pb.Trace.WriteLine("can't add picture without file");
                return;
            }

            if (_trace)
            {
                pb.Trace.WriteLine($"Image()         : add picture                 \"{zPath.GetFileName(htmlImage.File)}\" width {htmlImage.Width} height {htmlImage.Height} {(htmlImage.NoneAlign ? "noneAlign " : "" )}{(htmlImage.LeftAlign ? "leftAlign " : "")}{(htmlImage.RightAlign ? "rightAlign" : "")}");
            }
            if (_paragraph != null)
            {
                if (_trace)
                {
                    pb.Trace.WriteLine("Image()         : remove stored paragraph");
                }
                _paragraph = null;
            }
            if (_line != null)
            {
                if (_trace)
                {
                    pb.Trace.WriteLine("Image()         : remove stored new line");
                }
                _line = null;
            }
            _htmlImages.Add(htmlImage);

            //int horizontalPosition;
            //int verticalPosition;
            //if (_imageHorizontalPosition > 0 && _imageHorizontalPosition + htmlImage.Width > _maxImageHorizontalPosition)
            //{
            //    horizontalPosition = 0;
            //    _imageVerticalPosition += _imageHeight + _imageMarge;
            //    verticalPosition = _imageVerticalPosition;
            //    _imageHorizontalPosition = (int)htmlImage.Width + _imageMarge;
            //    _imageHeight = (int)htmlImage.Height;
            //}
            //else
            //{
            //    horizontalPosition = _imageHorizontalPosition;
            //    _imageHorizontalPosition += (int)htmlImage.Width + _imageMarge;
            //    verticalPosition = _imageVerticalPosition;
            //    _imageHeight = Math.Max(_imageHeight, (int)htmlImage.Height);
            //}
            //yield return new OXmlPictureElement
            //{
            //    File = htmlImage.File,
            //    Width = htmlImage.Width,
            //    Height = htmlImage.Height,
            //    PictureDrawing = new OXmlAnchorPictureDrawing
            //    {
            //        // SquareSize = 21800
            //        //Wrap = new OXmlAnchorWrapTight { WrapPolygon = OXmlDoc.CreateWrapPolygon(21800) },
            //        Wrap = new OXmlAnchorWrapTight { WrapPolygon = new OXmlSquare { HorizontalSize = 21800 } },
            //        HorizontalRelativeFrom = DW.HorizontalRelativePositionValues.Margin,
            //        HorizontalPositionOffset = horizontalPosition,
            //        VerticalRelativeFrom = DW.VerticalRelativePositionValues.Paragraph,
            //        VerticalPositionOffset = verticalPosition
            //    }
            //};
        }
예제 #2
0
        private IEnumerable <OXmlElement> GetImages(bool endOfDocument = false)
        {
            // 300 px ->  7.94 cm
            // 450 px -> 11.91 cm
            // largeur 18.5 cm = 694 px
            // largeur 16 cm   = 600 px
            // example :
            // leftalign width300 - nonealign width300
            // leftalign width300 - nonealign width300
            // example :
            // leftalign width300 - nonealign width300
            // nonealign width450
            // example :
            // nonealign width450
            // nonealign width450

            // ...
            // img       112509336.jpg   width300 leftalign
            // ...
            // img       112509351.jpg   width450 nonealign
            // img       112509354.jpg   width450 nonealign
            // ...
            // img       112509392.jpg   width300 leftalign
            // img       112509399.jpg   width300 nonealign
            // img       112509404.jpg   width450 nonealign
            // ...
            // img       112509359.jpg   width450 nonealign
            // ...
            // img       112509426.jpg   width300 leftalign
            // img       112509432.jpg   width300 nonealign
            // img       112509438.jpg   width300 leftalign
            // img       112509447.jpg   width300 nonealign
            // ...

            // ...
            // Paragraph
            // Picture   112509336.jpg   AnchorWrapSquare          Width 300
            // ...
            // Paragraph
            // Picture   112509351.jpg   AnchorWrapTopAndBottom    Width 300  HorizontalPositionOffset   2
            // Picture   112509354.jpg   AnchorWrapTopAndBottom    Width 300  HorizontalPositionOffset 305
            // ...
            // Paragraph Style: "TinyParagraph"
            // Picture   112509392.jpg   AnchorWrapTopAndBottom    Width 300  HorizontalPositionOffset   2
            // Picture   112509399.jpg   AnchorWrapTopAndBottom    Width 300  HorizontalPositionOffset 305
            // Paragraph
            // Picture   112509404.jpg   Inline                    Width 300
            // ...
            // Paragraph
            // Picture   112509359.jpg   Inline                    Width 300
            // ...
            // Paragraph Style: "TinyParagraph"
            // Picture   112509426.jpg   AnchorWrapTopAndBottom    Width 300  HorizontalPositionOffset   2
            // Picture   112509432.jpg   AnchorWrapTopAndBottom    Width 300  HorizontalPositionOffset 305
            // Paragraph
            // Picture   112509438.jpg   AnchorWrapTopAndBottom    Width 300  HorizontalPositionOffset   2
            // Picture   112509447.jpg   AnchorWrapTopAndBottom    Width 300  HorizontalPositionOffset 305
            // ...

            while (_htmlImages.Count > 0)
            {
                // calculate nb of image horizontaly (_maxImageHorizontalSize)
                int       nb             = 1;
                HtmlImage htmlImage      = _htmlImages[0];
                bool      nextImageToBig = false;
                //bool leftAlign = true;
                //if (htmlImage.RightAlign)
                //    leftAlign = false;
                //if (!htmlImage.NoneAlign)
                //{
                int width = (int)htmlImage.Width;
                for (int i = 1; i < _htmlImages.Count; i++)
                {
                    HtmlImage htmlImage2 = _htmlImages[i];
                    if (htmlImage.RightAlign != htmlImage2.RightAlign)
                    {
                        break;
                    }
                    width += (int)htmlImage2.Width;
                    if (width > _maxImageHorizontalSize)
                    {
                        nextImageToBig = true;
                        break;
                    }
                    nb++;
                }
                //}

                if (_htmlImages.Count > nb)
                {
                    if (_trace)
                    {
                        pb.Trace.WriteLine($"GetImages()     : send paragraph              \"{_imageSeparationParagraphStyle}\"");
                    }
                    yield return(new OXmlParagraphElement {
                        Style = _imageSeparationParagraphStyle
                    });
                }
                else
                {
                    if (_trace)
                    {
                        pb.Trace.WriteLine("GetImages()     : send paragraph");
                    }
                    yield return(new OXmlParagraphElement());
                }

                if (nb == 1)
                {
                    OXmlPictureDrawing pictureDrawing;
                    if (htmlImage.NoneAlign || nextImageToBig || (endOfDocument && _htmlImages.Count == 1))
                    {
                        // Inline
                        if (_trace)
                        {
                            pb.Trace.WriteLine($"GetImages()     : send picture                inline \"{zPath.GetFileName(htmlImage.File)}\"");
                        }
                        //pictureDrawing = new OXmlInlinePictureDrawing();
                        pictureDrawing = new OXmlAnchorPictureDrawing
                        {
                            Wrap = new OXmlAnchorWrapTopAndBottom(),
                            HorizontalPosition = new OXmlHorizontalPosition {
                                RelativeFrom = DW.HorizontalRelativePositionValues.Margin, HorizontalAlignment = "center"
                            },
                            VerticalPosition = new OXmlVerticalPosition {
                                RelativeFrom = DW.VerticalRelativePositionValues.Line, VerticalAlignment = "top"
                            }
                        };
                    }
                    else
                    {
                        // AnchorWrapSquare
                        if (_trace)
                        {
                            pb.Trace.WriteLine($"GetImages()     : send picture                anchor wrap square \"{zPath.GetFileName(htmlImage.File)}\"");
                        }
                        pictureDrawing = new OXmlAnchorPictureDrawing
                        {
                            //Wrap = new OXmlAnchorWrapSquare { DistanceFromLeft = htmlImage.RightAlign ? _imageHorizontalBorder : 0, DistanceFromRight = htmlImage.RightAlign ? 0 : _imageHorizontalBorder },
                            Wrap               = new OXmlAnchorWrapSquare(),
                            DistanceFromLeft   = htmlImage.RightAlign ? _imageHorizontalBorder : null,
                            DistanceFromRight  = htmlImage.RightAlign ? null : _imageHorizontalBorder,
                            HorizontalPosition = new OXmlHorizontalPosition {
                                RelativeFrom = DW.HorizontalRelativePositionValues.Margin, HorizontalAlignment = htmlImage.RightAlign ? "right" : "left"
                            },
                            VerticalPosition = new OXmlVerticalPosition {
                                RelativeFrom = DW.VerticalRelativePositionValues.Line, VerticalAlignment = "top"
                            }
                        };
                    }
                    yield return(new OXmlPictureElement
                    {
                        File = htmlImage.File,
                        Width = htmlImage.Width,
                        Height = htmlImage.Height,
                        PictureDrawing = pictureDrawing
                    });

                    _htmlImages.RemoveAt(0);
                }
                else
                {
                    // AnchorWrapTopAndBottom
                    int position = _imageHorizontalLeftMarge;
                    while (nb > 0)
                    {
                        if (_trace)
                        {
                            pb.Trace.WriteLine($"GetImages()     : send picture                anchor wrap top and bottom \"{zPath.GetFileName(htmlImage.File)}\"");
                        }
                        htmlImage = _htmlImages[0];
                        yield return(new OXmlPictureElement
                        {
                            File = htmlImage.File,
                            Width = htmlImage.Width,
                            Height = htmlImage.Height,
                            PictureDrawing = new OXmlAnchorPictureDrawing
                            {
                                Wrap = new OXmlAnchorWrapTopAndBottom(),
                                HorizontalPosition = new OXmlHorizontalPosition {
                                    RelativeFrom = DW.HorizontalRelativePositionValues.Margin, PositionOffset = position
                                },
                                VerticalPosition = new OXmlVerticalPosition {
                                    RelativeFrom = DW.VerticalRelativePositionValues.Line, VerticalAlignment = "top"
                                }
                            }
                        });

                        position += (int)htmlImage.Width + _imageHorizontalMarge;
                        _htmlImages.RemoveAt(0);
                        nb--;
                    }
                }
            }


            //yield return new OXmlPictureElement
            //{
            //    File = htmlImage.File,
            //    Width = htmlImage.Width,
            //    Height = htmlImage.Height,
            //    PictureDrawing = new OXmlAnchorPictureDrawing
            //    {
            //        // SquareSize = 21800
            //        //Wrap = new OXmlAnchorWrapTight { WrapPolygon = OXmlDoc.CreateWrapPolygon(21800) },
            //        Wrap = new OXmlAnchorWrapTight { WrapPolygon = new OXmlSquare { HorizontalSize = 21800 } },
            //        HorizontalRelativeFrom = DW.HorizontalRelativePositionValues.Margin,
            //        HorizontalPositionOffset = horizontalPosition,
            //        VerticalRelativeFrom = DW.VerticalRelativePositionValues.Paragraph,
            //        VerticalPositionOffset = verticalPosition
            //    }
            //};
        }
예제 #3
0
 private static void SetPictureClassParam(HtmlImage htmlImage, string className)
 {
     // class : leftalign, nonealign, width300, width450
     switch (className.ToLower())
     {
         case "nonealign":
             //pictureElement.PictureDrawing = new OXmlPictureInlineDrawing();
             htmlImage.NoneAlign = true;
             break;
         case "leftalign":
             //pictureElement.PictureDrawing = new zDocXPictureWrapTightAnchorDrawing() { SquareSize = 21800 };
             //pictureElement.PictureDrawing = new OXmlPictureAnchorDrawing() { Wrap = new OXmlAnchorWrapTight() { SquareSize = 21800 } };
             htmlImage.LeftAlign = true;
             break;
         case "width300":
             //pictureElement.Width = 300;
             htmlImage.Width = 300;
             break;
         case "width450":
             //pictureElement.Width = 450;
             htmlImage.Width = 450;
             break;
         default:
             throw new pb.PBException($"unknow img class \"{className}\"");
     }
 }
예제 #4
0
 private void SetPictureWidthHeight(HtmlImage htmlImage)
 {
     if (htmlImage.Width == null || htmlImage.Height == null)
     {
         Image image = zimg.LoadImageFromFile(htmlImage.File);
         if (htmlImage.Width != null)
         {
             htmlImage.Height = (int)(image.Height * ((double)htmlImage.Width / image.Width) + 0.5);
         }
         else if (htmlImage.Height != null)
         {
             htmlImage.Width = (int)(image.Width * ((double)htmlImage.Height / image.Height) + 0.5);
         }
         else
         {
             htmlImage.Width = image.Width;
             htmlImage.Height = image.Height;
         }
     }
 }
예제 #5
0
        private IEnumerable<OXmlElement> Image(HtmlDocNodeTagImg imgTag)
        {
            // 300 px ->  7.94 cm
            // 450 px -> 11.91 cm
            // largeur 18.5 cm = 694 px
            // largeur 16 cm   = 600 px
            // example :
            // leftalign width300 - nonealign width300
            // leftalign width300 - nonealign width300
            // example :
            // leftalign width300 - nonealign width300
            // nonealign width450
            // example :
            // nonealign width450
            // nonealign width450

            HtmlImage htmlImage = new HtmlImage();
            Uri uri = new Uri(imgTag.Link);
            htmlImage.File = _pictureDir + uri.Segments[uri.Segments.Length - 1];
            foreach (string className in imgTag.ClassList)
                SetPictureClassParam(htmlImage, className);
            if (_forcedImageWidth != null)
                htmlImage.Width = _forcedImageWidth;
            SetPictureWidthHeight(htmlImage);

            int horizontalPosition;
            int verticalPosition;
            if (_imageHorizontalPosition > 0 && _imageHorizontalPosition + htmlImage.Width > _maxImageHorizontalPosition)
            {
                horizontalPosition = 0;
                _imageVerticalPosition += _imageHeight + _imageMarge;
                verticalPosition = _imageVerticalPosition;
                _imageHorizontalPosition = (int)htmlImage.Width + _imageMarge;
                _imageHeight = (int)htmlImage.Height;
            }
            else
            {
                horizontalPosition = _imageHorizontalPosition;
                _imageHorizontalPosition += (int)htmlImage.Width + _imageMarge;
                verticalPosition = _imageVerticalPosition;
                _imageHeight = Math.Max(_imageHeight, (int)htmlImage.Height);
            }
            yield return new OXmlPictureElement { File = htmlImage.File, Width = htmlImage.Width, Height = htmlImage.Height, PictureDrawing = new OXmlAnchorPictureDrawing
            {
                // SquareSize = 21800
                //Wrap = new OXmlAnchorWrapTight { WrapPolygon = OXmlDoc.CreateWrapPolygon(21800) },
                Wrap = new OXmlAnchorWrapTight { WrapPolygon = new OXmlSquare { HorizontalSize = 21800 } },
                HorizontalRelativeFrom = DW.HorizontalRelativePositionValues.Margin, HorizontalPositionOffset = horizontalPosition,
                VerticalRelativeFrom = DW.VerticalRelativePositionValues.Paragraph, VerticalPositionOffset = verticalPosition
            } };
        }