## Java实现PDF生成并且打印pdf文件(附demo)
#### 目录:
0. 效果预览
1. 准备环境
2. Java如何调用打印机进行打印
3. Java如何生成pdf打印文件
4. 实现pdf内数据动态填充(可按需求改变数据,有一个模板就行)
##### 效果预览:
- 说明:以下是根据不同用户数据和自己生成的pdf模板,动态生成的pdf文件,可直接调用打印机打印。
- 数据可从数据库动态获取并且填充

##### 环境准备:
1. java标准开发环境
2. 打印机一台(确保已和设备连接),测试的时候要用,开发没有打印机也行
3. 相关jar包
- pdfbox
- itextpdf
- commons-logging.jar
##### 实现Java调用打印机进行打印文件
之前写过一篇,多种方式,有兴趣的可以看看。[点击这里查看](https://blog.youkuaiyun.com/JavaBuilt/article/details/81322086)
这里使用的是PDFBox方式实现打印,引入PDFBox.jar和commons-logging.jar,嫌麻烦地可以在文章底部下载demo,我把所有相关的jar,源码都放进去了
传入文件对象即可进行打印,**打印前请确认打印机是否正常连接!!!!**
```java
/**
* 打印实现类
* createTime:2018-08-01
*
* @author Jason
*
*/
public final class JHPrintor {
/** 日志记录对象 */
private static Logger log = Logger.getLogger(JHPrintor.class);
/** 私有构造器 */
private JHPrintor() {
}
/**
* 打印pdf文件
*
* @param file 需打印的pdf文件
*/
public static void print(File file) {
try {
PDDocument document = PDDocument.load(file);
// 加载成打印文件
PDFPrintable printable = new PDFPrintable(document,Scaling.ACTUAL_SIZE);
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(printable);
job.defaultPage();
job.print();
} catch (InvalidPasswordException e) {
log.error("打印异常:文档初始化密码失败!");
PromptUtil.error("初始化文档密码异常,打印失败!");
e.printStackTrace();
} catch (IOException e) {
log.error("打印异常!");
PromptUtil.error("打印异常,请关闭后重试!");
e.printStackTrace();
} catch (PrinterException e) {
log.error("未正常连接打印机");
PromptUtil.error("请检查打印机是否正常连接!");
e.printStackTrace();
}
}
}
```
#### Java如何生成pdf文件
这个比较复杂,涉及到单元格,表,段落,标题等内容
慢慢来,一步一步讲解一下
```java
/**
* 生成pdf文件的工具类
* createTime:2018-08-01
*
* @author Jason
*
*/
public class JHCreatePDF {
// 日志记录对象
public static Logger log = Logger.getLogger(JHCreatePDF.class);
// 系统字体文件在 Windows/Fonts目录下,将其粘到src下即可
public static final String CHARACTOR_FONT_CH_FILE = "/SIMSUN.TTC,1"; //宋体 常规
// 纸张尺寸
public static final Rectangle PAGE_SIZE = PageSize.A4;
// 边距
public static final float MARGIN_LEFT = 50;
public static final float MARGIN_RIGHT = 50;
public static final float MARGIN_TOP = 50;
public static final float MARGIN_BOTTOM = 50;
public static final float SPACIN