将DOC / DOCX转换为PNG

时间:2015-10-19 14:53:53

标签: c# asp.net web-services ms-word png

我正在尝试创建一个将doc / docx转换为png格式的Web服务。

我似乎遇到的问题是我无法找到任何可以满足我需要的库或其他东西,考虑到我正在寻找免费的东西而不依赖于Office(应用程序运行的服务器)没有安装Office)。

有什么能帮助我获得这个吗?或者我必须在使用依赖于办公室的东西之间做出选择(比如Interop - 我读的哪个在服务器上使用真的很糟糕)或者不是免费的东西?

由于

6 个答案:

答案 0 :(得分:6)

我知道这很可能不是你想要的,因为它不是免费的。

但是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;
        }
    }
}

答案 1 :(得分:6)

是的,这种复杂的文件类型转换通常在专门的/第三方库(如前面提到的那些)中http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html#single-table-inheritance,或者,例如,在well implemented

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);
}

答案 2 :(得分:4)

我认为免费且没有办公室客户端的最佳方式需要3个步骤:将doc / docx转换为html - 将html转换为PDF - 将PDF转换为PNG。

Open XML会让你超过第一篇文章。这不需要任何已安装的Office客户端,并且有一个非常好的资源可以帮助您整理代码以解决此第一步(http://openxmldeveloper.org/)。但是,我认为它无法解决PDF / PNG问题。因此,

iTextSharp将为您进行免费的PDF转换。但它无法从PDF转到PNG。最后,

GhostScript.NET会让你越过终点线。

这些是我整理的链接,似乎是最有用的:

我感觉没有人用免费工具做过这件事。如果您成功,请在Github上分享您的代码:)

答案 3 :(得分:4)

在您的服务器上安装LibreOffice。 LibreOffice的最新版本具有命令行界面,可用于将文档另存为PDF。 (libreoffice --headless --convert-to pdf filename.doc [x])

然后使用例如imagemagick或者例如LibreOffice Draw转换选项,用于将PDF转换为图像。

答案 4 :(得分:2)

使用powertools考虑​​动态转换docx到html(或者甚至使用Office VSTO,它会很快),然后使用wkhtmltopdf(直接或使用pechkin或类似)从html渲染png。 我写过为什么wkhtmltopdf比ex更好。 iTextSharp here。 顺便说一句,我认为使用doc / docx的最好的商业图书馆是TxText - 它非常棒,你可以做任何你想做的事。

答案 5 :(得分:2)

如果您可以选择在系统上安装PNG虚拟打印机,可以将某些软件视为PDFCreator(也可以打印到PNG)或类似的东西。