您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > JAVA

Java预览及打印PDF的三种方法

时间:2019-10-29 16:54:38  来源:  作者:

JAVA实现PDF打印的方式有很多,话不多说,我这里将给出J三种打开PDF的方法。

第一种:Java Swing自带的组件预览、打印PDF

首先需要一个工具类:

package com.beiqisoft.cic;

import java.awt.EventQueue;

import javax.swing.JFrame;

import javax.swing.JPanel;

import org.icepdf.ri.common.SwingController;

import org.icepdf.ri.common.SwingViewBuilder;

public class PDFViewer {

public JFrame frame;

public String pdf;

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {

public void run() {

try {

PDFViewer window = new PDFViewer("c:/wd/b.pdf");

window.frame.setVisible(true);

} catch (Exception e) {

e.printStackTrace();

}

}

});

}

public PDFViewer(String pdf) {

this.pdf = pdf;

initialize();

}

private void initialize() {

frame = new JFrame();

frame.setSize(1100, 1000);

frame.setLocationRelativeTo(null);

frame.getContentPane().setLayout(null);

SwingController controller = new SwingController();

SwingViewBuilder factory = new SwingViewBuilder(controller);

JPanel viewerComponentPanel = factory.buildViewerPanel();

controller.getDocumentViewController().setAnnotationCallback(

new org.icepdf.ri.common.MyAnnotationCallback(

controller.getDocumentViewController()));

controller.openDocument(pdf);

frame.setContentPane(viewerComponentPanel);

}

}

然后在主程序中调用:

new PDFViewer(fileName).frame.setVisible(true);

fileName是你生成的PDF文件路径

效果图:

Java预览及打印PDF的三种方法
Java预览及打印PDF的三种方法

弊端:不能修改右边距和下边距参数,对于打印位置要求精准的项目,不适用。

第二种:使用系统默认程序(浏览器)打开PDF文件

工具类:

package com.beiqisoft.cic.util;

import java.io.File;

import java.util.Iterator;

import java.util.Map;

public class googlepdf {

public static void opengoogle(String jurl,String fileName) {

if (java.awt.Desktop.isDesktopSupported()) {

try {

// 创建一个URI实例

String url="file:///"+jurl.replace("\", "/")+"/"+fileName.substring(2);

String url="file:///D:/cic/"+fileName.substring(2);

java.net.URI uri = java.net.URI.create(url);

// 获取当前系统桌面扩展

java.awt.Desktop dp = java.awt.Desktop.getDesktop();

// 判断系统桌面是否支持要执行的功能

if (dp.isSupported(java.awt.Desktop.Action.BROWSE)) {

// 获取系统默认浏览器打开链接

dp.browse(uri);

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

主程序调用工具类:

googlepdf.opengoogle(getLujing(),fileName);

public String getLujing(){

//获取类加载的根路径

//

File file3 = new File(this.getClass().getResource("/").getPath());

//

String fileurl=file3.toString();

//

String url=fileurl.substring(0,fileurl.length()-14);

//

return url.replace("\", "/");

File file3 = new File(".");

String fileurl = "";

try {

fileurl = file3.getCanonicalPath().toString();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return fileurl;

}

}

效果图因不同系统PDF默认程序不同,这里就不展示了

第三种:Java指定浏览器预览及打印PDF

工具类与第二种方式一样,将里面的默认程序打开的代码换成

//浏览器位置

String google=jC:\Users\wangdong-surface\Desktop\cic\Google\Chrome\Application\chrome.exe";

Map map = System.getenv();

for (Iterator itr = map.keySet().iterator(); itr.hasNext();) {

String value = (String) map.get((String) itr.next());

if (value.contains("firefox.exe")) {

google = value;

break;

}

}

Runtime.getRuntime().exec(new String[] { google, url });

我将Google浏览器安装到了我的项目路径下,这样,不同的用户使用该客户端都不需要重新安装我指定的浏览器。

效果图:

Java预览及打印PDF的三种方法

以上就是三种Java PDF打印方法,希望能帮到需要的你。



Tags:Java 打印PDF   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
Java实现PDF打印的方式有很多,话不多说,我这里将给出J三种打开PDF的方法。第一种:Java Swing自带的组件预览、打印PDF首先需要一个工具类:package com.beiqisoft.cic;import ja...【详细内容】
2019-10-29  Tags: Java 打印PDF  点击:(480)  评论:(0)  加入收藏
▌简易百科推荐
面向对象的特征之一封装 面向对象的特征之二继承 方法重写(override/overWrite) 方法的重载(overload)和重写(override)的区别: 面向对象特征之三:多态 Instanceof关键字...【详细内容】
2021-12-28  顶顶架构师    Tags:面向对象   点击:(2)  评论:(0)  加入收藏
一、Redis使用过程中一些小的注意点1、不要把Redis当成数据库来使用二、Arrays.asList常见失误需求:把数组转成list集合去处理。方法:Arrays.asList 或者 Java8的stream流式处...【详细内容】
2021-12-27  CF07    Tags:Java   点击:(3)  评论:(0)  加入收藏
文章目录 如何理解面向对象编程? JDK 和 JRE 有什么区别? 如何理解Java中封装,继承、多态特性? 如何理解Java中的字节码对象? 你是如何理解Java中的泛型的? 说说泛型应用...【详细内容】
2021-12-24  Java架构师之路    Tags:JAVA   点击:(5)  评论:(0)  加入收藏
大家好!我是老码农,一个喜欢技术、爱分享的同学,从今天开始和大家持续分享JVM调优方面的经验。JVM调优是个大话题,涉及的知识点很庞大 Java内存模型 垃圾回收机制 各种工具使用 ...【详细内容】
2021-12-23  小码匠和老码农    Tags:JVM调优   点击:(12)  评论:(0)  加入收藏
前言JDBC访问Postgresql的jsonb类型字段当然可以使用Postgresql jdbc驱动中提供的PGobject,但是这样在需要兼容多种数据库的系统开发中显得不那么通用,需要特殊处理。本文介绍...【详细内容】
2021-12-23  dingle    Tags:JDBC   点击:(13)  评论:(0)  加入收藏
Java与Lua相互调用案例比较少,因此项目使用需要做详细的性能测试,本内容只做粗略测试。目前已完成初版Lua-Java调用框架开发,后期有时间准备把框架进行抽象,并开源出来,感兴趣的...【详细内容】
2021-12-23  JAVA小白    Tags:Java   点击:(11)  评论:(0)  加入收藏
Java从版本5开始,在 java.util.concurrent.locks包内给我们提供了除了synchronized关键字以外的几个新的锁功能的实现,ReentrantLock就是其中的一个。但是这并不意味着我们可...【详细内容】
2021-12-17  小西学JAVA    Tags:JAVA并发   点击:(11)  评论:(0)  加入收藏
一、概述final是Java关键字中最常见之一,表示“最终的,不可更改”之意,在Java中也正是这个意思。有final修饰的内容,就会变得与众不同,它们会变成终极存在,其内容成为固定的存在。...【详细内容】
2021-12-15  唯一浩哥    Tags:Java基础   点击:(17)  评论:(0)  加入收藏
1、问题描述关于java中的日志管理logback,去年写过关于logback介绍的文章,这次项目中又优化了下,记录下,希望能帮到需要的朋友。2、解决方案这次其实是碰到了一个问题,一般的情况...【详细内容】
2021-12-15  软件老王    Tags:logback   点击:(19)  评论:(0)  加入收藏
本篇文章我们以AtomicInteger为例子,主要讲解下CAS(Compare And Swap)功能是如何在AtomicInteger中使用的,以及提供CAS功能的Unsafe对象。我们先从一个例子开始吧。假设现在我们...【详细内容】
2021-12-14  小西学JAVA    Tags:JAVA   点击:(22)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条