Java PDF库

最近,我有一项任务是选择一些Java PDF库用于PDF生成。 但这不是一个简单的任务。 我想到的第一件事是iText。 众所周知Java库具有良好的声誉。 但是...有一些塞子。 iText 5+版是在AGPL许可下发布的。 即,如果我们想在商业产品中使用iText,则必须付款。 我创建了下一个满足项目需求的小清单:

  1. 自由执照
  2. 支持最大数量的项目功能(例如,绝对元素定位)
  3. 好的文件
  4. 大量样品
  5. 将HTML呈现为PDF的可能性

我已经审查了以下库:

  • iText 5.0+ AGPL许可证
  • iText 4.2 MPL / LGPL许可证
  • PDF Box Apache许可证,版本2.0
  • JPedal JPedal具有LGPL版本,可在LGPL许可下提供完整的Java PDF查看器。
  • FOP Apache许可证,版本2.0
  • gnujpdf LGPL许可
  • PJX GPLv2许可证
  • PDFjet Strange开源许可证模型
  • jPod BSD许可证
  • PDF渲染器维护未激活

iText评论

  • iText 2.1.7:MPL和LGPL许可下的最新正式发行版;
  • iText 4.2.0:MPL和LGPL许可下的最新非官方版本;
  • iText 5.0.0及更高版本:在AGPL许可下发布。

关于iText 5.0+和iText 4.2的说明从iText 5.0版开始,开发人员已转向AGPL以提高其出售商业许可证的能力。 ..为了帮助那些希望使用旧许可证的人,最终的MPL / LGPL版本更容易获得,并在github上进行了分叉。

Apache™FOP

Apache™FOP(格式化对象处理器)是由XSL格式化对象(XSL-FO)和独立于输出的格式化程序驱动的打印格式化程序。 它是一个Java应用程序,它读取格式对象(FO)树并将结果页面呈现到指定的输出。 该库没有足够的灵活性来进行绝对页面元素定位。 但是,作为内容转换器可能真的很有价值。

Apache PDFBox

非常有趣的项目。 它具有非常令人印象深刻的功能。 最重要的是它正在积极发展中。

摘要

我选择了具有可接受的许可证和庞大社区的iText v.4.2。 但是最重​​要的功能是非常好的文档(实际上是iText in Action – 2nd Edition ),大量的示例。 iText v.5的几乎所有样本都可以轻松地应用于iText v.4.2。 其他库没有太多样本/样本。 对于快速入门,这非常重要。
这是Maven依赖项信息:

com.lowagieitext4.2.0

选择PDFBox作为备份库。 即,当iText有一些限制时,我将使用它。

资源资源

  • http://stackoverflow.com/questions/14213195/itext-latest-maven-dependency
  • http://java-source.net/open-source/pdf-libraries
  • http://javatoolbox.com/categories/pdf

参考: “ 知识就是一切”博客的JCG合作伙伴 Orest Ivasiv的Java PDF库 。

翻译自: https://www.javacodegeeks.com/2013/05/java-pdf-libraries.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368779.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux系统md5sum命令用不了,Linux中md5sum命令起什么作用呢?

摘要:下文讲述Linux中md5sum命令的功能说明,如下所示;md5sum命令功能:用于为一个文件生成其内容的MD5值,此命令的原理是对文件的内容进行校验,生成文件内容的MD5值此方式常用于检测文件是否被篡改(因为内容修改后,其MD5值会发生变…

前端工程师必备的几个实用网站

一、配色类网站 http://colorhunt.co 这个网站给我们提供了很多的配色方案,我们直接使用就OK了。使用方法也很简单,鼠标移动到对应的颜色上,我们就可以看到颜色的十六进制码,复制这个颜色到工具里就可以使用了。 https://webgra…

BZOJ1004 [HNOI2008]Cards 【burnside定理 + 01背包】

题目链接 BZOJ1004 题解 burnside定理 在\(m\)个置换下本质不同的染色方案数,等于每种置换下不变的方案数的平均数 记\(L\)为本质不同的染色方案数,\(m\)为置换数,\(f(i)\)为置换\(i\)下不变的方案数,那么\[L \frac{1}{m}\sum\li…

函数接口– Java 8中java.util.function包中的函数接口

我以前写过有关功能接口及其用法的文章。 如果您正在探索要成为Java 8一部分的API,尤其是那些支持lambda表达式的API,您会发现很少的接口,例如Function,Supplier,Consumer,Predicate和其他接口,…

Gcc静态编译出错

编译命令:gcc -static -o test test.c 出错信息:/usr/bin/ld: cannot find -lccollect2: error: ld returned 1 exit status 原因&解决方法:静态链接需要静态库,系统没有安装静态库导致报错。yum install glibc-static.x86_64…

css之浮动

首先说下什么是浮动(float):浮动的框可以向左向右移动,直到他的外边缘碰到包含框或者另一个浮动框为止。 浮动在css样式里面是很重要的,我们一起来看看浮动的特点: 1.脱离标准文档流(简称脱标&…

linux 修改jmeter内存溢出,jmeter本机内存溢出如何修改?

websocket连接过程中内存溢出,本机配置的内存最大和最小设置的512;一、后台返回二、结果树返回:Thread Name: 线程组 1-9Sample Start: 2017-09-11 13:59:49 CSTLoad time: 9006Connect Time: 0Latency: 0Size in bytes: 0Sent bytes:0Header…

Monkey写脚本

今天学习使用monkey测试一个应用的登陆,遇到些问题记录下: 先上代码: typeraw events count 1 speed 1.0 start data >>LauncheActivity(com.android.smartmirror,com.android.smartmirror.activities.MainActivity)UserWait(500) //…

JSF:在传统组件和时尚性能杀手之间进行选择

这篇博客文章起源于一个大型Web应用程序中的性能问题。 每个人都优化Java代码,但似乎没有人尝试优化JavaScript代码。 奇怪,因为在客户端有很多改进的空间。 我会说,甚至比服务器端还要多。 我们将分析可编辑的JSF标准组件(有时称…

JS之 if语句函数 对接事件动作 函数更改css css对接需要换妆的区id或class

if 函数的实现步骤: function 名字() 指定id , 指定开关(display: none or block) if else 构成逻辑 控制开关 决定在哪里安置一个灯泡, 指定一个id给某个标签 把开关用电线连着灯泡, 安装开关 # id名称{ 属性1 赋值, 属性 2 赋值 , 属性3 赋值 } 所有的赋值都可以成为一…

BZOJ - 4520 K远点对

题意:已知平面内 N 个点的坐标,求欧氏距离下的第 K 远点对 维护大小为2k最小堆,KD树的估值用前面提到的做法 PS.网上有人估价是使用边界四个点的最值来独立枚举,然而这样写似乎过不了 #include<bits/stdc.h> #define rep(i,j,k) for(register int ij;i<k;i) #define r…

小型Hadoop集群的Ganglia配置和一些故障排除

Ganglia是一个针对大型集群的开源&#xff0c;可扩展且分布式的监视系统。 它收集&#xff0c;汇总并提供数十种与计算机相关的指标&#xff08;例如CPU&#xff0c;内存&#xff0c;存储&#xff0c;网络使用情况&#xff09;的时序视图。 您可以在UC Berkeley Grid上看到Gang…

linux 命令分号,linux命令之间的分号,, ||

声明、定义 in C&plus;&plus;序 声明和定义是我们使用的基础,但是对于声明和定义的概念,我们不甚了了,也就是说感觉好像是这样,但是真要详细说明就说不上来. 有博主对于声明和定义有以下描述: 1.需要建立存储空间的 ...Java基础之创建窗口——使用流布局管理器…

margin赋值为负值的几种效果(负值像素,负值百分数)

1、margin-top为负值像素 margin-top为负值像素&#xff0c;偏移值相对于自身&#xff0c;其后元素受影响&#xff0c;见如下代码&#xff1a; 1 <!DOCTYPE html>2 <html lang"zh">3 <head>4 <meta charset"UTF-8" />5 &…

代码大全:类

第二部分 创建高质量的代码 第6章 可以工作的类 在计算时代的早期&#xff0c;程序员基于语句来思考编程问题。到了二十世纪七八十年代&#xff0c;程序员开始基于子程序去思考编程。进入二十一世纪&#xff0c;程序员以类为基础思考编程问题。【思考编程的角度有很多&#xff…

Java 8中java.util.function包中的谓词和使用者接口

在我以前的文章中&#xff0c;我写了关于Function接口的内容 &#xff0c;它是java.util.package的一部分。 我还提到了Predicate接口&#xff0c;它是同一包的一部分&#xff0c;在这篇文章中&#xff0c;我将向您展示如何使用Predicate和Consumer接口。 让我们看一下Javadoc …

css之盒子模型

什么是盒子模型&#xff1f; 网页中的任何一个标签都相当于是一个盒子模型&#xff0c;而所有的盒子模型都存在五个必要的属性&#xff1a;width,height,padding,border,margin. 那么在一个网页中如何计算一个盒子模型实际所占的宽度呢&#xff1f;&#xff1f;&#xff1f;&a…

linux伙伴系统算法,Linux伙伴系统(三)--分配

介绍过伙伴系统的原理和伙伴系统的数据结构&#xff0c;现在来看伙伴系统是如何来分配页面的。实际上&#xff0c;伙伴系统分配页面的算法并不复杂&#xff0c;但是由于考虑到分配内存时要尽量减少碎片的产生(涉及迁移机制)以及当内存不足时需要采取各种更为积极的手段&#xf…

Drools Planner重命名为OptaPlanner:宣布www.optaplanner.org

我们很自豪地宣布&#xff0c;从版本6.0.0.Beta1开始&#xff0c;将Drools Planner重命名为OptaPlanner。 我们也很高兴推出其新网站&#xff1a; www.optaplanner.org。 OptaPlanner优化了业务资源的使用。 每个组织都面临计划问题&#xff1a;以有限的有限资源&#xff08;员…

File如何转换成MultipartFile

MutipartFile是spring里面定义的接口&#xff0c;它封装了用户在上传图片时所包含的所有信息&#xff0c;但是有些时候我们要将file转换成MutipartFile&#xff0c;才能在保持原有代码逻辑的情况下方便代码的调整&#xff0c;但是file不能直接转换成MutipartFile&#xff0c;现…