Excel, Word, PDF и диалоговые окна печати PowerPoint - PullRequest
0 голосов
/ 11 мая 2009

Кто-нибудь знает, как получить все это в приложении C #, которое выводит пользователя на экран диалога печати? Я имею в виду следующее:
В графическом интерфейсе пользователь выбирает документ, щелкает правой кнопкой мыши на документе, выбирает Печать. Вместо немедленной распечатки документа появляется диалоговое окно печати.

Кто-нибудь знает синтаксис всего этого? Я попытался использовать все взаимодействия для приложений MS Office и попробовать метод printdialogue ... но не повезло.

Кто-нибудь может дать мне какой-нибудь код? Я серьезно занимался этим ЧАСЫ и ничего не могу придумать.

1 Ответ

0 голосов
/ 11 мая 2009

Может быть, увидеть этот предыдущий Q & A: отправить документ на принтер с помощью c #

Или для приложения WPF, которое печатает FlowDocument:

    private void DoThePrint(System.Windows.Documents.FlowDocument document)
    {
        // Clone the source document's content into a new FlowDocument.
        // This is because the pagination for the printer needs to be 
        // done differently than the pagination for the displayed page. 
        // We print the copy, rather that the original FlowDocument. 
        System.IO.MemoryStream s = new System.IO.MemoryStream();
        TextRange source = new TextRange(document.ContentStart, document.ContentEnd);
        source.Save(s, DataFormats.Xaml);
        FlowDocument copy = new FlowDocument();
        TextRange dest = new TextRange(copy.ContentStart, copy.ContentEnd);
        dest.Load(s, DataFormats.Xaml);

        // Create a XpsDocumentWriter object, implicitly opening a Windows common print dialog, 
        // and allowing the user to select a printer.

        // get information about the dimensions of the seleted printer+media. 
        System.Printing.PrintDocumentImageableArea ia = null;
        System.Windows.Xps.XpsDocumentWriter docWriter = System.Printing.PrintQueue.CreateXpsDocumentWriter(ref ia);

        if (docWriter != null && ia != null)
        {
            DocumentPaginator paginator = ((IDocumentPaginatorSource)copy).DocumentPaginator;

            // Change the PageSize and PagePadding for the document to match the CanvasSize for the printer device.
            paginator.PageSize = new Size(ia.MediaSizeWidth, ia.MediaSizeHeight);
            Thickness t = new Thickness(72);  // copy.PagePadding;
            copy.PagePadding = new Thickness(
                             Math.Max(ia.OriginWidth, t.Left),
                               Math.Max(ia.OriginHeight, t.Top),
                               Math.Max(ia.MediaSizeWidth - (ia.OriginWidth + ia.ExtentWidth), t.Right),
                               Math.Max(ia.MediaSizeHeight - (ia.OriginHeight + ia.ExtentHeight), t.Bottom));

            copy.ColumnWidth = double.PositiveInfinity;
            //copy.PageWidth = 528; // allow the page to be the natural with of the output device

            // Send content to the printer.
            docWriter.Write(paginator);
        }

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...