仅使用 PDFsharp 和 MigraDoc 进行打印(不创建 PDF)

Using PDFsharp and MigraDoc only for printing(not creating PDF)

我想使用 C# 打印一些格式化的文本。文字是这样的:

Hi i am a Multi-line partially formatted text. I want to be printed using C#(winforms). I might contain some unicode text like مرا به هیچ بدادی و من هنوز بر آنم/ که از وجود تو مویی به عالمی نفروشم and so on....

我尝试了 C# System.Drawing 打印,但它非常困难且非常混乱,所以我搜索并找到 PDFsharp 可以绘制多样式文本并从中创建 PDF。它在第一页中说:

PDFsharp is the Open Source .NET library that easily creates and processes PDF documents on the fly from any .NET language. The same drawing routines can be used to create PDF documents, draw on the screen, or send output to any printer

但我不明白怎么办? 我不想创建 PDF 文件并打印它。我也不想做一个我不使用的pagePreview

有没有办法直接从 XGraphics 或其他什么地方打印?怎么样?

有没有更好的选择(而且是免费的,因为我破产了:( ) to PDFsharp?

(一个简单的 "helloworld" 样本会很好)

您可以从 Graphics 对象创建 XGraphics 对象:

XGraphics gfx = XGraphics.FromGraphics(graphics, size);

因此,如果您有用于打印机的 Graphics 对象,则可以使用 PDFsharp 代码进行打印。

不确定是否对您有帮助,因为Graphics对象可以直接用于打印。
如果您需要 PDF 和打印或 PDF 和屏幕预览,则使用 XGraphics 很有意义。

user-241.007 答案正确(我接受它作为正确答案)。但是我post这个答案,只是为了提供一个例子(正如我在问题中所要求的)

在下面的代码中,问题中的相同文本绘制在窗体上(在窗体的 OnPaint 事件中)。

private void Form1_Paint(object sender, PaintEventArgs e)
{
    Document document = new Document();
    // Add a section to the document
    Section section = document.AddSection();

    // Add a paragraph to the section
    Paragraph paragraph = section.AddParagraph();
    paragraph.Format.Font.Size = 14;
    // Add some text to the paragraph
    paragraph.AddFormattedText("Hi i am a");
    paragraph.AddFormattedText(" Multi-line ",TextFormat.Bold);
    FormattedText ft = paragraph.AddFormattedText("partially formatted");
    ft.Italic = true;
    paragraph.AddFormattedText(" text. I want to be printed using C#(winforms). I might contain some unicode text like مرا به هیچ بدادی و من هنوز بر آنم/ که از وجود تو مویی به عالمی نفروشم and so on.... ");
    paragraph = section.AddParagraph(); 
    //here is the important part, linking Graphics to XGraphics. Graphics can be used in drawing on form, or in printing
    XGraphics xgf = XGraphics.FromGraphics(e.Graphics, new XSize(0, 1000));
    DocumentRenderer docRenderer = new DocumentRenderer(document);
    docRenderer.PrepareDocument();
    //rendering first page to Xgraphics
    docRenderer.RenderPage(xgf, 1);
}