打印发票的{C#最佳解决方案

时间:2016-08-12 01:12:22

标签: c# asp.net printing

我想设计发票并使用asp.net C#进行打印。我尝试创建一个aspx页面并使用window.print通过浏览器打印它。但是,由于每台计算机的差异设置/边距/分辨率都没有好结果。

我在网上搜索并尝试了许多方式,如tbody tbody,css分页符,媒体打印,ReportGridView。但是同样没有好结果。

我要打印的模板由每个打印页面上方的表格组成,以显示有关发票的信息。下面包含一个gridview。由于每张记录在发票内都有差异长度和差异记录金额。

发票应符合以下条件:

  1. 在每个打印页面上打印一个表格
  2. 在每个打印页面中显示页面数字,如1 / n页面
  3. 如果超出页面长度,则自动拆分gridview
  4. 任何人在遇到此问题之前都可以分享您的技术/编码/技能/评论/经验吗?谢谢。有些人建议我另存为PDF。什么工具适合这个?

2 个答案:

答案 0 :(得分:0)

我一直在广泛使用纯HTML文档在现实生产环境中显示发票。您需要做的是明确定义文档大小。以下是一个例子:

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
    Invoice
</title>
    <style type="text/css">
        .page{
            width: 630px;
            height: 900px;
            margin: auto;
            border: 1px solid black;
            padding: 10px;
        }
        .middleblock{
            height: 600px;
            border: 1px solid black;
        }
        .bottomblock{
            height: 100px;
            padding: 20px;
        }
    </style>
</head>
<body>
    <div class="page">
        <h1>Invoice</h2>
        <div class="middleblock">
        </div>

        <div class="bottomblock">
            Issued by,
        </div>
    </div>
</body>
</html>

答案 1 :(得分:0)

嗯,我认为您在描述页面方面做得很好。我多次遇到过这个问题。你已经为如何做到这一点留下了很多自由,所以我会提出一些建议。

[反驳浏览器尝试]

我已经尝试了整个,在浏览器中打印的东西。这对最终用户有好处,但不适用于内部文档。我认为你很高兴能够清楚这一点。这是我想要简化的问题。

另一个人可能会使用一些javascript来提取浏览器测量值。我认为唯一的减损器是可能的维护,所以这是不错的方法。不确定测量是您唯一的跨浏览器问题。我认为.print功能受到限制(许多浏览器都不支持,所以我的客户端使用chrome,这是可以接受的)。

[真实关注]

IMO,困难的部分是分页符。这可能很难计算,并使问题复杂化。所以,一个好的方法是尝试使用熟悉的应用程序,如Excel或Open Office。我避免了本地处理Excel文件的互操作库。这是非常低的水平。如果你要去那么远,也许可以使用像下面的PhantomJS这样的pdf gen库。

[差错,但也许?]

最近变得更难的一个解决方案是将您的布局设计为HTML表格,并将其作为.xls文件写入响应中。很长一段时间,Excel会在打开文件时发出警告,但它工作正常并且可以粗略地设置样式。 但是,最近Excel有一个“功能”,当来自Web的这些(.xls,xlsx)文件要求用户右键单击它们时,选择属性,然后单击“取消阻止”按钮。这不是一个交易破坏者,但如果用例是合法的话,这是一件令人讨厌的事情。

[更好,但不回答问题]

在大多数情况下,预算是一个问题,我们正在用更简单的解决方案来替换该系统,只需编写一个csv文件(分隔文件)。如果操作正确,我们可以将数据放入电子表格中。从那里,他们的人可以复制并粘贴到他们的实际格式化表格中。 CSV无法提供任何格式。

<强> [也许?]

另一种可能的解决方案可能是使用像http://wkhtmltopdf.org/这样的方法。这在很多情况下都有效。我们发现在嵌套表中渲染样式很困难。坦率地说,这很容易引起争议(在某种程度上可能是我的错),这在你的案例中可能值得一看。

<强> [可能?]

另一种可能的方法是将一些html发送到PhantomJS。 (请参阅下面的9/2016更新以获取更多信息)他们有一个.exe,它会读取您的JavaScript代码文件以执行一些很酷的工作,包括渲染和截取屏幕截图。我用它来制作文本编辑器生成的html图像。好处是它始终使用webkit,因此不同浏览器的“输出”是相同的。我可能无法呈现用户的意图,但我现在正在渲染决赛并且它们可以解决。 他们还提供API和云服务。我在他们的服务器上生成的图像比我们的更快。虽然你可以点击付费“墙”。我觉得一个月免费赠送一万个,或者一些荒谬的好东西。 (因为我做的是html文本剪辑,正如我所说的那样,他们根据平均页面的价格渲染他们当前用户的时间。(处理时间和输出))

[我们的朋友说...]

如果你是.Net精明且项目允许的话,我不能打算在.Net Asp框架工作中引用允许这种控件的其他海报。我的老板在使用.Net网页控件时遇到了一个可怕的问题。但是,我已经使用了您在桌面应用程序中使用的工具。完成只是因为它有这么多的出口选择。如果您熟悉,设计过程很像Access。水晶报告就像对类固醇的访问一样,但再次,像互操作或原生的pdf gen,需要学习一个全新的东西。

<强> [完成] :P

所以,这就是我要说的。我非常讨厌这个问题,并希望这会有所帮助。