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调用打印机进行打印文件
之前写过一篇,多种方式,有兴趣的可以看看。点击这里查看
这里使用的是PDFBox方式实现打印,引入PDFBox.jar和commons-logging.jar,嫌麻烦地可以在文章底部下载demo,我把所有相关的jar,源码都放进去了
传入文件对象即可进行打印,打印前请确认打印机是否正常连接!!!!
/**
* 打印实现类
* 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文件
这个比较复杂,涉及到单元格,表,段落,标题等内容
慢慢来,一步一步讲解一下
/**
* 生成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 SPACING = 20;
// 文件对象
private Document document = null;
private File file;
/**
* 功能:创建导出数据的目标文档
* @return
*/
public void createDocument() {
// 创建pdf文件
FileOutputStream out = null;
document = new Document(PAGE_SIZE, MARGIN_LEFT, MARGIN_RIGHT, MARGIN_TOP, MARGIN_BOTTOM);
try {
file = File.createTempFile("temp", ".pdf");
} catch (IOException e1) {
Log.error("创建临时打印文件失败!");
PromptUtil.error("创建临时打印文件失败,请关闭重试");
e1.printStackTrace();
return; // 结束后续运行
}
try {
out = new FileOutputStream(file);
PdfWriter.getInstance(document, out);
} catch (FileNotFoundException e) {
e.printStackTrace(