2011-02-17 38 views
4

我有大約200個文件,我需要pdf。自動化Doc到PDF在c#

很明顯,我不能一一列出PDF文件,因爲首先需要很長時間,其次我相信這樣做不是一個好習慣。

我需要找到一種方法來自動化轉換,因爲我們需要一次又一次。

我使用C#,但解決方案不一定必須在C#中,但它是首選。

我看過幾個圖書館,如PDfCreator,Office 2007加載項,ITextSharp等等,論壇上沒有任何明確的答案。

PDFCreator有c#示例,但它只能用於txt文件。 Office 2007插件沒有自動化必須的文檔鎖定功能。

有沒有人實現過這樣的情景?我希望你聽到你的建議。

在此先感謝

問候

+0

你關心它是否免費嗎? EasyPDF? http://www.pdfonline.com/easypdf/sdk/programming-pdf/csharp/index.htm – 2011-02-17 14:44:50

+0

只要它做到了工作和可靠,它不一定是免費的。顯然,我寧願免費的,但可以買得起COTS的。 – AnarchistGeek 2011-02-17 14:55:02

回答

2

你有沒有檢查這個MSDN article


編輯:

注意,這個「如何」的樣品將無法正常工作,是因爲:

  1. 對於某些原因,它運行在程序參數(ConvertDocCS.exe [sourceDoc] [targetDoc] [targetFormat])在#77,#81 &#82。
  2. 我將該項目轉換爲VS 2010,不得不重新參考Microsoft.Office.Core。這是一個名爲Microsoft Office 12.0 Object Library的COM參考。
  3. 該示例不包括相對路徑。

我敢肯定你會設法克服這些障礙:)


最後一兩件事。如果你正在使用.NET 4,你不需要發送所有令人討厭的Missing.Value,這要歸功於可選參數的奇妙。

-2

我覺得直接回答是這樣的! 但有可能通過變通方法我的建議是使用imagemagik或某些庫,看看它是否能夠提供你的Word文檔的圖像,然後在iTextSharp的使用這些圖片創建PDF

0

正如HuBeZa說,如果安裝在Word中您的工作站,您可以使用Word Automation逐個打開文件並將它們保存爲PDF。 您所需要的只是引用COM組件「Microsoft Word對象庫」並使用此程序集的類。

執行時間可能會有點長,但您的轉換會自動進行。

3

我這樣做是爲了我們的doc和DOCX文檔的自動轉換爲PDF:

private bool ConvertDocument(string file) 
{ 
    object missing = System.Reflection.Missing.Value; 

    OW.Application word = null; 
    OW.Document doc = null; 

    try 
    { 
     word = new OW.Application(); 
     word.Visible = false; 
     word.ScreenUpdating = false; 

     Object filename = (Object)file; 

     doc = word.Documents.Open(ref filename, ref missing, 
      ref missing, ref missing, ref missing, ref missing, ref missing, 
      ref missing, ref missing, ref missing, ref missing, ref missing, 
      ref missing, ref missing, ref missing, ref missing); 
     doc.Activate(); 

     if (Path.GetExtension(file) == ".docx") 
      file = file.Replace(".docx", ".pdf"); 
     else 
      file = file.Replace(".doc", ".pdf"); 

     object fileFormat = OW.WdSaveFormat.wdFormatPDF; 

     doc.ExportAsFixedFormat(file, OW.WdExportFormat.wdExportFormatPDF, false, OW.WdExportOptimizeFor.wdExportOptimizeForPrint, 
      OW.WdExportRange.wdExportAllDocument, 1, 1, OW.WdExportItem.wdExportDocumentContent, true, true, OW.WdExportCreateBookmarks.wdExportCreateNoBookmarks, 
      true, true, false, ref missing); 
    } 
    catch(Exception ex) 
    { 
     return false; 
    } 
    finally 
    { 
     if (doc != null) 
     {    
      object saveChanges = OW.WdSaveOptions.wdDoNotSaveChanges; 
      ((OW._Document)doc).Close(ref saveChanges, ref missing, ref missing); 
      doc = null; 
     } 

     if (word != null) 
     { 
      ((OW._Application)word).Quit(ref missing, ref missing, ref missing); 
      word = null; 
     } 
    } 

    return true; 
} 

其中OW是的Microsoft.Office.Interop.Word的別名。

1

您可以嘗試Aspose.Words for .NETconvert DOC files to PDF。它可以像任何其他.NET程序集一樣用於C#或VB.NET的任何.NET應用程序。它也適用於任何Windows操作系統和32/64位系統。

披露:我在Aspose擔任開發者傳道人。

0

我們可以爲字自動化的字體,我申請單個字體的所有生成的文件從我的解決方案相同的應用和救了我的時間,在每個模板手動去和分別爲每個標籤設置字體和標題等。 ..

using (WordprocessingDocument wordProcessingDocument = WordprocessingDocument.Open(input, true)) 
       { 
        // Get all content control elements 
        List<DocumentFormat.OpenXml.OpenXmlElement> elements = 
         wordProcessingDocument.MainDocumentPart.Document.Body.ToList(); 
        // Get and set the style properties of each content control 
        foreach (var itm in elements) 
        { 
         try 
         { 
          List<RunProperties> list_runProperties = 
            itm.Descendants<RunProperties>().ToList(); 
          foreach (var item in list_runProperties) 
          { 
           if (item.RunFonts == null) 
            item.RunFonts = new RunFonts(); 

           item.RunFonts.Ascii = "Courier New"; 
           item.RunFonts.ComplexScript = "Courier New"; 
           item.RunFonts.HighAnsi = "Courier New"; 
           item.RunFonts.Hint = FontTypeHintValues.ComplexScript; 
          } 
         } 
         catch (Exception) 
         { 
          //continue for other tags in document 
          //throw; 
         } 
        } 
        wordProcessingDocument.MainDocumentPart.Document.Save(); 
       }