C# 在C中创建可打印的东西#

C# 在C中创建可打印的东西#,c#,pdf,printing,pdf-generation,itextsharp,C#,Pdf,Printing,Pdf Generation,Itextsharp,想知道是否有人能告诉我一个简单的方法来创建打印文件?目前我只是编写HTML脚本,但我想知道是否有更简单的方法可以让我更好地控制打印内容?类似Access打印输出或Excel打印输出的东西—在这里,我可以决定如何布局,并几乎通过编程“邮件合并”细节 基本上,我想为打印创建一些东西,这些东西可以包含表格,根据外键的数量,每条记录可以更长或更短(例如,一名工作人员今天可能有10个作业,或者只有3个。我想创建一个将生成和打印的文档) 有什么想法/建议/意见吗?谢谢大家! 编辑:哇,谢谢你的回复!对于这个

想知道是否有人能告诉我一个简单的方法来创建打印文件?目前我只是编写HTML脚本,但我想知道是否有更简单的方法可以让我更好地控制打印内容?类似Access打印输出或Excel打印输出的东西—在这里,我可以决定如何布局,并几乎通过编程“邮件合并”细节

基本上,我想为打印创建一些东西,这些东西可以包含表格,根据外键的数量,每条记录可以更长或更短(例如,一名工作人员今天可能有10个作业,或者只有3个。我想创建一个将生成和打印的文档)

有什么想法/建议/意见吗?谢谢大家!

编辑:哇,谢谢你的回复!对于这个特定的任务,FlowDocuments似乎是最接近我真正想要的,所以我将使用它。不管怎样,我现在有几个非常好的选择

编辑2:玩了一段时间后,iTextSharp成了我的选择。对于任何想了解未来的人,这里有一个链接,指向一个伟大而简单的教程:


再次感谢

我会创建一个PDF文件,它几乎可以在任何地方查看,并保持格式。看看这里:

如果您正在寻找一种非常简单的创建文档的方法(虽然不是最好的,但确实很简单),您可以设置带有书签的Word文档,并将数据插入书签,因此我猜这也适用于Excel(如果有书签的话):

编辑:这里有一个c#的快速翻译(已在vb中测试过,但不是c#):


我们目前正在使用PDFSharp,并取得了巨大成功-

GDI+或WPF。。。NET,而不是COM或interop

哦,还有它的开源。下面是一些示例代码-


总是有流程文档。查看MSDN上的概述
看看他们是否符合你的要求。它们很容易打印,并且可以序列化为xaml。可能不是您想要的,但它们非常有用。

XPS是MSFT打印结构化和格式化文档的解决方案。我不是说给某人发送XPS,只是为了使用.NET支持通过XPS框架进行打印


如果你在做WPF,这很容易做到。基本上,XPS是MSFT的PDF。任何运行Vista或7的人都可以很好地查看/打印它们。

我使用Excel XML格式从网站创建了打印输出。基本上,这意味着您不必使用officeapi来生成文档(这可能会很麻烦,并且需要在web服务器上使用额外的库)。相反,您可以只获取一个XML模板,使用XPath、LINQ to XML或其他技术将数据插入模板,然后将其流式传输给用户,用户就可以打印它了

生成模板很容易。您只需使用Excel创建文档,然后将其保存为“XML电子表格”格式。XML有点压抑,但并不可怕

XML电子表格格式的文档如下:


请注意,该文档适用于Excel 2002。在较新版本的Excel中,格式确实会更改,但它是向后兼容的。

我们使用。定义布局非常容易,可以以多种格式打印和导出,如pdf、rtf、excel、tiff等。

如果使用pdf或XPS生成器,仍然需要定义文档组成,就像编写HTML脚本一样,因此,我看不出它提供的值比创建的文件的打印格式多得多

你需要的是你可以设计一个模板并填入空白,所以我建议你去Word或Excel自动化,否则看一些轻量级的报告生成库。我遇到了这个,也许它也值得一看。


我过去做过word和pdf生成的工作,pdfsharp(@Kris)对pdf生成的支持非常好,我会在办公自动化之前使用它

我希望我没有误读您的需求,而是没有以特定的格式导出,然后启动打印功能。这些天我会重新考虑普通的旧浏览器打印。在过去,浏览器打印的可怕局限性意味着打印是一种糟糕的体验(没有收缩以适应等)。但现代浏览器有足够的打印支持,可以接受简单的作业


我刚刚检查了在Firefox 3.5.8和IE8中打印这个页面,它们都支持“缩小到合适的尺寸”,我认为一个简单的打印样式表可以直接从浏览器中生成漂亮的工作表,只要您的(大概是内部的)页面观众一定会有一个现代化的浏览器。

大卫一样我也推荐我使用文本夏普;)使用此选项创建pdf文档非常容易;)我在ASP.NET项目中使用它。它有很多设置pdf文件格式的选项,在我的示例中,我使用basic;) 例如:


是的,但有时你不想安装Office。。。特别是当你的服务器正在动态地呈现文档时。在他的问题中,他说“按照Access打印输出或Excel打印输出的方式”,所以我猜他有office。我知道这不是首选的方法,但是如果你需要很快地(比如5分钟内)组合一些东西,这会让事情变得容易得多。目前,c#中的Word文档比VB中的文档困难得多。我会等到c#4发布,因为它承诺会提供更好的支持。看起来,如果你只是在书签中插入内容(这就是我正在做的),那么从VS 2005开始,这两种方式就完全相同:这是一个非常大胆的说法,说XPS是最好的方式,甚至是首选方式。我完全不同意!在我看来,PDF是首选的方式,因为它的平台独立性和更广泛的使用。虽然XPS将为vista和7个用户实现这一目标,但这并不是最好的方式。祝你在XP、Mac或Linux上好运。我想我从未收到或下载过X
Word.Application oWord = default(Word.Application);
Word.Document oDoc = default(Word.Document);

oWord = Interaction.CreateObject("Word.Application");
oWord.Visible = false;

oDoc = oWord.Documents.Add(Directory + "\\MyDocument.dot");

oDoc.Bookmarks("MyBookmark").Range.Text = strBookmark;

oDoc.PrintOut();
oDoc.Close(Word.WdSaveOptions.wdDoNotSaveChanges);
oDoc = null;
oWord.Application.Quit();
oWord = null;
    string file = @"d:\print.pdf";  //path to pdf file
    Document myDocument = new Document(PageSize.A4.Rotate());        
    PdfWriter.GetInstance(myDocument, new FileStream(file, FileMode.Create));
    myDocument.Open();
    //data to save in pdf- unimportant!
    Opiekun obiekun = (from opiekunTmp in db.Opiekuns where opiekunTmp.idOpiekun == nalez.Dziecko.idOpiekun select opiekunTmp).SingleOrDefault();
    Dziecko dzieckoZap = (from dzieckoTmp in db.Dzieckos where dzieckoTmp.idDziecko == nalez.idDziecko select dzieckoTmp).SingleOrDefault();
    //some info about font
    BaseFont times = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1250, BaseFont.EMBEDDED);
    Font font = new Font(times, 12);
    myDocument.Add(new Paragraph("--------------------------Raport opłaty--------------------------",font));
    myDocument.Add(new Paragraph("Data rozliczenia: " + (((TextBox)this.GridViewOplaty.Rows[e.RowIndex].Cells[8].Controls[0]).Text), font));
    myDocument.Add(new Paragraph("Płatnik: " + obiekun.Imie + " " + obiekun.Nazwisko, font));
    myDocument.Add(new Paragraph("Dziecko: " + dzieckoZap.Imie + " " + dzieckoZap.Nazwisko, font));
    myDocument.Add(new Paragraph(""));
    myDocument.Add(new Paragraph("Data             Podpis płatnika: " + obiekun.Imie + " " + obiekun.Nazwisko, font));
    myDocument.Add(new Paragraph(""));
    myDocument.Add(new Paragraph("  ...........       ................................."));
    myDocument.Close(); //we close the pdf and open
    System.Diagnostics.Process.Start(file); //and open our file if You want that ;)