PDF创建服务器

时间:2016-03-21 16:51:08

标签: c# pdf server pdf-generation enterprise

我的任务是创建(或寻找已经工作的东西)一个集中式服务器,其API能够返回传递一些数据的PDF文件,以及模板的名称,它必须是强大的解决方案,企业就绪目标如下:

  • 一系列适用于不同公司事物的模板。 (发票,订单,订单计划等)
  • 从外部软件(网站,ERP等)返回PDF的方法
  • 可以是一个已经准备就绪的企业解决方案,但他们迫切要求定制。
  • 可以是任何语言,但我们内部没有任何专门的Java程序员。我们是 PHP / .NET ,我们中的一些人涉猎,但学习曲线可能有点陡峭。

所以,我一直在读。我们认为可能的一种方法是安装jasper报告服务器,在Jaspersoft Studio中创建模板,然后使用API​​返回PDF文件。一位同事代表这个选项,因为它主要是完成的,但1º是java和2º我认为这就像使用锤子来破解坚果。

我们一直在使用的其他选项是使用带有iTextSharp的C#来创建服务器,并创建我们自己的API,使用我们需要的数据准确返回PDF。这样做我们可以有一些好处,比如使用我们已经创建的数据库连接器并从数据库中提取大部分数据,而不是传递大量数据,但是因为它是 bare ,它实际上没有模板系统。我们已经使用XMLWorker或c#类创建了一些东西,但它并不像拖放那样“简单”。对于这种情况,我一直在阅读有关XFA的内容,但iText网站上的文档具有误导性且不明确。

我一直在阅读其他一些替代方案,例如 PrinceXML PDFBox FOP 等,但概念将是和iText一样,我们必须自己做。

我的投票,即使更多的工作是走 iText 的路线并使用HTML / CSS作为模板,但我的同事声称模板应该能够每隔一周更换一次(我对此表示怀疑),并且很容易。 HTML / CSS太多了。

所以真正的问题是,其他业务如何处理这个问题?我在搜索中遗漏了什么吗?有没有更简单的方法来实现这一目标?

PS:我不知道这个问题是否适合这个问题,但是我大部分时间都迷失了,冒着“过于宽泛的问题”或“偏离主题”的标签似乎并不那么糟糕。

修改

  • 输入应使用相同的请求发送。如果我们决定使用C#路线,我们可以直接从ERP中获取约70%的数据,但无论如何,它应该接受带有一些数据的发布请求(模板和该模板所需的数据,如发票数据,或者如果我们有权访问ERP,则可以使用发票ID。
  • 输出应为PDF(对其他格式不感兴趣,只需PDF)。
  • 模板将仅由IT 更新。 (主要是我们,开发团队)。
  • 性能方面,我不知道我们需要多少肌肉,但是现在,我们每天都会看到~500 / 1000 PDF,大多数是10到10:30和12到13h。那么剩下的时间可能再多100个。
  • 当行星排列时,TOP性能不应超过每天10000次,而且是销售季节(一年两次)。这应该是我们未来几年的上限。
  • 模板有一些要求:

    • 有重复的块(例如发票行)。
    • 将图像作为背景,水印和块。
    • 必须是多语言(可翻译,具有相同的数据)。
    • 有一些仅在条件下显示的块。
    • 依赖于页面的块(PDF标题/页眉/页脚/ PDF页脚)
    • 模板将可能必须对某些数据进行计算,我认为我们不会需要这些,但未来可能会被公司要求。
  • PDF不需要存储,因为我们有一个文档管理系统,将来我们可以链接它们。

额外数据:目前我们正在使用“ Fast-Reports v2 VCL

2 个答案:

答案 0 :(得分:1)

您的问题表明您在寻求帮助之前已经详细考虑了这个问题,所以我确信这样会很友好。

当然,您在描述中详细描述的一件事是更广泛的功能要求。你提到用锤子敲碎螺母,但我认为你主要关注技术/接口。如果你考虑对你需要创建的文档的更广泛的要求,所涉及的变量,它可能是你认为的更大的坚果。

我建议的方法是原型解决方案,假设你有一些空间可以做到。从您的研究中,可以选择最好的3个尝试,这可能包括您想到的自定义构建。让它们通过一些真实的用例 - 端到端 - 粗糙尽可能但却是现实的。所有解决方案都应使用您需要输出的一个或两个关键文档。确保您涵盖以下方面的最重要或最常见的要求:

  1. 输入格式 - 谁/应该更新模板。什么是理想的要求,最低要求是什么? 输出要求 - 您交付给谁以及哪些格式是必要/可取的
  2. 数据要求 - 您的数据来源是什么?以所需格式从您的来源获取数据到报告系统的难易程度如何?
  3. 模板功能 - 如果您使用模板,模板需要哪些功能?这包括输入格式,但我主要考虑引擎的功能,如重复/条件内容,图像插入,表格操作等。即您的发票,订单和规划文档简单或复杂
  4. API要求 - 您是否有更广泛的API要求?您提到使用PHP,因此PHP库或Web / Web服务可能是一个很好的起点。
  5. 性能 - 您还没有提到任何性能特征,但当然如果您在规模(企业)工作,那么甚至可以粗略地测量吞吐量。
  6. iText和Jasper肯定是您可以信赖的企业级引擎。您可能希望查看Docmosis(请注意我为公司工作),并且可能会对使用模板的PDF库进行一些搜索。

    Web服务界面可能是您可能想要查看的关键功能。 REST API很容易从PHP和几乎任何技术堆栈调用。这意味着您可能会选择如何构建解决方案,并且通常很容易进行原型设计。如果您决定沿着原型设计路径前进并尝试Docmosis,请从云服务开始,因为您可以非常快速地进行原型/集成。

    我希望有所帮助。

答案 1 :(得分:0)

根据我多年使用PDF的经验,我认为你应该注意以下几点:

  1. 性能:与HTML或XML到PDF生成相比,您可以使用基于API的pdf文件生成来实现最快的性能(因为涉及额外的转换层)。考虑到负载峰值,您可能需要通过添加更多服务器来计算扩展生成的成本(并估算每天每个额外pdf文件所需的额外服务器或资源的成本)。

  2. 易于迭代和更改:您需要多久调整一次模板?如果您要创建模板一次(通过一些迭代)但是不需要进行任何更改,那么只需使用API​​对它们进行编码就可以了。否则,您应该强烈考虑使用HTML或XML模板来简化更改并降低在模板中进行更改的复杂性;

  3. 搜索和索引:如果您可能需要在创建的文档中运行搜索,那么您应该考虑存储生成的文档的索引,或者可以将更多的源数据存储在XML中,同时生成PDF文件;
  4. 长时间保存:如果您要为文档寻找长时间的数字保存,则最好遵循PDF/A子格式。请参阅VeraPDF open source initiative,您可以根据PDF / A要求验证生成的和传入的PDF文档;
  5. 保留源文件 PDF格式本身并非设计用于编辑(尽管已有一些PDF编辑器),因此您可能需要考虑保留源数据以便能够重新生成PDF文档稍后可能会在以后引入其他输出格式。