Преобразование DOC/DOCX в PNG

Я пытаюсь создать веб-сервис, который преобразует формат doc/docx в png.

Проблема, с которой я, похоже, не могу найти какую-либо библиотеку или что-то близкое ей, что будет делать то, что мне нужно, учитывая, что я ищу что-то бесплатное и не зависящее от Office (сервер, на котором будет запущено приложение, не установлен Office).

Есть ли что-нибудь, что может помочь мне в получении этого? Или я должен выбирать между использованием какого-то офисного зависимого (например, Interop - какой из них я действительно плохо использую на сервере) или что-то, что не является бесплатным?

Спасибо

Ответы

Ответ 1

Я знаю, что это скорее всего не то, что вы хотите, так как это не бесплатно.

Но Aspose может делать то, что вам нужно.

Spire.doc тоже. Опять же, не бесплатно.

Aspose:

string exeDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + Path.DirectorySeparatorChar;
string dataDir = new Uri(new Uri(exeDir), @"../../Data/").LocalPath;

// Open the document.
Document doc = new Document(dataDir + "SaveAsPNG.doc");

//Create an ImageSaveOptions object to pass to the Save method
ImageSaveOptions options = new ImageSaveOptions(SaveFormat.Png);
options.Resolution = 160;

// Save each page of the document as Png.
for (int i = 0; i < doc.PageCount; i++)
{
    options.PageIndex = i;
    doc.Save(string.Format(dataDir+i+"SaveAsPNG out.Png", i), options);
}

Spire.doc(WPF):

using Spire.Doc;
using Spire.Doc.Documents;

namespace Word2Image
{
    /// 
    /// Interaction logic for MainWindow.xaml
    /// 
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            Document doc = new Document("sample.docx", FileFormat.Docx2010);
            BitmapSource[] bss = doc.SaveToImages(ImageType.Bitmap);
            for (int i = 0; i < bss.Length; i++)
            {
                SourceToBitmap(bss[i]).Save(string.Format("img-{0}.png", i));
            }
        }

        private Bitmap SourceToBitmap(BitmapSource source)
        {        

            Bitmap bmp;
            using (MemoryStream ms = new MemoryStream())
            {
                PngBitmapEncoder encoder = new PngBitmapEncoder();
                encoder.Frames.Add(BitmapFrame.Create(source));
                encoder.Save(ms);
                bmp = new Bitmap(ms);
            }
            return bmp;
        }
    }
}

Ответ 2

Да, такие сложные преобразования типов файлов обычно хорошо реализованы в специализированных/3-х партийных библиотеках (например, в вышеупомянутом) или, например, в Автоматизация документов DevExpress:

using System;
using System.Drawing.Imaging;
using System.IO;
using DevExpress.XtraPrinting;
using DevExpress.XtraRichEdit;

using(MemoryStream streamWithWordFileContent = new MemoryStream()) {
    //Populate the streamWithWordFileContent object with your DOC / DOCX file content

    RichEditDocumentServer richContentConverter = new RichEditDocumentServer();
    richContentConverter.LoadDocument(streamWithWordFileContent, DocumentFormat.Doc);

    //Save
    PrintableComponentLink pcl = new PrintableComponentLink(new PrintingSystem());
    pcl.Component = richContentConverter;
    pcl.CreateDocument();

    ImageExportOptions options = new ImageExportOptions(ImageFormat.Png);

    //Paging
    //options.ExportMode = ImageExportMode.SingleFilePageByPage;
    //options.PageRange = "1";

    pcl.ExportToImage(MapPath(@"~/DocumentAsImageOnDisk.png"), options);
}

Ответ 3

Установите LibreOffice на свой сервер. В последних версиях LibreOffice есть интерфейс командной строки, который будет работать для сохранения вашего документа в формате PDF. (libreoffice --headless --convert-to pdf filename.doc [x])

Затем используют, например, imagemagick или, например, варианты преобразования LibreOffice Draw для преобразования PDF в изображение.

Ответ 4

Я думаю, что лучший способ сделать это бесплатно и без офисного клиента потребует трехэтапный процесс: конвертировать doc/docx в html - конвертировать html в PDF - конвертировать PDF в PNG.

Open XML выйдет за первое сообщение. Это не требует каких-либо установленных клиентов Office, и есть действительно хороший ресурс, который может помочь вам собрать код для решения этого первого шага (http://openxmldeveloper.org/). Однако я не думаю, что он может решить проблему PDF/PNG. Следовательно,

iTextSharp сделает бесплатное преобразование PDF для вас. Но он не может перейти от PDF к PNG. Итак,

GhostScript.NET приведет вас к финишу.

Это ссылки, которые я сопоставлял, которые кажутся наиболее полезными:


Я чувствую, что никто никогда не делал этого, используя бесплатные инструменты. Если вам это удастся, поделитесь своим кодом с Github:)

Ответ 5

Рассмотрим динамическое преобразование docx в html с помощью powertools (или даже используя офис VSTO, он будет быстрым), а затем с помощью wkhtmltopdf ( напрямую или с помощью pechkin или аналогичного) для рендеринга png из html. Я написал, почему whtmltopdf лучше тогда для ex. iTextSharp здесь. Кстати, я считаю, что лучшая коммерческая библиотека для работы с doc/docx TxText - это действительно потрясающе, вы можете делать все, что хотите.

Ответ 6

Если вам нужно установить виртуальный принтер PNG в вашей системе, вы можете рассмотреть некоторое программное обеспечение как PDFCreator (также печатать в PNG) или что-то подобное.