2011-02-17 4 views
4

pdf에 필요한 약 200 단어의 문서가 있습니다.C에서 문서를 PDF로 자동화 #

분명히, 내가 처음에는 오래 걸릴 것이므로 둘째로 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 –

+0

작업을 수행하고 신뢰할 수있는 한 무료 일 필요는 없습니다. 분명히, 나는 자유로운 것을 선호 할 것이지만, COTS 것들을 감당할 수있다 .. – AnarchistGeek

답변

2

는이 MSDN article을 확인 했습니까?


편집 :이 "방법"샘플이 작동하지 않습니다

공지 사항로-때문에 : 몇 가지 이유를 들어이 프로그램 매개 변수 (ConvertDocCS.exe [sourceDoc] [targetDoc] [targetFormat])에서 통해 실행

  1. 라인 # 77, # 81 & # 82.
  2. 프로젝트를 VS 2010으로 변환 했으므로 Microsoft.Office.Core을 다시 참조해야했습니다. Microsoft Office 12.0 Object Library이라는 COM 참조입니다.
  3. 샘플은 상대 경로를 제외하고는 아닙니다.

나는 당신이 그 장애물 :


마지막으로 한가지를 극복하기 위해 관리 것이라 확신합니다. .NET 4로 작업하는 경우 옵션 매개 변수가 궁금하므로 모든 것을 귀찮게 보낼 필요가 없습니다 Missing.Value.

-2

나는 이것에 대한 답이 노골적이라고 생각한다. 하지만 가능한 imagemagik 또는 일부 라이브러리를 사용하여 해결 방법을 통해 가능한 경우 Word 문서의 이미지를 제공 할 수 및 pdf를 만드는 데 itextsharp 이러한 이미지를 사용하십시오 참조하십시오

0

HuBeZa 마찬가지로 Word가 설치된 경우 워크 스테이션에서 Word Automation을 사용하여 파일을 하나씩 열고 PDF로 저장할 수 있습니다. 필요한 것은 COM 구성 요소 "Microsoft Word Object Library"를 참조하고이 어셈블리의 클래스로 재생하는 것입니다.

실행 시간은 약간 길지만 변환은 자동으로 수행됩니다.

3

내가 PDF로 우리의 의사와 DOCX 문서의 변환을 자동화하는이 일을 해요 : OW는 Microsoft.Office.Interop.Word의 별칭입니다

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

.

+0

+1, 게시 한 MSDN 샘플의 더 깨끗한 버전입니다. ** 참고 ** .NET에서 'ref missing'이 필요하지 않습니다. 4.이 대답을 받아 들여야합니다! – HuBeZa

+0

@HuBeza : 고마워! 그래, 나도 알아,하지만 내 직업에서는 여전히 3.5가 붙어있다. 그래서이 예제에는 빠진 매개 변수가있다. –

+0

이 코드는 잠금을 지원하지 않습니다. – AnarchistGeek

1

Aspose.Words for .NET에서 convert DOC files to PDF까지 시도해보십시오. 다른 .NET 어셈블리와 마찬가지로 C# 또는 VB.NET을 사용하는 모든 .NET 응용 프로그램에서 사용할 수 있습니다. 또한 모든 Windows OS 및 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(); 
       }