将DOC / DOCX转换为PNG

本文关键字:PNG 转换 DOCX DOC | 更新日期: 2023-09-27 18:18:18

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

我似乎遇到的问题是我找不到任何库或接近它的东西,这将做我需要的,考虑到我正在寻找一些免费的东西,而不是Office依赖(应用程序运行的服务器没有安装Office)。

有什么可以帮助我获得这个吗?或者我必须在使用依赖于office的东西(比如Interop——顺便说一句,我读到它非常不适合在服务器上使用)和非免费的东西之间做出选择?

谢谢

将DOC / DOCX转换为PNG

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

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

是的,这种复杂的文件类型转换通常在专门的/第三方库中很好地实现(就像前面提到的那样),或者,例如,在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);
}

在服务器上安装LibreOffice。最新版本的LibreOffice有一个命令行界面,可以将文档保存为PDF格式。(libreoffice -headless -convert-to - PDF filename.doc[x])

然后使用imagemagick或LibreOffice Draw转换选项将PDF转换为图像

我认为最好的免费方式,没有办公客户端,需要三个步骤:转换doc/docx到html -转换html到PDF -转换PDF到PNG。

打开XML将使您通过第一篇文章。这不需要安装任何Office客户端,并且有一个非常好的资源可以帮助您将代码组合在一起来解决第一步(http://openxmldeveloper.org/)。但是我不认为它可以解决PDF/PNG的问题。因此,

iTextSharp将为您做免费的PDF转换。但它不能从PDF转换为PNG。所以最后,

内容。NET将帮助你越过终点线。

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

  • 将docx转换为html的半工作方式:如何使用打开xml格式将docx转换为html文件
  • 关于如何使用Ghostscript转换png的示例脱题问题:将PDF转换为JPG/图像而不使用特定的c#库
  • 另一个使用Ghostscript的链接:是否可以使用itextSharp将PDF页面转换为图像?

我感觉从来没有人用免费工具做过这个。如果你成功了,请在Github上分享你的代码:)

如果您可以在系统上安装PNG虚拟打印机,您可以考虑使用一些软件,如PDFCreator(也可以打印为PNG)或类似的软件。

考虑使用powertools(甚至使用office VSTO,它将很快)将docx动态转换为html,然后使用wkhtmltopdf(直接或与pechkin或类似)从html呈现png。我在这里写了为什么wkhtmltopdf比ext . iTextSharp更好。顺便说一下,我认为与doc/docx一起工作的最好的商业库是TxText -它真的很棒,你可以做任何你想做的事情。