2015-09-03 5 views
0

В настоящее время все файлы EMF, которые я сгенерировал с помощью механизма Aspose, находятся в режиме EMF в двух режимах.Нужен файл примера EMFPlus

Было бы очень приятно, если бы кто-нибудь мог просветить меня о том, как создать файл EMFPlus через Aspose. Если вы можете предоставить мне образец файла EMFPlus, который не находится в режиме Dual, это будет здорово.

Или, пожалуйста, дайте мне знать, откуда я могу скачать его из Интернета.

ответ

1

Я считаю, что вы отправили аналогичный вопрос в 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.

+0

Thanks Prorata, Я пробовал код и генерировал файлы EMF, которые были в режиме EMFplusonly. Но проблема с этими файлами emfplus заключается в том, что при разборе он состоит только из типа записи EMFPlusObject с типом объекта как «образ», т.е. все данные в EMF, даже текст (EMFPlusDrawstring) и строки (EMFPlusDrawPath) преобразуются в один тип объекта изображения EMFPlusObject, который мне не нужен. –

+0

Не могли бы вы рассказать мне, как преобразовать dualmodeEMF в EMF-файл EMFlusonly mode? Я хочу, чтобы новый файл EMFPlusOnly с его фактическими типами данных emfplus, а не как одна запись EMFPlusObject с объектом изображения –

+0

@svk, я боюсь, это похоже на поведение GDI + по умолчанию и может не контролироваться. Я буду исследовать дальше и обновить вас, если найду альтернативное решение. – Prorata