import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType0Font;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
public class pdfbox_tables {
* @param page
* @param contentStream
* @param y the y-coordinate of the first row
* @param margin the padding on left and right of table
* @param content a 2d array containing the table data
* @throws IOException
public static void drawTable(PDDocument doc, PDPage page, PDPageContentStream contentStream,
float y, float margin,
String[][] content) throws IOException {
final int rows = content.length;
final int cols = content[0].length;
final float rowHeight = 20f;
final float tableWidth = page.getMediaBox().getWidth() - (2 * margin);
final float tableHeight = rowHeight * rows;
final float colWidth = tableWidth / (float) cols;
final float cellMargin = 5f;
//draw the rows
float nexty = y;
for (int i = 0; i <= rows; i++) {
contentStream.drawLine(margin, nexty, margin + tableWidth, nexty);
nexty -= rowHeight;
//draw the columns
float nextx = margin;
for (int i = 0; i <= cols; i++) {
contentStream.drawLine(nextx, y, nextx, y - tableHeight);
nextx += colWidth;
//now add the text
//contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
contentStream.setFont(PDType0Font.load(doc, new File("C:\\Windows\\Fonts\\simfang.TTF")), 12);
float textx = margin + cellMargin;
float texty = y - 15;
for (int i = 0; i < content.length; i++) {
for (int j = 0; j < content[i].length; j++) {
String text = content[i][j];
contentStream.beginText();
contentStream.moveTextPositionByAmount(textx, texty);
contentStream.drawString(text);
contentStream.endText();
textx += colWidth;
texty -= rowHeight;
textx = margin + cellMargin;
public static void main(String[] args) throws IOException {
PDDocument doc = new PDDocument();
PDPage page = new PDPage();
doc.addPage(page);
PDPageContentStream contentStream
= new PDPageContentStream(doc, page);
String[][] content = {
{"a", "b", "1"},
{"c中", "d", "2"},
{"e", "f文", "3"},
{"g", "h", "4的"},
{"i", "j", "5测试"}};
drawTable(doc, page, contentStream, 700, 100, content);
contentStream.close();
doc.save("F:/test_table.pdf");
import java.io.File;import java.io.IOException;import org.apache.pdfbox.pdmodel.PDDocument;import org.apache.pdfbox.pdmodel.PDPage;import org.apache.pdfbox.pdmodel.PDPageContentStream;import org.apache.pdfbox.pdmodel.font.PDType0Font;import org.a..
最近项目中有个需求需要将数据库中的数据导出到
PDF
文件中,所以在网上查找了相关的开源框架——
pdfbox
&itext
于是乎写了一个简单的工具类,如有需要的可以直接拿去用,切勿跟俺客气~。
本工具类所用到的相关jar包及版本有:
1.
pdfbox
-1.5.0.jar
2.fontbox-1.5.0.jar
3.jempbox-1.5...
分页
PDFBox
表格
生成
器
这是一个如何
使用
PDFBox
生成
分页表的简单示例。 我没有对代码进行过多优化或开发,但它是一个工作模型,可用于获取有关如何
使用
PDFBox
实现
表格
生成
的一些想法。
本项目需要
pdfbox
-app-1.8.4.jar
分页-
PDFBox
-
表格
-样本
这是一个如何
使用
PDFBox
生成
分页表的简单示例。 我没有对代码进行过多优化或开发,但它是一个工作模型,可用于获取有关如何
使用
PDFBox
实现
表格
生成
的一些想法。
本项目需要
pdfbox
-app-1.8.4.jar
功能描述:在右上角指定位置添加
表格
和文本。
实现思路:读取
pdf
,在指定位置画线,线段组成
表格
;指定位置也就是
表格
内写入文字。所有
pdf
坐标原点(0,0)都为左下角。
遇到问题:坐标原点大部分在左下角,有时会在其他地方。后来发现在创建PDPageContentStream对象时,引用参数为AppendMode.APPEND(所有内容流之后插入内容)改为AppendMode.PREPEND(在所有内容流之前插入内容),此时坐标原点为左下角。
实现效果:
代码如下:
package com.gtzn.comm
这是一个基于的小项目,应该允许您以相当简单的方式创建表。 它来自另一个项目的需求。 因此,它也可能会错过一些关键功能。 尽管如此,还是有:
在
表格
,行和单元格级别上设置字体,字体大小,填充,边框宽度
分别设置底部,顶部,左侧和右侧的宽度的单个单元格
表格
,行和单元格级别的背景色
在
表格
,行和单元格级别上的填充(顶部,底部,左侧,右侧)
边框颜色和样式(在表,行或单元格级别上)
支持文本对齐(右,左,居中,对齐)
垂直文本对齐方式(顶部,中间,底部)
列跨度和行跨度
换行和行距
单元格中的图像
实验性的:垂直文本,
还可以覆盖负责表/单元格
绘制
的类,即可以很大程度地自定义其
绘制
行为。
也可以在多个页面上
绘制
表格
(即使在每个新页面上重复标题行)。
将此添加到您的pom.xml :
<dependency>
<groupId>com.github.vandese
从命令行运行。 键入
java
-jar traprange.latest.jar -h获得帮助,或查看文件test-command-line.sh示例
表数据结构是文档中最重要的数据结构之一,尤其是从企业系统中导出数据时,数据通常采用
表格
式。
有几种数据文件格式,通常用于存储
表格
内容,例如CSV,文本和
pdf
。 对于前两种格式,只需打开文件,循环浏览并
使用
适当的分隔符拆分单元格,就可以非常简单地进行操作。 执行此操作的库很多。
对于
PDF
文件,故事完全不同,因为它没有针对
表格
内容的专用数据定义,如HTML中的table , tr , td标签。
PDF
是一种复杂的格式,具有文本数据,字体,样式以及图像,音频和视频,可以将它们混合在一起。 以下是我针对高密度
表格
内容中的数据提出的解决方案。
下面是一个
使用
PDFBox
框架调用打印机打印
PDF
文件的具体代码示例:// 加载
PDF
文件
PDDocument document = PDDocument.load(new File("example.
pdf
"));// 获取默认打印机
PrintService defaultPrintService = PrintServiceLookup.lookupDefaultPrintService();// 创建打印作业
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintService(defaultPrintService);// 设置打印参数
PageFormat pageFormat = job.defaultPage();
Paper paper = pageFormat.getPaper();
double margin = 2.0;
paper.setImageableArea(margin, margin, paper.getWidth() - margin * 2, paper.getHeight() - margin * 2);
pageFormat.setPaper(paper);
job.setPrintable(new
PDF
Printable(document, Scaling.SHRINK_TO_FIT), pageFormat);// 开始打印
job.print();
韩顺平老师的Java课代表:
如何向 Pandas DataFrame 添加行
modaciv:
通过WSUS进行Windows 10 半年更新版本升级