19

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

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

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

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

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

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

4

22 回答 22

10

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

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

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

对于 Microsoft,我们使用iTextSharp,它实际上是iText 原始 Java 版本的C# 端口


此外...

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

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

于 2008-11-06T23:11:04.703 回答
10

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

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

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

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

于 2008-11-06T23:26:29.103 回答
6

我以前通过模板化 PostScript 文件生成发票,然后使用 Ghostscriptps2pdf将它们转换为 PDF。

于 2008-11-06T23:12:20.753 回答
6

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

于 2008-11-06T23:22:00.563 回答
3

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

于 2008-11-07T12:01:17.070 回答
2

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

于 2008-11-06T23:22:46.817 回答
2

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

于 2008-11-06T23:22:49.407 回答
2

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

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

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

希望这可以帮助!

于 2009-08-14T15:00:37.130 回答
2

我喜欢 wkhtmltopdf http://code.google.com/p/wkhtmltopdf/

于 2010-05-14T17:43:02.017 回答
1

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

但是,我会寻求一个可以很好地集成到您正在构建的平台中的解决方案,但我不会采用 HTML-> PDF 解决方案,因为您不会知道什么适合一块有关这种环境中大小的论文,这意味着您不知道何时应该将内容拆分为两个单独的模板。

于 2008-11-06T23:22:42.247 回答
1

您也可以尝试使用 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的这件好事,

其他选项:

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

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

于 2009-04-02T20:55:24.340 回答
0

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

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

于 2008-11-06T23:09:12.540 回答
0

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

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

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

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

于 2008-11-06T23:17:07.220 回答
0

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

于 2008-11-06T23:30:27.193 回答
0

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

于 2009-01-20T03:12:11.417 回答
0

我在服务器上使用开放式办公室,然后为文档生成 XML(只需解压缩文档并破解)

于 2010-09-07T00:30:41.747 回答
0

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

于 2008-11-14T13:15:16.567 回答
0

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

于 2010-01-03T19:00:31.333 回答
0

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

您需要在 linux 发行版上安装 firefox,禁用所有 firefox 警报,然后通过虚拟显示器运行它。检查此线程以获取更多详细信息。

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

于 2009-01-20T03:54:37.057 回答
0

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

于 2009-01-20T04:19:09.097 回答
0

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

于 2014-07-17T14:22:52.100 回答
0

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

于 2010-09-07T00:22:03.043 回答