2012-03-15 5 views
2

인쇄 문제로 오랫동안 싸워 왔지만 잘하면 누군가 도움을 줄 수 있습니다.인쇄 설정 (Aspose가 생성 됨)을 사용하여 WPF의 Word 문서를 인쇄하십시오.

배경 나는 단어 템플릿에서 Aspose.Words-문서를 만드는거야, 그리고 메일을 병합 한 다음 인쇄 대화 상자와 WPF 응용 프로그램에서 직접 인쇄 할. 인쇄 할 때 내 프린터에서 사용할 수있는 모든 다른 프린터 설정 (사용할 용지, 확대/축소, 방향, 색상 등)을 선택할 수 있어야합니다. 이 마지막 것은 내가 찾은 모든 예에서 프린터 이름이나 인쇄 할 사본 수만 알려주므로 내 Google 검색이 성공하지 못하게하는 것 같습니다.

테스트 1- From their forum

private void Print(Document document) 
    { 
     var printDialog = new System.Windows.Forms.PrintDialog 
     { 
      AllowSomePages = true, 
      PrinterSettings = new PrinterSettings 
      { 
       MinimumPage = 1, 
       MaximumPage = document.PageCount, 
       FromPage = 1, 
       ToPage = document.PageCount 
      }, 
      UseEXDialog = true 
     }; 

     var result = printDialog.ShowDialog(); 
     if (result.Equals(DialogResult.OK)) 
      document.Print(printDialog.PrinterSettings); 
    } 

를 인쇄 Aspose의 선호하는 방법은 지금 이것은 완벽한 것 같다! 하지만 두 개의이 (가) 하나의 문제가 있습니다.

  • 텍스트는 먼저 기본 글꼴로 인쇄 할 것 같은 페이지에 두 배로, 첫 번째의 상단에 두 번째 나의 특별한 글꼴로 두 번째입니다. 화면 캡쳐보기 :죄송합니다. docx 파일 내부에 숨겨진 이미지가 있습니다.이 이미지는 어떻게 든 변환되었을 때 (Word에서 숨겨 졌더라도) 나타납니다.

    The text is doubled on the page

    그것은 개 느린 ... 그것은 단지 2 인쇄 할 페이지 및 그래픽이, 비록 document.Print 영원히 걸립니다.

테스트 2 - 프로세스 인쇄 (PDF)는

private void Print(Document document) 
    { 
     var savePath = String.Format("C:\\temp\\a.pdf"); 
     document.Save(savePath, SaveFormat.Pdf); 

     var myProcess = new Process(); 
     myProcess.StartInfo.FileName = savePath; 
     myProcess.StartInfo.Verb = "Print"; 
     //myProcess.StartInfo.CreateNoWindow = true; 
     myProcess.Start(); 
     myProcess.WaitForExit(); 
    } 

이 좋은 해결책이 될 것이다, 그러나 그것은 나에게 대화 상자를 제공하지 않습니다 (I 워드 PrintTo를 사용할 수 있으며 일부 인수를 제공 ?, 프린터 이름 등과 같은 그러나 나의 특별한 요구 사항에 적합한)

테스트 3-

말씀 자동화로 인쇄

자, 자동화를 사용해야합니까? 그것은 잘 인쇄하지만 단어 애플 리케이션과 문서를 닫을 때 문제가 생길 때. 예를 들어 때로는 "인쇄 가능 영역 밖의 여백"대화 상자가 나타나서 코드가 프로세스를 종료하고 종료 할 수 없습니다. Thread.Sleep가 표시됩니까? 내가 그것을 가지지 않으면, 인쇄가 끝나기 전에 Word가 종료됩니다.

나는 모든 시도가 부족합니다. 이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

시간 내 주셔서 감사합니다.

답변

2

좋아요, 적절한 WPF 솔루션을 찾았습니다. 문서를 XPS로 변환하고 DocumentViewer로로드합니다. 여기에서 네이티브 인쇄 기능을 사용할 수 있습니다.

보기.XAML

<DocumentViewer Document="{Binding XpsFixedDocumentSequence}"/> 

ViewModel.cs

using System.Windows.Xps.Packaging; 
... 

private void PrepareDocument(Document document) 
{ 
    var xpsDoc = GetDocumentAsXps(document); 
    XpsFixedDocumentSequence = xpsDoc.GetFixedDocumentSequence(); 
} 

private XpsDocument GetDocumentAsXps(Document document) 
{ 
    var savePath = "C:\\temp\\doc.xps"; 
    document.Save(savePath, SaveFormat.Xps); 
    var xpsDoc = new XpsDocument(savePath, FileAccess.Read); 
    return xpsDoc; 
} 

/* Property XpsFixedDocumentSequence */ 
public const string XpsFixedDocumentSequencePropertyName = "XpsFixedDocumentSequence"; 
private FixedDocumentSequence _xpsFixedDocumentSequence; 
public FixedDocumentSequence XpsFixedDocumentSequence 
{ 
    get { return _xpsFixedDocumentSequence; } 

    set 
    { 
     if (_xpsFixedDocumentSequence == value) return; 
     _xpsFixedDocumentSequence = value; 
     RaisePropertyChanged(XpsFixedDocumentSequencePropertyName); 
    } 
} 

자체에 대한 참고 : ReachFramework DLL을 참조