2016-10-03 161 views
0

我想使用C#打印某些格式化的文本。文字是這樣的:僅使用PDFsharp和MigraDoc進行打印(不會創建PDF)

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

我想C#System.Drawing打印,但它是非常艱苦,非常混亂,所以我搜索並找到PDFsharp,它可以繪製多樣式文本並從中創建PDF。它在第一頁說:

PDFsharp是一個開源的.NET庫,可以從任何.NET語言中輕鬆創建和處理PDF文檔。同樣的繪圖程序可以用來創建PDF文檔,在屏幕上繪製,或輸出發送到任何打印機

,但我怎麼看不到? 我不想創建PDF文件並將其打印出來。我也不想製作我不使用的pagePreview

有沒有辦法直接從XGraphics打印?怎麼樣?

是否有更好的選擇(和自由,因爲我身無分文:()到PDFsharp?

(一個簡單的「HelloWorld」的樣品將是非常好的)

回答

1

您可以創建一個XGraphics對象一個圖形對象:

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

所以,如果你有一個圖形對象的打印機,你可以使用PDFsharp代碼打印

不知道是否可以被他的。 lp,因爲Graphics對象可以直接用於打印。
如果您需要PDF和打印或PDF和屏幕預覽,使用XGraphics是有意義的。

+0

非常感謝。它幫助了我。也是有道理的,因爲正如我指出的那樣,我不能用'Graphics'對象進行多重格式化。 –

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