Я считаю, что вы отправили аналогичный вопрос в Aspose.Words Support forum, поэтому я буду рассматривать ваши проблемы из Aspose.Words в первую очередь. Обратите внимание, что API-интерфейс Aspose.Words позволяет вам отображать документы в форматах EmfOnly, EmfPlus & EmfPlusWithFallback. Проверьте следующий фрагмент кода, который преобразует входной документ в формат EmfPlus, используя Aspose.Words для .NET API.
var doc = new Aspose.Words.Document("D:/sample.docx");
var saveOptions = new Aspose.Words.Saving.ImageSaveOptions(Aspose.Words.SaveFormat.Emf);
saveOptions.MetafileRenderingOptions.EmfPlusDualRenderingMode = Aspose.Words.Saving.EmfPlusDualRenderingMode.EmfPlusWithFallback;
doc.Save("D:/output.emf", saveOptions);
Если вы собираетесь преобразовать существующие EmfPlusDual изображения в EmfPlus, вы можете использовать GDI + процедуры для этой цели. Проверьте следующий метод, который принимает данные изображения в виде System.IO.Stream и преобразует его в EmfPlus, прежде чем сохранять его обратно на диск.
void ReSaveEmfToEmfPlus(Stream srcStream, String destPath)
{
Bitmap dummyBitmap = null;
Graphics dummyGfx = null;
IntPtr hdc = IntPtr.Zero;
System.Drawing.Imaging.Metafile metafile = null;
try
{
dummyBitmap = new Bitmap(1, 1);
dummyGfx = Graphics.FromImage(dummyBitmap);
hdc = dummyGfx.GetHdc();
Image srcImage = Image.FromStream(srcStream);
Rectangle rect = new Rectangle(0, 0, srcImage.Width, srcImage.Height);
metafile = new System.Drawing.Imaging.Metafile(destPath, hdc, rect, System.Drawing.Imaging.MetafileFrameUnit.Pixel, EmfType.EmfPlusOnly);
Graphics graphic = Graphics.FromImage(metafile);
graphic.DrawImage(srcImage, rect);
srcImage.Dispose();
graphic.Dispose();
}
finally
{
if (metafile != null)
{
metafile.Dispose();
}
if (hdc != IntPtr.Zero)
{
dummyGfx.ReleaseHdc(hdc);
}
if (dummyGfx != null)
{
dummyGfx.Dispose();
}
if (dummyBitmap != null)
{
dummyBitmap.Dispose();
}
}
}
Если вы ищете образцы EmfPlus, вы можете искать их через Интернет с соответствующими ключевыми словами, и, надеюсь, вы сможете найти нужные файлы.
Я работаю с Aspose как Developer Evangelist.
Thanks Prorata, Я пробовал код и генерировал файлы EMF, которые были в режиме EMFplusonly. Но проблема с этими файлами emfplus заключается в том, что при разборе он состоит только из типа записи EMFPlusObject с типом объекта как «образ», т.е. все данные в EMF, даже текст (EMFPlusDrawstring) и строки (EMFPlusDrawPath) преобразуются в один тип объекта изображения EMFPlusObject, который мне не нужен. –
Не могли бы вы рассказать мне, как преобразовать dualmodeEMF в EMF-файл EMFlusonly mode? Я хочу, чтобы новый файл EMFPlusOnly с его фактическими типами данных emfplus, а не как одна запись EMFPlusObject с объектом изображения –
@svk, я боюсь, это похоже на поведение GDI + по умолчанию и может не контролироваться. Я буду исследовать дальше и обновить вас, если найду альтернативное решение. – Prorata