//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 // } //}; }
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 // } //}; }
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}\""); } }
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; } } }
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 } }; }