Free Support Forum - aspose.com

Печать Документов Aspose.Word в Core

Подскажите как осуществить печать документа в Core? Метод Print не доступен.


Добрый день, подскажите решена ли проблема печати документов Word .netCore, без потери качества печати?

@ToniK,

Боюсь, как указано в следующей ссылке, метод Document.Print недоступен в .NET Standard 2.0.

Следующий простой код можно использовать для печати документа с помощью System.Drawing.Common. Для печати документ сначала преобразуется в изображение, а затем распечатывается. Обратите внимание, что при таком подходе может быть ухудшение качества из-за преобразования в изображение.

DocumentPrinter printer = new DocumentPrinter();
Document doc = new Document(@"C:\Temp\input.docx");
printer.Print(doc);

public class DocumentPrinter
{
    /// <summary>
    /// Prints the specified document using default printer.
    /// </summary>
    public void Print(Document doc)
    {
        mDoc = doc;
        mPageIndex = 0;
        PrintDocument pd = new PrintDocument();
        pd.PrintPage += PrintPage;
        pd.Print();
    }

    private void PrintPage(object o, PrintPageEventArgs e)
    {
        try
        {
            using (MemoryStream pageImageStream = new MemoryStream())
            {
                ImageSaveOptions options = new ImageSaveOptions(SaveFormat.Png);
                //options.PageCount = 1;
                //options.PageIndex = mPageIndex;

                PageRange pageRange = new PageRange(mPageIndex, mPageIndex); // Specify Range
                options.PageSet = new PageSet(pageRange);


                mDoc.Save(pageImageStream, options);
                pageImageStream.Position = 0;
                using (Image pageImage = Image.FromStream(pageImageStream))
                {
                    e.Graphics.DrawImage(pageImage, new Point(0, 0));
                }

                // Increase page index and check if there are more pages.
                mPageIndex++;
                e.HasMorePages = (mPageIndex < mDoc.PageCount);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            // Stop printing in case of errors.
            e.HasMorePages = false;
        }
    }

    private int mPageIndex;
    private Document mDoc;
}