2015-10-19 40 views
15

Sto provando a creare un servizio Web che convertirà un doc/docx in formato png.Converti DOC/DOCX in PNG

Il problema mi sembra di avere è che non riesco a trovare alcuna libreria o qualcosa di simile ad esso che farà quello che mi serve, considerando sto cercando qualcosa di gratuito e non Ufficio dipendente (il server in cui l'applicazione verrà eseguito lo fa non è stato installato Office).

C'è qualcosa che può aiutarmi a ottenere questo? O devo scegliere tra l'uso di qualcosa che dipende dall'ufficio (come Interop - che a quanto ho letto è davvero male da usare sul server) o qualcosa che non è gratuito?

Grazie

+3

Il problema con quello che vuoi fare è che una png è un'immagine; un documento Word è (a) una stringa di caratteri binari o (b) un pacchetto zip di file XML. In entrambi i casi, l'applicazione Word è necessaria per disporre la pagina in modo che il documento sia visibile, come documento, con tutte le "campane e fischietti" (formattazione, interruzioni di riga e pagina, intestazioni, piè di pagina, ecc.). L'unico modo che conosco per fare una "immagine" di un documento Word è di visualizzarlo su un monitor e quindi fare una schermata ... di OGNI pagina. Potrebbe essere meglio convertire in formato PDF quindi lavorare da quello? –

+1

Accidenti, che dovrebbe essere chiuso - NON facciamo raccomandazioni sui prodotti qui. – TomTom

+0

@TomTom: non sto cercando un prodotto! c'è un sacco di prodotti su google che posso trovare !! – CyC0der

risposta

6

So che questo è molto probabilmente non ciò che si vuole, dal momento che non è libero.

Ma Aspose può fare quello che ti serve.

Spire.doc. Di nuovo, non libero.

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; 
     } 
    } 
} 
+0

grazie, ma sto cercando la via libera, queste librerie sono molto costose nella mia posizione – CyC0der

+0

Sfortunatamente sono costose ovunque :-(Mi piacerebbe fare la stessa cosa di te, ma finora non ho trovato nessuna libera soluzioni - Sto iniziando a dubitare che esista una soluzione gratuita, e che la soluzione più vicina a una soluzione gratuita sia l'uso di Office Interop, e che non va bene per un servizio, dal momento che richiede un sacco di risorse ed è piuttosto lento. – Gertsen

+0

possibile con interop? è meglio di niente! – CyC0der

6

Sì, tali tipi di file complessi di conversione sono di solito well implemented nelle librerie di/Party 3-rd specializzati (come nel citato uno), o, per esempio, nella DevExpress Document Automation:

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

I pensa che il modo migliore per farlo gratuitamente e senza un client per l'ufficio richiederà un processo in 3 fasi: Converti doc/docx in html - Converti html in PDF - converti PDF in PNG.

Open XML supererà il primo post. Questo non richiede alcun client Office installato e c'è una risorsa davvero buona che può aiutarti a mettere insieme il codice per risolvere questo primo passo (http://openxmldeveloper.org/). Tuttavia non penso che possa risolvere il problema PDF/PNG. Quindi,

iTextSharp farà la conversione PDF gratuita per te. Ma non può passare da PDF a PNG. Quindi, per ultimo,

GhostScript.NET ti porteranno oltre il traguardo.

Questi sono i link che collazionati che sembrano essere i più utili:


Ho la sensazione che nessuno lo abbia mai fatto usando strumenti gratuiti.Se si riesce, si prega di condividere il tuo codice su Github :)

2

consideri docx conversione dinamica in HTML usando powertools (o anche utilizzando ufficio VSTO, sarà veloce) e quindi utilizzando wkhtmltopdf (direttamente o con pechkin o simile) per il rendering png da html. Ho scritto perché wkhtmltopdf è meglio di ex. iTextSharp here. A proposito, penso che la migliore libreria commerciale con cui lavorare con doc/docx sia TxText - è davvero fantastica, puoi fare tutto quello che vuoi.

2

Se è un'opzione per l'installazione di una stampante virtuale PNG sul sistema, è possibile prendere in considerazione alcuni software come PDFCreator (anche stampa su PNG) o qualcosa di simile.

4

Installa LibreOffice sul server. Le ultime versioni di LibreOffice hanno un'interfaccia a riga di comando che funzionerà per salvare il documento come PDF. (libreoffice --headless --convert-to pdf nomefile.doc [x])

Quindi utilizzare per es. imagemagick o, ad esempio, le opzioni di conversione di LibreOffice Draw per convertire il PDF in un'immagine.

+0

per se si analizzano i commenti, questo è libero da cima a fondo. – LaPingvino