java從遠程服務器獲取PDF文件並后台打印(使用pdfFox)


一、java原生方式打印PDF文件

正反面都打印,還未研究出只打印單面的方法,待解決

public static void printFile(String path) throws Exception {
        File file = new File(path);
        File[] fies=file.listFiles();
            for(File f:fies){
            System.out.println("file "+f.getName());
                 String fileExt=f.getName().substring(f.getName().indexOf(".")+1,f.getName().length());
                  if("pdf".equalsIgnoreCase(fileExt)){
                    String filepath=path+File.separator+f.getName();
                    File pdfFile=new File(filepath);
                    //構建打印請求屬性集
                    PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
                    //設置打印格式,因為未確定文件類型,這里選擇AUTOSENSE
                    DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
                    //查找所有的可用打印服務
                    PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
                    //定位默認的打印服務
                    PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
                     //顯示打印對話框  
                    //PrintService service = ServiceUI.printDialog(null, 200, 200, printService,   defaultService, flavor, pras);
                    if(defaultService!=null){
                        DocPrintJob job = defaultService.createPrintJob(); //創建打印作業
                        FileInputStream fis = new FileInputStream(pdfFile); //構造待打印的文件流
                        DocAttributeSet das = new HashDocAttributeSet();
                        Doc doc = new SimpleDoc(fis, flavor, das); //建立打印文件格式
                        job.print(doc, pras); //進行文件的打印
                }
                    f.delete();
            }
        }
      }

    public static void main(String[] args) {
        //System.out.println("Value:"+test());
        //打印pdf的一個方法,首先安裝下PDFCreator軟件
        
        try {
            printFile("D:"+File.separator);
        } catch (Exception e) {
            System.out.println("打印文件異常:"+e.getMessage());
            e.printStackTrace();
        }
        
    }

 

二、使用pdfBox方式此問題解決

1.maven依賴

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.3</version>
</dependency>

2. coding

import java.awt.print.Book;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.PageRanges;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.printing.PDFPageable;
import org.apache.pdfbox.printing.PDFPrintable;

public final class PrintUtils
{
    public static void main(String[] args) {
        String fileURL = "http";
        String fileName = ".pdf文件";
        downloadFile(fileURL,fileName);
        printWithDialog(getFilePath(fileName));
    }

    public static void printWithDialog(String filePath) {
        try {
            PDDocument document = PDDocument.load(new File(filePath));
            PrinterJob job = PrinterJob.getPrinterJob();
            job.setPageable(new PDFPageable(document));
            if (job.printDialog()){
                job.print();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (PrinterException e) {
            e.printStackTrace();
        }
    }

    public static String getFilePath(String fileName){
        File path = new File(System.getProperty("user.dir").concat("/downFile"));
        if (!path.exists() && !path.isDirectory()) {
            path.mkdir();
        }
        String filePath = path + "/" + fileName;
        return filePath;
    }

    public static boolean downloadFile(String fileURL,String fileName) {
        try {
            URL url = new URL(fileURL);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            DataInputStream in = new DataInputStream(connection.getInputStream());
            DataOutputStream out = new DataOutputStream(new FileOutputStream(getFilePath(fileName)));
            byte[] buffer = new byte[4096];
            int count = 0;
            while ((count = in.read(buffer)) > 0) {
                out.write(buffer, 0, count);
            }
            out.close();
            in.close();
            return true;
        } catch (Exception e) {
            return false;
        }
    }

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM