문제

WPF에서 메모리 수집 또는 가변 크기에 인쇄하는 방법이 있습니까?

ListView 컨트롤을 인쇄하는 다음 코드를 사용하고 있습니다. 그러나 콘텐츠가 수직 스크롤 막대보다 크면 내용을 차지하고 컨텐츠를 잘라냅니다.

 PrintDialog printDialog = new PrintDialog();
                printDialog.ShowDialog();

                printDialog.PrintVisual(lvDocumentSummary, "testing printing!");
도움이 되었습니까?

해결책

여러 페이지를 인쇄하려면 DocumentPaginator Fixdocument를 구현하는 클래스를 사용하면 더 복잡한 구현 중 하나이며 FlowDocument는 더 간단한 구현입니다.

FlowDocument fd = new FlowDocument();

foreach(object item in items)
{
    fd.Blocks.Add(new Paragraph(new Run(item.ToString())));
}

fd.Print();

또는

PrintDialog pd = new PrintDialog();
pd.PrintDocument(fd);

다른 팁

고정 문서는 다른 XAML 문서와 마찬가지로 Databinding (Flowdocument 이외의)을 지원합니다. 고정 문서에서 ListView를 호스팅하고 문서 뷰어 (인쇄 지원이 내장 된)에 표시하십시오.

그러나 목록이 한 페이지에 비해 목록이 너무 길면 FixedDocument는 새로운 페이지를 자동으로 생성하지 않습니다 (Flowdocument와 같이). 따라서 순수한 XAML에서는 수행 할 수 없으므로 코드로 새 페이지를 만들어야합니다.

WPF에서 멋진 인쇄를 원한다면 고정 문서를 작성하고 인쇄해야합니다. 불행히도 인쇄하려는 내용에 따라 매우 복잡 할 수 있습니다.

여기에는 고정 문서를 작성하는 몇 가지 예제 코드가 있습니다. http://www.ericsink.com/wpf3d/b_printing.html

다음은 2019 년 답변입니다. 오래된 답변 중 일부는 더 이상 작동하지 않습니다. FlowDocumentReader는 없습니다 Print 방법.

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            FlowDocument fd = new FlowDocument();
            foreach (var item in COLLECTION) //<- put your collection here
            {
                fd.Blocks.Add(new Paragraph(new Run(item.ToString())));
            }

            PrintDialog pd = new PrintDialog();
            if (pd.ShowDialog() != true) return;

            fd.PageHeight = pd.PrintableAreaHeight;
            fd.PageWidth = pd.PrintableAreaWidth;

            IDocumentPaginatorSource idocument = fd as IDocumentPaginatorSource;

            pd.PrintDocument(idocument.DocumentPaginator, "Printing Flow Document...");
        }
    }

흥미롭게도 ListView가 가상화되어 있습니까? 그렇다면, 대상이 그려지지 않으면 가능성이 있습니다. 인쇄를 살펴보십시오 예시 Petzold에서.

이 문제에 대한 나의 해결책은 다음과 같습니다. 좀 흔들리지 만 시나리오에서 작동합니다.

내 컬렉션을 읽고 문자열로 변환합니다. 전체 컬렉션은 이제 StringBuilder 객체에 있습니다. 다음으로 텍스트 /문자열을 클라이언트의 컴퓨터의 파일로보고 /p로 메모장 프로세스를 실행하여 파일의 내용을 인쇄했습니다.

작동하고 내용을 성공적으로 인쇄합니다.

마지막으로 5 초 후에 호출되고 파일을 제거하는 타이머가 있습니다. 기본적으로 5 초 이내에 요청이 이미 프린터 큐로 전송되었습니다. 그러나 더 나은 솔루션은 인쇄 작업이 이러한 방식으로 처리되었는지 확인하는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top