我想用C#打印一些格式化文本。文字是这样的:
您好我是多行 部分格式化的文字。我想使用C#(winforms)打印。我可能包含一些unicode文本,如مرابههیچبدادیومنهنوزبرآنم/کهازوجودتوموییبهعالمینفروشم等等....
我尝试了C#System.Drawing
打印,但它非常困难且非常混乱,因此我搜索并找到PDFsharp,它可以绘制多样式文本并从中创建PDF。它在第一页说:
但是我看不出来怎么样? 我不想创建PDF文件并打印它。我也不想制作一个我不使用的PDFsharp是开源.NET库,可以从任何.NET语言轻松创建和处理PDF文档。相同的绘图程序可用于创建PDF文档,在屏幕上绘图,或将输出发送到任何打印机
pagePreview
。
有没有办法直接从XGraphics
打印?怎么样?
有没有更好的选择(而且是免费的,因为我破产了:()到PDFsharp?
(一个简单的“helloworld”样本会非常好)
答案 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);
}