|
@@ -3762,7 +3762,7 @@ namespace OpenXmlPowerTools
|
|
|
if (!ImageContentTypes.Contains(contentType))
|
|
|
return null;
|
|
|
try {
|
|
|
- if (contentType == "image/x-wmf")
|
|
|
+ if (contentType == "image/x-wmf"|| contentType == "image/x-emf")
|
|
|
{
|
|
|
return ProcessWmf(imagePart.GetStream(), contentType, element, hyperlinkUri, imageHandler);
|
|
|
}
|
|
@@ -3777,9 +3777,12 @@ namespace OpenXmlPowerTools
|
|
|
Bitmap = bitmap,
|
|
|
ImgStyleAttribute = new XAttribute("style",
|
|
|
string.Format(NumberFormatInfo.InvariantInfo,
|
|
|
- "width: {0}in; height: {1}in",
|
|
|
- (float)extentCx / (float)ImageInfo.EmusPerInch,
|
|
|
- (float)extentCy / (float)ImageInfo.EmusPerInch)),
|
|
|
+ "width: {0}px; " ,
|
|
|
+ // "height: {1}in",
|
|
|
+ (float)extentCx *96.0 / (float)ImageInfo.EmusPerInch
|
|
|
+ // ,
|
|
|
+ //(float)extentCy*96.0 / (float)ImageInfo.EmusPerInch
|
|
|
+ )),
|
|
|
ContentType = contentType,
|
|
|
DrawingElement = element,
|
|
|
AltText = altText,
|
|
@@ -3833,42 +3836,147 @@ namespace OpenXmlPowerTools
|
|
|
{
|
|
|
|
|
|
XElement img = null;
|
|
|
- bool compatible = false;
|
|
|
- bool replaceSymbolFont = false;
|
|
|
- WMFConverter.Wmf.WmfParser parser = new WMFConverter.Wmf.WmfParser();
|
|
|
- WMFConverter.Svg.SvgGdi gdi = new WMFConverter.Svg.SvgGdi(compatible);
|
|
|
- gdi.ReplaceSymbolFont = replaceSymbolFont;
|
|
|
- parser.Parse(stream, gdi);
|
|
|
- string mathxml = gdi.Document.InnerXml;
|
|
|
- using (var partStream = stream)
|
|
|
+ string mathxml = "";
|
|
|
+ if (contentType.Equals("image/x-wmf"))
|
|
|
{
|
|
|
+ bool compatible = false;
|
|
|
+ bool replaceSymbolFont = false;
|
|
|
+ WMFConverter.Wmf.WmfParser parser = new WMFConverter.Wmf.WmfParser();
|
|
|
+ WMFConverter.Svg.SvgGdi gdi = new WMFConverter.Svg.SvgGdi(compatible);
|
|
|
+ gdi.ReplaceSymbolFont = replaceSymbolFont;
|
|
|
+ parser.Parse(stream, gdi);
|
|
|
+ mathxml = gdi.Document.InnerXml;
|
|
|
+ }
|
|
|
+ else if (contentType.Equals("image/x-emf"))
|
|
|
+ {
|
|
|
+ MemoryStream memoryStream = new MemoryStream();
|
|
|
+ Metafile inFile = new Metafile(stream);
|
|
|
+ //Metafile outFile = new Metafile(memoryStream, Graphics.FromHwnd(IntPtr.Zero).GetHdc(), EmfType.EmfOnly);
|
|
|
+ inFile.Save(memoryStream, ImageFormat.Png);
|
|
|
+ var ba = memoryStream.ToArray();
|
|
|
+ mathxml = System.Convert.ToBase64String(ba);
|
|
|
+ }
|
|
|
+ try
|
|
|
+ {
|
|
|
+ var imageInfo = new ImageInfo()
|
|
|
+ {
|
|
|
+ ContentType = contentType,
|
|
|
+ DrawingElement = element,
|
|
|
+ AltText = "",
|
|
|
+ Mathxml = mathxml
|
|
|
+ };
|
|
|
+ var style = (string)element.Elements(VML.shape).Attributes("style").FirstOrDefault();
|
|
|
+ img =imageHandler(imageInfo);
|
|
|
+ var tokens = style.Split(';');
|
|
|
+ var widthInPoints = WidthInPoints(tokens);
|
|
|
+ var heightInPoints = HeightInPoints(tokens);
|
|
|
+ //var imgElement2 = imageHandler(imageInfo);
|
|
|
+ if (widthInPoints != null && heightInPoints != null)
|
|
|
+ {
|
|
|
+ //imageInfo.ImgStyleAttribute = new XAttribute("style",
|
|
|
+ // string.Format(NumberFormatInfo.InvariantInfo,
|
|
|
+ // "width: {0}pt; height: {1}pt ; vertical-align: bottom;", widthInPoints, heightInPoints));
|
|
|
+ img.SetAttributeValue("style", string.Format(NumberFormatInfo.InvariantInfo,
|
|
|
+ "width: {0}pt; height: {1}pt ; vertical-align: bottom;", widthInPoints, heightInPoints));
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //imageInfo.ImgStyleAttribute = new XAttribute("style",
|
|
|
+ // string.Format(NumberFormatInfo.InvariantInfo,
|
|
|
+ // "vertical-align: middle;"));
|
|
|
+ img.SetAttributeValue("style", string.Format(NumberFormatInfo.InvariantInfo,
|
|
|
+ "vertical-align: middle;"));
|
|
|
+ }
|
|
|
+ if (hyperlinkUri != null)
|
|
|
+ {
|
|
|
+ return new XElement(XhtmlNoNamespace.a,
|
|
|
+ new XAttribute(XhtmlNoNamespace.href, hyperlinkUri),
|
|
|
+ img);
|
|
|
+ }
|
|
|
+ return img;
|
|
|
+ }
|
|
|
+ catch (OutOfMemoryException)
|
|
|
+ {
|
|
|
+ // the Bitmap class can throw OutOfMemoryException, which means the bitmap is messed up, so punt.
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ catch (ArgumentException e)
|
|
|
+ {
|
|
|
+ throw new Exception(e.StackTrace);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ private static XElement ProcessPictureOrObject(WordprocessingDocument wordDoc,
|
|
|
+ XElement element, Func<ImageInfo, XElement> imageHandler)
|
|
|
+ {
|
|
|
+ var imageRid = (string)element.Elements(VML.shape).Elements(VML.imagedata).Attributes(R.id).FirstOrDefault();
|
|
|
+ if (imageRid == null) return null;
|
|
|
+
|
|
|
+ try
|
|
|
+ {
|
|
|
+ var pp = wordDoc.MainDocumentPart.Parts.FirstOrDefault(pp2 => pp2.RelationshipId == imageRid);
|
|
|
+ if (pp == null) return null;
|
|
|
+ if (!pp.OpenXmlPart.ContentType.Equals("image/x-wmf")&& !pp.OpenXmlPart.ContentType.Equals("image/x-emf")) {
|
|
|
+ return ProcessObject(wordDoc, element, imageHandler);
|
|
|
+ }
|
|
|
+ string mathxml="";
|
|
|
+ if (pp.OpenXmlPart.ContentType.Equals("image/x-wmf")) {
|
|
|
+ Stream stream = pp.OpenXmlPart.GetStream();
|
|
|
+ bool compatible = false;
|
|
|
+ bool replaceSymbolFont = false;
|
|
|
+ WMFConverter.Wmf.WmfParser parser = new WMFConverter.Wmf.WmfParser();
|
|
|
+ WMFConverter.Svg.SvgGdi gdi = new WMFConverter.Svg.SvgGdi(compatible);
|
|
|
+ gdi.ReplaceSymbolFont = replaceSymbolFont;
|
|
|
+ parser.Parse(stream, gdi);
|
|
|
+ mathxml = gdi.Document.InnerXml;
|
|
|
+ } else if (pp.OpenXmlPart.ContentType.Equals("image/x-emf")) {
|
|
|
+ MemoryStream memoryStream = new MemoryStream();
|
|
|
+ Metafile inFile = new Metafile(pp.OpenXmlPart.GetStream());
|
|
|
+ //Metafile outFile = new Metafile(memoryStream, Graphics.FromHwnd(IntPtr.Zero).GetHdc(), EmfType.EmfOnly);
|
|
|
+ inFile.Save(memoryStream, ImageFormat.Png);
|
|
|
+ var ba = memoryStream.ToArray();
|
|
|
+ mathxml = System.Convert.ToBase64String(ba);
|
|
|
+
|
|
|
+ }
|
|
|
+ string hyperlinkUri = null;
|
|
|
+ var contentType = pp.OpenXmlPart.ContentType;
|
|
|
+ if (!ImageContentTypes.Contains(contentType))
|
|
|
+ return null;
|
|
|
try
|
|
|
{
|
|
|
+ XElement img = null;
|
|
|
var imageInfo = new ImageInfo()
|
|
|
{
|
|
|
ContentType = contentType,
|
|
|
DrawingElement = element,
|
|
|
AltText = "",
|
|
|
- Mathxml = mathxml
|
|
|
- };
|
|
|
+ Mathxml = mathxml,
|
|
|
|
|
|
+ };
|
|
|
var style = (string)element.Elements(VML.shape).Attributes("style").FirstOrDefault();
|
|
|
- if (style == null) return imageHandler(imageInfo);
|
|
|
+ // if (style == null) {
|
|
|
+ // return imageHandler(imageInfo);
|
|
|
+ img = imageHandler(imageInfo);
|
|
|
+ // }
|
|
|
|
|
|
var tokens = style.Split(';');
|
|
|
var widthInPoints = WidthInPoints(tokens);
|
|
|
var heightInPoints = HeightInPoints(tokens);
|
|
|
- var imgElement2 = imageHandler(imageInfo);
|
|
|
+ // var imgElement2 = imageHandler(imageInfo);
|
|
|
if (widthInPoints != null && heightInPoints != null)
|
|
|
{
|
|
|
- imageInfo.ImgStyleAttribute = new XAttribute("style",
|
|
|
- string.Format(NumberFormatInfo.InvariantInfo,
|
|
|
+ //imageInfo.ImgStyleAttribute = new XAttribute("style",
|
|
|
+ // string.Format(NumberFormatInfo.InvariantInfo,
|
|
|
+ // "width: {0}pt; height: {1}pt ; vertical-align: bottom;", widthInPoints, heightInPoints));
|
|
|
+ img.SetAttributeValue("style", string.Format(NumberFormatInfo.InvariantInfo,
|
|
|
"width: {0}pt; height: {1}pt ; vertical-align: bottom;", widthInPoints, heightInPoints));
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- imageInfo.ImgStyleAttribute = new XAttribute("style",
|
|
|
- string.Format(NumberFormatInfo.InvariantInfo,
|
|
|
+ //imageInfo.ImgStyleAttribute = new XAttribute("style",
|
|
|
+ // string.Format(NumberFormatInfo.InvariantInfo,
|
|
|
+ // "vertical-align: middle;"));
|
|
|
+ img.SetAttributeValue("style", string.Format(NumberFormatInfo.InvariantInfo,
|
|
|
"vertical-align: middle;"));
|
|
|
}
|
|
|
|
|
@@ -3876,9 +3984,9 @@ namespace OpenXmlPowerTools
|
|
|
{
|
|
|
return new XElement(XhtmlNoNamespace.a,
|
|
|
new XAttribute(XhtmlNoNamespace.href, hyperlinkUri),
|
|
|
- imgElement2);
|
|
|
+ img);
|
|
|
}
|
|
|
- return imgElement2;
|
|
|
+ return img;
|
|
|
}
|
|
|
catch (OutOfMemoryException)
|
|
|
{
|
|
@@ -3889,90 +3997,7 @@ namespace OpenXmlPowerTools
|
|
|
{
|
|
|
throw new Exception(e.StackTrace);
|
|
|
}
|
|
|
- }
|
|
|
- }
|
|
|
- private static XElement ProcessPictureOrObject(WordprocessingDocument wordDoc,
|
|
|
- XElement element, Func<ImageInfo, XElement> imageHandler)
|
|
|
- {
|
|
|
- var imageRid = (string)element.Elements(VML.shape).Elements(VML.imagedata).Attributes(R.id).FirstOrDefault();
|
|
|
- if (imageRid == null) return null;
|
|
|
-
|
|
|
- try
|
|
|
- {
|
|
|
- var pp = wordDoc.MainDocumentPart.Parts.FirstOrDefault(pp2 => pp2.RelationshipId == imageRid);
|
|
|
- if (pp == null) return null;
|
|
|
- if (!pp.OpenXmlPart.ContentType.Equals("image/x-wmf")) {
|
|
|
- return ProcessObject(wordDoc, element, imageHandler);
|
|
|
- }
|
|
|
- Stream stream = pp.OpenXmlPart.GetStream();
|
|
|
- bool compatible = false;
|
|
|
- bool replaceSymbolFont = false;
|
|
|
- WMFConverter.Wmf.WmfParser parser = new WMFConverter.Wmf.WmfParser();
|
|
|
- WMFConverter.Svg.SvgGdi gdi = new WMFConverter.Svg.SvgGdi(compatible);
|
|
|
- gdi.ReplaceSymbolFont = replaceSymbolFont;
|
|
|
- parser.Parse(stream, gdi);
|
|
|
- string mathxml = gdi.Document.InnerXml;
|
|
|
-
|
|
|
- //byte[] buffer = new byte[stream.Length];
|
|
|
- //stream.Read(buffer, 0, buffer.Length);
|
|
|
- //stream.Close();
|
|
|
- //string base64 = System.Convert.ToBase64String(buffer);
|
|
|
- // var imagePart = (ImagePart)pp.OpenXmlPart;
|
|
|
- // if (imagePart == null) return null;
|
|
|
- string hyperlinkUri = null;
|
|
|
- var contentType = pp.OpenXmlPart.ContentType;
|
|
|
- if (!ImageContentTypes.Contains(contentType))
|
|
|
- return null;
|
|
|
-
|
|
|
- using (var partStream = stream)
|
|
|
- {
|
|
|
- try
|
|
|
- {
|
|
|
- var imageInfo = new ImageInfo()
|
|
|
- {
|
|
|
- ContentType = contentType,
|
|
|
- DrawingElement = element,
|
|
|
- AltText = "",
|
|
|
- Mathxml= mathxml
|
|
|
- };
|
|
|
-
|
|
|
- var style = (string)element.Elements(VML.shape).Attributes("style").FirstOrDefault();
|
|
|
- if (style == null) return imageHandler(imageInfo);
|
|
|
-
|
|
|
- var tokens = style.Split(';');
|
|
|
- var widthInPoints = WidthInPoints(tokens);
|
|
|
- var heightInPoints = HeightInPoints(tokens);
|
|
|
- var imgElement2 = imageHandler(imageInfo);
|
|
|
- if (widthInPoints != null && heightInPoints != null)
|
|
|
- {
|
|
|
- imageInfo.ImgStyleAttribute = new XAttribute("style",
|
|
|
- string.Format(NumberFormatInfo.InvariantInfo,
|
|
|
- "width: {0}pt; height: {1}pt ; vertical-align: bottom;", widthInPoints, heightInPoints));
|
|
|
- }
|
|
|
- else {
|
|
|
- imageInfo.ImgStyleAttribute = new XAttribute("style",
|
|
|
- string.Format(NumberFormatInfo.InvariantInfo,
|
|
|
- "vertical-align: middle;"));
|
|
|
- }
|
|
|
-
|
|
|
- if (hyperlinkUri != null)
|
|
|
- {
|
|
|
- return new XElement(XhtmlNoNamespace.a,
|
|
|
- new XAttribute(XhtmlNoNamespace.href, hyperlinkUri),
|
|
|
- imgElement2);
|
|
|
- }
|
|
|
- return imgElement2;
|
|
|
- }
|
|
|
- catch (OutOfMemoryException)
|
|
|
- {
|
|
|
- // the Bitmap class can throw OutOfMemoryException, which means the bitmap is messed up, so punt.
|
|
|
- return null;
|
|
|
- }
|
|
|
- catch (ArgumentException e)
|
|
|
- {
|
|
|
- throw new Exception(e.StackTrace);
|
|
|
- }
|
|
|
- }
|
|
|
+
|
|
|
}
|
|
|
catch (ArgumentOutOfRangeException)
|
|
|
{
|