Преобразование 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) или что-то подобное.