На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Docx в png на C#


Мне поступают самые разные заказы, иногда приходится заниматься тем, чем никогда бы не подумал, просто не придумал бы. Например, одна из задач, которую пришлось решить в процессе создания одной программы на заказ – это конвертация документов Word (docx) в изображение (png).



Для работы нам потребуется установленный в системе ворд, другие способы либо сложнее, либо небесплатные. Итак, метод, на вход принимающий путь к папке и имя файла:

    private void ConvertDocPNG(string startPath, string filename1)
        {
            var docPath = Path.Combine(startPath, filename1);
            var app = new Microsoft.Office.Interop.Word.Application();
            Microsoft.Office.Interop.Word.Document doc = new Microsoft.Office.Interop.Word.Document();
            app.Visible = false;
            doc = app.Documents.Open(docPath);
            app.WindowState = Microsoft.Office.Interop.Word.WdWindowState.wdWindowStateMaximize;
            app.ActiveWindow.ActivePane.View.Zoom.Percentage = 100;
            doc.ShowGrammaticalErrors = false;
            doc.ShowRevisions = false;
            doc.ShowSpellingErrors = false;
			
Запускаем ворд (так, чтобы его не видно было), открываем документ, отключаем подсвечивание различных ошибок. Далее извлекаем каждую страницу и конвертируем в картинку:

foreach (Microsoft.Office.Interop.Word.Window window in doc.Windows)
            {
                foreach (Microsoft.Office.Interop.Word.Pane pane in window.Panes)
                {
                    for (var i = 1; i <= pane.Pages.Count; i++)
                    {
                        Microsoft.Office.Interop.Word.Page page = null;
                        bool populated = false;
                        while (!populated)
                        {
                            try
                            {
							
Переменная ниже не всегда готова в тот же момент к разделению страниц. Если вы пропустите этот шаг, то программа прекратит работу. Что же делать? Просто создадим цикл и обернём выполнение в try-catch. Поток поспит микросекунду и снова попытается инициализировать переменную:
                                page = pane.Pages[i];
                                populated = true;
                            }
                            catch (Exception ex)
                            {
                                System.Threading.Thread.Sleep(1);
                            }
                        }
                        var bits = page.EnhMetaFileBits;
                        var target = Path.Combine(startPath + "\\", string.Format("{1}_page_{0}", i, filename1.Split('.')[0]));
                        try
                        {
                            using (var ms = new MemoryStream((byte[])(bits)))
                            {
                                var image = System.Drawing.Image.FromStream(ms);
                                var pngTarget = Path.ChangeExtension(target, "png");
                                // Способ 1
                                image.Save(pngTarget, System.Drawing.Imaging.ImageFormat.Png);                     
                            }
                        }
                        catch (System.Exception ex)
                        {
                            doc.Close(true, Type.Missing, Type.Missing);
                            System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
                            doc = null;
                            app.Quit(true, Type.Missing, Type.Missing);
                            System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
                            app = null;
                            throw ex;
                        }
                    }
                }
            }
Кстати, есть и другой способ сохранения, посложнее:

float width = Convert.ToInt32(hfIdCardMaxWidth.Value);
float height = Convert.ToInt32(hfIdCardMaxHeight.Value);
float scale = Math.Min(width / image.Width, height / image.Height);
int resizedWidth = (int)Math.Round(image.Width * scale);
int resizedHeight = (int)Math.Round(image.Height * scale);
Bitmap myBitmap = new Bitmap(image, new Size(resizedWidth, resizedHeight));
myBitmap.Save(pngTarget, System.Drawing.Imaging.ImageFormat.Png);
Как видите, нет ничего сложного в конвертации документов Word в изображения с помощью языка C# (.NET). Если вам требуется выполнить какую либо работу на C#, создать программу на заказа по работе с изображениями или чем-либо еще, вы всегда можете написать мне - вам будет оказана быстрая и квалифицированная помощь программиста за умеренную плату.




тегизаметки, си шарп, docx, png, конвертация





Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Кто находится за прокси от оперы?
Шахматы


© upread.ru 2013-2019
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.