2017-10-19 1 views
0

document.printout 메서드를 사용하여 여러 페이지로 된 여러 개의 (100 개 이상) 단어 문서를 각각 인쇄하려고합니다. 모든 문서는 페이지가 추가 될 때까지 프린터 대기열에 남아 있어야합니다. 50 개 미만의 문서로도 제대로 작동하지만 여러 페이지로 구성된 80 개 이상의 문서로 테스트했을 때 결과가 일치하지 않습니다. 나는 다음과 같은 시도document.printout을 사용하여 C#에서 mutiple Doc 파일을 인쇄했지만 wierd 동작을 나타냅니다.

:

루프 루프가 다음 단어 COM 개체를 닫습니다 끝단 하나 하나 모든 문서를 통해. 때로는 인쇄가 수행 될 때 모든 문서를 완벽하게 대기열에 넣고 스풀링도 성공적으로 수행됩니다. 때로는 문서를 대기열에 넣지 만 스풀링은 끝나지 않고 단어 인스턴스도 해제됩니다. 이로 인해 인쇄시 문서가 누락됩니다. wordApp.BackgroundPrintingStatus를 사용하여 스풀링이 끝날 때까지 기다려야하는지 확인해야합니다. 그렇지 않으면 애플리케이션에서 문서가 전송 된 후 스풀링이 완료됩니다. 내 관찰에 따르면 비록 내가 com이라는 단어를 풀어도 객체 스풀링은 완료되지만 언젠가는 그렇지 않다. 제발? 다음은 코드 단편입니다. var application = new Microsoft.Office.Interop.Word.Application(); 는 {

  foreach (var fileName in fileNames) 
      { 


       if (File.Exists(fileName)) 
       { 
        var _document = application.Documents.Open(fileName); 
        try 
        { 


         object copies = "1"; 
         object pages = ""; 
         object range = Microsoft.Office.Interop.Word.WdPrintOutRange.wdPrintAllDocument; 
         object items = Microsoft.Office.Interop.Word.WdPrintOutItem.wdPrintDocumentContent; 
         object pageType = Microsoft.Office.Interop.Word.WdPrintOutPages.wdPrintAllPages; 
         object oTrue = true; 
         object oFalse = false; 
         object missing = Type.Missing; 
         _document.PrintOut(ref oTrue, ref oFalse, ref range, ref missing, ref missing, ref missing, 
          ref items, ref copies, ref pages, ref pageType, ref oFalse, ref oTrue, 
          ref missing, ref oFalse, ref missing, ref missing, ref missing, ref missing); 



        } 

        catch (Exception ex) 
        { 
         Log(ex); 
        } 
        finally 
        { 
         _document.Close(); 
         _document = null; 

        } 
       } 
      } 

     } 
     catch (Exception ex) 
     { 

      Log(ex); 
     } 
     finally 
     {    

      application.Quit(); 
      Marshal.ReleaseComObject(application); 
      application = null; 
     } 
+0

: 둘 이상의 매개 변수 (같은 oTrue)에 대해 같은 변수를 사용하지 않고 기능을 할 경우 더 많은 매개 변수에 영향을주지 않고 단일 수정을 할 수 있도록

object oBackground = false; ... _document.PrintOut(ref oBackground, ref oFalse, ref range, ref missing, ref missing, ref missing, ref items, ref copies, ref pages, ref pageType, ref oFalse, ref oTrue, ref missing, ref oFalse, ref missing, ref missing, ref missing, ref missing); 

또한, 그것은 더 나은 것 현재 접근 방식을 보여주는 코드 예제를 게시 할 수 있습니까? –

+0

게시글에 코드 스니핑이 추가되었습니다. – Rahber1

답변

0

Document.printout() 당신이 배경에 넣어 문서를 계속 추가 할 경우 첫 번째 매개 변수는 True 될 것으로 예상보십시오. False을 입력하면 프로세스는 인쇄 파일이 프린터 대기열에 스풀 될 때까지 대기합니다.

_document.PrintOut(opBackground , opAppend , opRange , opOutputFileName , opFrom , opTo , opItem , opCopies , opPages , opPageType , opPrintToFile , 
    opCollate , opFileName , opActivePrinterMacGX , opManualDuplexPrint , opPrintZoomColumn , opPrintZoomRow , opPrintZoomPaperWidth , opPrintZoomPaperHeight) 
+0

귀하의 조언 과르, 정말로 도움을 주셔서 감사합니다. background 속성을 false로 설정하는 것은 작동하는 것처럼 보이지만 나는 document.printout으로 가능한 예외에 대해 궁금해하고있었습니다. 어떤 이유로 문서가 스풀링되지 않으면 어떻게됩니까? 어떤 이유로 인해 한 문서가 실패하면 다른 문서가 계속됩니까? 인쇄 실패를 추적하는 방법? MSDN에서 document.printout에 대한 설명서를 확인했지만 특정 예외가 표시되지 않습니다? – Rahber1