java生成pdf_Java实现PDF文件生成并且打印pdf文件 demo
时间: 2023-12-09 11:04:33 浏览: 34
好的,以下是一个简单的示例代码,用于生成并打印 PDF 文件:
```java
import java.io.FileOutputStream;
import com.itextpdf.text.Document;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
import java.awt.print.PrinterJob;
import javax.print.PrintService;
public class PDFGenerator {
public static void main(String[] args) {
try {
// 创建文档对象
Document document = new Document();
// 设置输出路径
String outputPath = "C:/pdf/demo.pdf";
PdfWriter.getInstance(document, new FileOutputStream(outputPath));
// 打开文档对象
document.open();
// 添加段落
document.add(new Paragraph("Hello World!"));
// 关闭文档对象
document.close();
// 输出提示信息
System.out.println("PDF文件已生成并保存到:" + outputPath);
// 打印PDF文件
printPDF(outputPath);
} catch (Exception e) {
e.printStackTrace();
}
}
// 打印PDF文件
public static void printPDF(String filePath) throws Exception {
// 获取打印机服务
PrintService printService = PrinterJob.getPrinterJob().getPrintService();
// 创建打印任务
PrinterJob job = PrinterJob.getPrinterJob();
// 设置打印机
job.setPrintService(printService);
// 设置打印文件
job.setPrintable(new PDFPrintable(filePath));
// 执行打印任务
job.print();
}
}
// PDF打印器
class PDFPrintable implements Printable {
private PDDocument document;
public PDFPrintable(String filePath) throws IOException {
// 加载PDF文件
this.document = PDDocument.load(new File(filePath));
}
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
// 获取PDF页码
int pageCount = document.getNumberOfPages();
if (pageIndex >= pageCount) {
return NO_SUCH_PAGE;
}
// 获取PDF页面
PDPage page = document.getPage(pageIndex);
// 创建Graphics2D对象
Graphics2D graphics2D = (Graphics2D) graphics;
// 获取打印区域大小
Rectangle2D.Double rect = new Rectangle2D.Double(
pageFormat.getImageableX(), pageFormat.getImageableY(),
pageFormat.getImageableWidth(), pageFormat.getImageableHeight());
// 渲染PDF页面
PDFRenderer renderer = new PDFRenderer(page.getDocument());
BufferedImage image = renderer.renderImage(pageIndex, 1.0f);
// 绘制PDF页面
graphics2D.drawImage(image, null, (int) rect.x, (int) rect.y);
// 返回打印结果
return PAGE_EXISTS;
}
}
```
这个示例使用了 iText 库来生成 PDF 文件,使用了 Java 的打印机 API 来打印 PDF 文件。示例中首先创建了一个文档对象,然后使用 PdfWriter 将其输出到指定的本地目录,接着添加了一个段落,最后关闭文档对象。示例中使用了字符串类型的 outputPath 变量来指定生成 PDF 文件的路径,你可以根据自己的需求修改该变量的值,指定生成 PDF 文件的具体路径。
当程序运行完成后,生成的 PDF 文件会自动保存到指定的本地目录中,并输出一条提示信息。接着,程序调用了 printPDF 方法,该方法使用了 Java 的打印机 API 来打印 PDF 文件。printPDF 方法中首先获取了系统中的打印机服务,然后创建了一个打印任务对象,设置了打印机和打印文件,最后调用了打印任务的 print 方法来执行打印任务。
注意,如果你要使用这个示例代码来打印 PDF 文件,你需要先在系统中安装一个 PDF 打印机服务,例如 Adobe PDF 或者 Foxit Reader PDF Printer 等,否则程序会抛出异常。