Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 要在MVC Web应用程序中打印的PDF或文档_Asp.net Mvc_Pdf_Itextsharp_Pdfsharp_Razorpdf - Fatal编程技术网

Asp.net mvc 要在MVC Web应用程序中打印的PDF或文档

Asp.net mvc 要在MVC Web应用程序中打印的PDF或文档,asp.net-mvc,pdf,itextsharp,pdfsharp,razorpdf,Asp.net Mvc,Pdf,Itextsharp,Pdfsharp,Razorpdf,在我的MVC应用程序中,当涉及到打印报告时,我几乎没有选择 RazorPDF-从cshtml本身处理设计的优势&可以作为模型从控制器传递值 iTextSharp—从cshtml本身处理设计的优势&可以作为模型从控制器传递值 pdfSharp-从cshtml页面处理设计没有任何优势。必须从.cs文件进行所有编码&修改非常困难。但是对生成的报告的布局有很大的控制 那么,有谁能提出一种同时兼顾两种选择的方法呢 可以从cshtml本身进行PDF设计 可以指定PDF页面的宽度和高度 因为报告并非总是在

在我的MVC应用程序中,当涉及到打印报告时,我几乎没有选择

RazorPDF-从cshtml本身处理设计的优势&可以作为模型从控制器传递值

iTextSharp—从cshtml本身处理设计的优势&可以作为模型从控制器传递值

pdfSharp-从cshtml页面处理设计没有任何优势。必须从.cs文件进行所有编码&修改非常困难。但是对生成的报告的布局有很大的控制

那么,有谁能提出一种同时兼顾两种选择的方法呢

  • 可以从cshtml本身进行PDF设计
  • 可以指定PDF页面的宽度和高度
因为报告并非总是在激光打印机上打印。还需要为dotmatrix打印提供支持,在这种情况下,我必须提及页面的宽度和高度。此外,还可能在信头上打印,因此我必须再次提及空白区域的宽度和高度


或者,任何人都可以建议一种方法,使用RazorPDF和iTextSharp方法提及PDF页面的宽度和高度

您的问题涉及许多不同的工具,但如果您正在使用iTextSharp,这就是答案

使用iTextSharp从头开始创建PDF时,始终需要
文档
PdfWriter
类。
文档
类用于高级功能;用于低级操作的
PdfWriter

页面大小在
文档
级别定义。您可以创建一个新的
文档
对象,如下所示:

Document document = new Document();
由于我们没有向构造函数传递任何参数,iTextSharp将使用默认页面大小(A4)和半英寸的边距创建PDF

这相当于:

Document document = new Document(PageSize.A4, 36, 36, 36, 36);
如您所见:我使用36作为半英寸的值,因为在PDF中1英寸=72个用户单位

如果要定义另一个页面大小,可以使用
PageSize
类中可用的其他值之一,例如:

Document document = new Document(PageSize.LETTER);
Rectangle envelope = new Rectangle(432, 252);
Document document = new Document(envelope, 0, 0, 0, 0);
PageSize.A4
PageSize.LETTER
Rectangle
类的实例,因此如果您需要未在
PageSize
中定义的页面大小,则可以创建自己的矩形。例如:

Document document = new Document(PageSize.LETTER);
Rectangle envelope = new Rectangle(432, 252);
Document document = new Document(envelope, 0, 0, 0, 0);
这些价值观从何而来?让我们来计算一下:

6 inch x 72 points = 432 points (the width)
3.5 inch x 252 points = 252 points (the height)

这就是使用自定义大小定义页面的方式。

我不太明白。PDF文档中的页面大小独立于用于打印PDF的任何打印机。您是否总是希望(事实上,必须)指定PDF包含的页面大小?你不能有一个未知大小的页面,毕竟…页面大小意味着PDF页面的宽度和高度。或者在不提及页面大小的情况下,报告如何适合尺寸小于A4的页面。PDF中的页面大小在
/MediaBox
条目中定义。这是必需的元素。没有
/MediaBox
值的PDF不是PDF。我不明白你的问题。你能澄清一下吗?使用iTextSharp创建
文档
实例时,可以传递页面大小。如果未提供页面大小,则默认为
PageSize.A4
。这是你的问题吗?您正在寻找接受页面大小的
文档
构造函数吗?在点阵打印机中打印PDF时要小心,打印机驱动程序会将PDF转换为图像并发送到打印机。打印会花费很长时间,而且质量会很差。@BrunoLowagie是的,我正在尝试一个解决方案,在这个解决方案中,我可以定义页面大小。可以从Razor视图引擎本身进行定义。请参阅注释以获取pastebin样本。我不知道Razor。我只知道它使用了一个过时的iText版本。看看你的pastebin样品。我是来自Lowagie,com的Lowagie。你给我看的是我在2003年6月26日写的一个例子。那是12年前的事了。Razor使用的iText版本不再受支持。我不推荐使用它。