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

时间:2016-10-03 11:09:12

标签: c# winforms pdfsharp migradoc

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

  

您好我是多行 部分格式化的文字。我想使用C#(winforms)打印。我可能包含一些unicode文本,如مرابههیچبدادیومنهنوزبرآنم/کهازوجودتوموییبهعالمینفروشم等等....

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

  

PDFsharp是开源.NET库,可以从任何.NET语言轻松创建和处理PDF文档。相同的绘图程序可用于创建PDF文档,在屏幕上绘图,或将输出发送到任何打印机

但是我看不出来怎么样? 我不想创建PDF文件并打印它。我也不想制作一个我不使用的pagePreview

有没有办法直接从XGraphics打印?怎么样?

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

(一个简单的“helloworld”样本会非常好)

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

user-241.007回答是正确的(我接受了它作为正确答案)。但我发布这个答案,只是为了提供一个例子(正如我在问题中提出的那样)

在下面的代码中,问题中的相同文本是在表单上绘制的(在Form的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);
}

output of code