Jak programowo konwertować pliki Word na PDF? [zamknięte]

zamknięte. to pytanie nie spełnia wytycznych dotyczących przepełnienia stosu . Obecnie nie przyjmuje odpowiedzi.

chcesz poprawić to pytanie? Update the pytanie więc to on-topic {[3] } dla przepełnienia stosu.

Zamknięte 1 rok temu .

Popraw to pytanie

Znalazłem kilka programów open-source / freeware, które pozwalają na konwersję .pliki doc do .pliki pdf, ale wszystkie są odmianą aplikacji / sterowników drukarki, bez SDK / align = "left" /

Znalazłem kilka programów, które mają SDK pozwalający na konwersję .pliki doc do .pliki pdf, ale wszystkie są własnościowe, $ 2,000 za licencję lub mniej więcej.

Czy ktoś zna jakieś czyste, niedrogie (najlepiej darmowe) programistyczne rozwiązanie mojego problemu, używając C # lub VB.NET?

Dzięki!
Author: Shaul Behr, 2009-03-03

9 answers

Użyj pętli foreach zamiast pętli for-to rozwiązało mój problem.

int j = 0;
foreach (Microsoft.Office.Interop.Word.Page p in pane.Pages)
{
    var bits = p.EnhMetaFileBits;
    var target = path1 +j.ToString()+  "_image.doc";
    try
    {
        using (var ms = new MemoryStream((byte[])(bits)))
        {
            var image = System.Drawing.Image.FromStream(ms);
            var pngTarget = Path.ChangeExtension(target, "png");
            image.Save(pngTarget, System.Drawing.Imaging.ImageFormat.Png);
        }
    }
    catch (System.Exception ex)
    {
        MessageBox.Show(ex.Message);  
    }
    j++;
}

Oto modyfikacja programu, który działał dla mnie. Używa programu Word 2007 z zainstalowanym Save As PDF add-in. Przeszukuje katalog .pliki doc, otwiera je w programie Word, a następnie zapisuje je jako PDF. Pamiętaj, że musisz dodać odniesienie do firmy Microsoft.Biuro.Interop.Słowo do rozwiązania.

using Microsoft.Office.Interop.Word;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;

...

// Create a new Microsoft Word application object
Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();

// C# doesn't have optional arguments so we'll need a dummy value
object oMissing = System.Reflection.Missing.Value;

// Get list of Word files in specified directory
DirectoryInfo dirInfo = new DirectoryInfo(@"\\server\folder");
FileInfo[] wordFiles = dirInfo.GetFiles("*.doc");

word.Visible = false;
word.ScreenUpdating = false;

foreach (FileInfo wordFile in wordFiles)
{
    // Cast as Object for word Open method
    Object filename = (Object)wordFile.FullName;

    // Use the dummy value as a placeholder for optional arguments
    Document doc = word.Documents.Open(ref filename, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing);
    doc.Activate();

    object outputFileName = wordFile.FullName.Replace(".doc", ".pdf");
    object fileFormat = WdSaveFormat.wdFormatPDF;

    // Save document into PDF Format
    doc.SaveAs(ref outputFileName,
        ref fileFormat, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing);

    // Close the Word document, but leave the Word application open.
    // doc has to be cast to type _Document so that it will find the
    // correct Close method.                
    object saveChanges = WdSaveOptions.wdDoNotSaveChanges;
    ((_Document)doc).Close(ref saveChanges, ref oMissing, ref oMissing);
    doc = null;
}

// word has to be cast to type _Application so that it will find
// the correct Quit method.
((_Application)word).Quit(ref oMissing, ref oMissing, ref oMissing);
word = null;
 206
Author: Eric Ness,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-16 15:16:25

Podsumowując to dla vb.net użytkownicy, opcja darmowa (musi mieć zainstalowany pakiet office):

Microsoft office Assemblies download:

  • pia dla office 2010
  • Pia dla biura 2007

  • Dodaj odniesienie do Microsoft.Biuro.Interop.Słowo.Zastosowanie

  • Dodaj using lub import (vb.net) oświadczenie do Microsoftu.Biuro.Interop.Słowo.Zastosowanie

VB.NET przykład:

        Dim word As Application = New Application()
        Dim doc As Document = word.Documents.Open("c:\document.docx")
        doc.Activate()
        doc.SaveAs2("c:\document.pdf", WdSaveFormat.wdFormatPDF)
        doc.Close()
 35
Author: Elger Mensonides,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-29 13:52:54

PDFCreator posiada komponent COM, który można wywołać z. NET lub VBScript (próbki zawarte w pliku do pobrania).

Ale wydaje mi się, że drukarka jest właśnie tym, czego potrzebujesz - po prostu zmieszaj to z automatyzacją Worda, i powinieneś być gotowy.

 14
Author: Mark Brackett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-04 10:59:23

Chciałem tylko dodać, że korzystałem z Microsoftu.Biblioteki Interop, a konkretnie funkcja ExportAsFixedFormat, której nie widziałem w tym wątku.

using Microsoft.Office.Interop.Word;
using System.Runtime.InteropServices;
using System.IO;
using Microsoft.Office.Core;

Application app;

public string CreatePDF(string path, string exportDir)
{
    Application app = new Application();
    app.DisplayAlerts = WdAlertLevel.wdAlertsNone;
    app.Visible = true;

    var objPresSet = app.Documents;
    var objPres = objPresSet.Open(path, MsoTriState.msoTrue, MsoTriState.msoTrue, MsoTriState.msoFalse);

    var pdfFileName = Path.ChangeExtension(path, ".pdf");
    var pdfPath = Path.Combine(exportDir, pdfFileName);

    try
    {
        objPres.ExportAsFixedFormat(
            pdfPath,
            WdExportFormat.wdExportFormatPDF,
            false,
            WdExportOptimizeFor.wdExportOptimizeForPrint,
            WdExportRange.wdExportAllDocument
        );
    }
    catch
    {
        pdfPath = null;
    }
    finally
    {
        objPres.Close();
    }
    return pdfPath;
}
 12
Author: zeta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-08 11:21:45
 7
Author: Todd Gamblin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-03 19:05:15

Przeszedłem przez Word do PDF ból, gdy ktoś rzucił mnie z 10000 plików word do konwersji do PDF. Teraz zrobiłem to w C# i użyłem słowa interop, ale to było powolne i rozbił się, jeśli próbowałem używać komputera w ogóle.. bardzo frustrujące.

To doprowadziło mnie do odkrycia, że mogę porzucić interopy i ich powolność..... do Excela używam (EPPLUS) i wtedy odkryłem, że można dostać darmowe narzędzie o nazwie Spire, które umożliwia konwersję do PDF... z ograniczeniami!

Http://www.e-iceblue.com/Introduce/free-doc-component.html#.VtAg4PmLRhE

 5
Author: Ggalla1779,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-26 18:04:20

Łatwy kod i rozwiązanie za pomocą Microsoft.Office.Interop.Word do konwersji WORD w PDF

using Word = Microsoft.Office.Interop.Word;

private void convertDOCtoPDF()
{

  object misValue = System.Reflection.Missing.Value;
  String  PATH_APP_PDF = @"c:\..\MY_WORD_DOCUMENT.pdf"

  var WORD = new Word.Application();

  Word.Document doc   = WORD.Documents.Open(@"c:\..\MY_WORD_DOCUMENT.docx");
  doc.Activate();

  doc.SaveAs2(@PATH_APP_PDF, Word.WdSaveFormat.wdFormatPDF, misValue, misValue, misValue, 
  misValue, misValue, misValue, misValue, misValue, misValue, misValue);

  doc.Close();
  WORD.Quit();


  releaseObject(doc);
  releaseObject(WORD);

}

Dodaj tę procedurę do zwalniania pamięci:

private void releaseObject(object obj)
{
  try
  {
      System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
      obj = null;
  }
  catch (Exception ex)
  {
      //TODO
  }
  finally
  {
     GC.Collect();
  }
}
 3
Author: daniele3004,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-25 09:11:26

Wydaje się być jakieś trafne info tutaj:

Konwersja dokumentów MS Word na PDF w ASP.NET

Również, z Office 2007 o publikowania do PDF funkcjonalności, myślę, że można użyć automatyzacji biura, aby otworzyć *.Plik DOC w programie Word 2007 i zapisz jako PDF. Nie przepadam za automatyzacją biura, ponieważ jest powolne i podatne na powieszenie, ale po prostu wyrzucam to tam...

 2
Author: MikeW,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:33

Microsoft PDF add-in dla word wydaje się być najlepszym rozwiązaniem na razie, ale należy wziąć pod uwagę, że nie konwertuje wszystkie dokumenty word poprawnie do formatu pdf, aw niektórych przypadkach zobaczysz ogromną różnicę między word a wyjściowym pdf. Niestety nie mogłem znaleźć żadnego api, które przekonwertowałoby wszystkie dokumenty Worda poprawnie. Jedynym rozwiązaniem, które znalazłem, aby upewnić się, że konwersja była w 100% poprawna, była konwersja dokumentów za pomocą sterownika drukarki. Minusem jest to, że dokumenty są kolejkowane i konwertowane jeden po drugim, ale możesz być pewien, że powstały plik pdf jest dokładnie taki sam jak układ dokumentu word. Osobiście wolałem używać UDC (Universal document converter) i zainstalowałem Foxit Reader (darmowa wersja) na serwerze, a następnie wydrukowałem dokumenty, uruchamiając" proces "i ustawiając jego właściwość czasownika na"Drukuj". Możesz także użyć FileSystemWatcher, aby ustawić sygnał po zakończeniu konwersji.

 1
Author: Arvand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-25 08:26:05