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

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

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文件路径


效果图:

640.jpg

640.png

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


第二种:使用系统默认程序(浏览器)打开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浏览器安装到了我的项目路径下,这样,不同的用户使用该客户端都不需要重新安装我指定的浏览器。


效果图:

640.jpg


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

相关文章
|
17天前
|
消息中间件 Java Kafka
在Java中实现分布式事务的常用框架和方法
总之,选择合适的分布式事务框架和方法需要综合考虑业务需求、性能、复杂度等因素。不同的框架和方法都有其特点和适用场景,需要根据具体情况进行评估和选择。同时,随着技术的不断发展,分布式事务的解决方案也在不断更新和完善,以更好地满足业务的需求。你还可以进一步深入研究和了解这些框架和方法,以便在实际应用中更好地实现分布式事务管理。
|
23天前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
58 9
|
15天前
|
安全 Java 开发者
Java中WAIT和NOTIFY方法必须在同步块中调用的原因
在Java多线程编程中,`wait()`和`notify()`方法是实现线程间协作的关键。这两个方法必须在同步块或同步方法中调用,这一要求背后有着深刻的原因。本文将深入探讨为什么`wait()`和`notify()`方法必须在同步块中调用,以及这一机制如何确保线程安全和避免死锁。
29 4
|
15天前
|
Java
深入探讨Java中的中断机制:INTERRUPTED和ISINTERRUPTED方法详解
在Java多线程编程中,中断机制是协调线程行为的重要手段。了解和正确使用中断机制对于编写高效、可靠的并发程序至关重要。本文将深入探讨Java中的`Thread.interrupted()`和`Thread.isInterrupted()`方法的区别及其应用场景。
21 4
|
13天前
|
Java 数据处理 数据安全/隐私保护
Java处理数据接口方法
Java处理数据接口方法
20 1
|
2月前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
50 17
|
1月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
88 4
|
1月前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
104 2
|
2月前
|
Java 开发者
在Java多线程编程中,选择合适的线程创建方法至关重要
【10月更文挑战第20天】在Java多线程编程中,选择合适的线程创建方法至关重要。本文通过案例分析,探讨了继承Thread类和实现Runnable接口两种方法的优缺点及适用场景,帮助开发者做出明智的选择。
20 2
|
1月前
|
Java Spring
JAVA获取重定向地址URL的两种方法
【10月更文挑战第17天】本文介绍了两种在Java中获取HTTP响应头中的Location字段的方法:一种是使用HttpURLConnection,另一种是使用Spring的RestTemplate。通过设置连接超时和禁用自动重定向,确保请求按预期执行。此外,还提供了一个自定义的`NoRedirectSimpleClientHttpRequestFactory`类,用于禁用RestTemplate的自动重定向功能。