【问题标题】:Creating PDF Invoices - Are there any templating solutions? [closed]创建 PDF 发票 - 是否有任何模板解决方案? [关闭]
【发布时间】:2010-09-21 04:56:33
【问题描述】:

我们公司正在寻求将发票集成到我们正在开发的新系统中。

我们需要一种解决方案来创建发票布局,然后转换为 pdf。

我们考虑过仅在 html/css 中布置发票,然后转换为 pdf。 我们也考虑过使用 SVG->PDf 转换。

这两种解决方案都很好地集成到了我们现有的用于 Web 应用程序的模板语言中。

从历史上看,我们一直是一家基于 Microsoft 的企业,并使用 Crystal Reports 完成此类任务,但我们正在为该项目寻找开源 Linux 解决方案。

是否有人对我们可以用于此类任务的方法或技术有任何建议?

【问题讨论】:

    标签: linux pdf open-source templating invoice


    【解决方案1】:

    试试这个...用 Word(或任何你想要的)创建一张空白发票并将其保存为 PDF。

    然后使用 PDF 库修改 PDF(在特定坐标处插入文本)。我们在 Microsoft 世界中这样做,这非常容易。

    最大的好处是我们可以使用自己的工具来创建和修改模板。如果我们想添加一些静态文本,我们只需打开 Word,进行更改并将其保存到 PDF 文件(用作模板)。

    对于微软,我们使用iTextSharp,它实际上是原始Java version of iText的C#端口


    另外...

    您可以使用 Adob​​e Acrobat 在 PDF 中插入字段(地址、电话、发票号码、第 1 行、第 2 行等),然后在运行时使用 iText/iTextSharp 填充这些字段。

    更详细地说,这是我们所做的……而且非常简单。

    【讨论】:

    • 由于 PDF 文件的结构方式,像这样修改 PDF 应用程序将是一个巨大的痛苦。每个元素都有一个固定的位置,并且没有“重排”thingamajari 可以让您在保留布局的同时调整内容。
    • @Jasper - 如果我们在谈论发票,那并不难。您知道可以输入文本的坐标,并且通常一次只需要一行。顺便说一句...我更新了另一个想法。
    • 啊,是的,可能没有过多考虑用例。我避免生成这样的 PDF 文件的原因是因为它无法在合同管理系统中解决,而合同管理系统必须使用各种特技才能获得好看的文本。
    • 您有如何编辑模板 pdf 的示例代码吗?谢谢
    【解决方案2】:

    通常的方法是安装 (La)TeX(可能已经在 linux 机器上)并运行 pdflatex 来获取 pdf。如果您更喜欢 xslt 和 xsl-fo,也可以使用 Apache FOP。

    如果要创建的发票数量较少,您可能希望使用开放式办公室(直接或作为工具包)。

    如果您想要高精度定位和低级访问,那么低级 pdf 库(我不知道 iTextSharp 是否适用于单声道)可能是您想要的。

    我会先尝试 LaTeX,因为它可以让您以最少的努力获得结果。

    【讨论】:

    • FOP、XSLT 和 XSL-FO 对此太过分了,它们简直就是一场噩梦。 (恕我直言)
    【解决方案3】:

    我之前通过模板化 PostScript 文件生成发票,然后使用 Ghostscript 的 ps2pdf 将其转换为 PDF。

    【讨论】:

    • +1 - Postscript 并不难生成。在紧要关头,您可以查看 DTP 或绘图程序的输出。
    • 嗯,是的,但我所有的都是手工制作的 ;-)
    【解决方案4】:

    我们在 Python 中使用Reportlab。如果您环顾四周,那里有大量现成的表格/发票/等。

    【讨论】:

    【解决方案5】:

    有几个 OSS 报告引擎(Jasper ReportsPentahoBIRT 仅举三例),您可以按照过去使用 Crystal Reports 的方式使用它们。其他海报之一提到了ReportLab,如果您使用 Python 或可以在您的应用程序中嵌入 Python 运行时,这是一个选项。

    【讨论】:

      【解决方案6】:

      可能最灵活的解决方案是使用发票数据创建 XML,然后使用 XSLT 将其转换为 PDF、HTMls 等...

      【讨论】:

      • 使用 xslt(和 xsl-fo)进行精确格式化并不容易。
      【解决方案7】:

      这取决于您的环境。如果您可以访问 Java,您可能会查看 iText (http://www.lowagie.com/iText/),这是一个允许您即时生成 PDF 文件的库。

      【讨论】:

        【解决方案8】:

        如果我理解正确的话,有两个步骤:
        1) 创建带有占位符的 PDF 模板以编程方式填充数据
        2) 在运行时以编程方式填充 PDF 模板

        对于 #1,OpenOffice 允许创建 PDF 模板,然后可以通过编程方式填充这些模板。创建可能不涉及数据网格/表格之类的简单发票就足够了。

        对于 #2,您已经在这里找到了答案 - iText、iTextSharp。

        希望这会有所帮助!

        【讨论】:

        • 我目前正在使用 Open Office 创建原始 PDF 模板,然后使用 iTextSharp 以编程方式将数据插入表单域。我将字段的边框设置为不可见,因此用户无法判断它是文本字段!
        【解决方案9】:

        【讨论】:

          【解决方案10】:

          不确定您的目标是什么,但是有一个名为 fpdf 的开源 php 库,它还有一个扩展,可以将预制的 pdf 作为布局,然后用更多内容填充它,生成一个新的 PDF信息。

          但是,我会选择一个可以很好地集成到您正在构建的平台中的解决方案,但我不会采用 HTML->PDF 解决方案,因为您不知道适合什么一张关于那种环境中尺寸的纸,这意味着你不知道什么时候应该将内容分成两个单独的模板。

          【讨论】:

            【解决方案11】:

            您也可以尝试使用 XSL:FO。 XSL:FO 是用于描述页面布局的文档化标准:http://www.w3.org/TR/xsl/#fo-section

            通过创建定义“PDF”内容的 XML 模式,我在创建文档的两个项目中取得了成功。然后,我使用 XSD 工具(来自 Microsoft)生成一个表示该文档的类。然后,我将我的数据映射到该结构中,将填充的类序列化为 XML,以及定义如何将数据映射到 FO 的 XSL 样式表,并将其传递给 FO 格式化程序。对于格式化程序,我成功地使用了 Alt-Soft 的 Xml2Pdf。还有其他几个。有一些工具可用于帮助创建 XSL 到 FO 样式表(即 stylusstudio 和 XmlSpy),但我建议学习 FO 构造,因为这些工具似乎会生成臃肿的样式表。 FO 类似于 HTML(其中 P 标记是 FO 中的 BLOCK 标记),但可能很棘手。 FO 的好处在于,一些格式化程序支持转换为其他格式,例如 Word、HTML 等。

            其他选项:

            1. iTextSharp(iText 的 C# 端口)。刚开始阅读这个。开源和免费。我认为这不支持任何“模板”,但我可能错了。

            2. SQL Server 报告服务。假设您的发票数据采用或可以放入报告服务(SQL Server、Web 服务等)可以读取的格式,在 SSRS 中定义布局,然后发布到报告服务器。使用 SSRS Web 服务或查询参数执行来执行报告并将其输出为 PDF。

            【讨论】:

              【解决方案12】:

              这个 html-2-pdf 网站可能是一个有用的起点:http://maarten.lippmann.us/?p=101

              我的朋友建立的一个网站也使用脚本将 HTML 页面转换为可打印的 PDF -http://philambdaupsilon.org。不确定具体细节,但他是 SO 用户,我也会把这个问题发给他。

              【讨论】:

                【解决方案13】:

                不幸的是,市场上最好的系统(目前)是将 HTML 和 CSS 传递到 ColdFusion 服务器并让它返回呈现的 PDF。因此,如果钱不是一个大问题,这是部署最快的解决方案,可以带来最好的结果。

                我非常努力地让 FPDF、TCPDF、R&OS pdf 类,甚至 CodeIgniter's recommendation 工作,但除了最基本/平淡无奇的 HTML 文件之外,没有任何稳定的输出。

                老实说,如果 ColdFusion 解决方案不可行,我会使用 html2ps,然后使用 ps2pdf 将您的文件转换为 PDF。

                (这都是假设您不想花时间使用 PHP 中的原生 PDF 创建器代码来设计每个 PDF。这就是像 SugarCRM 这样的系统所使用的。虽然它非常实用且结果稳定,但实际创建每个 PDF 生成器文件是一个最痛苦的过程)

                【讨论】:

                  【解决方案14】:

                  我们以前使用过 Jasper 报告。这不是您所说的用户友好,但它会直接与您的数据库对话。

                  【讨论】:

                    【解决方案15】:

                    html2pdf 效果很好。您可以使用它从同一来源生成 HTML 和 PDF 报告。

                    【讨论】:

                    • 分页如何与 HTML 一起工作?例如,大多数文字处理器都知道如何将行拆分或换行到下一页。您需要使用 html2pdf 手动执行此操作吗?
                    【解决方案16】:

                    我现在正在摆弄Black Sheep Invoices,起初这很好,但现在我在实际使用它来渲染 PDF 时遇到了麻烦。很多安装困难——在你自己的服务器上可能要容易得多,但我在与它共享主机上。不过,HTML 输出和数据管理部分做得很好,这是您仅通过创建 postscript 模板就无法解决的问题。我希望找到一个有活跃开发团队的库的参考资料(Black Sheep 目前没有更新)。

                    【讨论】:

                      【解决方案17】:

                      如果您希望将浏览器完美的 HTML 转换为 PDF,请尝试 commandlineprint

                      您需要在 linux 发行版上安装 firefox,禁用所有 firefox 警报,然后通过虚拟显示器运行它。 Check this thread了解更多详情。

                      运行良好令人恼火,但确实为您提供了我所见过的 HTML 到 PDF 转换的最佳结果。

                      【讨论】:

                        【解决方案18】:

                        好的,谷歌代码项目的搜索出现了Simple Invoices,这太棒了,而且维护得很好。

                        【讨论】:

                        • 现在,我并没有最初的印象那么深刻。尽管他们有很好的安装文档,但他们并没有明确说明如何删除示例数据或更改管理员帐户信息o_0
                        【解决方案19】:

                        我使用TROFF 作为我的发票,因为它的文本编码非常简单。逻辑是几行 Perl。保持简单。

                        【讨论】:

                          【解决方案20】:

                          对于 Ruby 解决方案,请尝试 Prawn:http://prawn.majesticseacreature.com/

                          【讨论】:

                            【解决方案21】:

                            我在服务器上使用 open office,然后为文档生成 XML(只需解压缩文档并破解)

                            【讨论】:

                              【解决方案22】:

                              有些人可以使用 Dhek 模板编辑器为现有 PDF 定义区域/占位符,而不更改现有文档,然后填充它以生成最终文档(例如,使用表单中的用户值):https://github.com/applicius/dhek

                              【讨论】:

                                猜你喜欢
                                • 1970-01-01
                                • 1970-01-01
                                • 2011-02-20
                                • 2010-09-05
                                • 2012-08-14
                                • 2011-12-24
                                • 1970-01-01
                                • 1970-01-01
                                • 2023-04-11
                                相关资源
                                最近更新 更多