精华内容
下载资源
问答
  • java打印pdf文件

    热门讨论 2010-03-15 13:10:12
    使用itext.jar包可以导出页面为pdf文件
  • java 打印pdf文件 ,也可支持批量打印
  • 如何用Java打印PDF文件

    2020-04-23 02:15:44
    Java打印PDF文件是常见的要求,我们始终需要打印PDF文件...

    用Java打印PDF文件是常见的要求,我们始终需要打印PDF文件。 在本文中,我将通过以下三个方面为您提供一个示例,说明如何使用Spire.PDF for Java库在Java应用程序中打印PDF:

    • 使用默认打印机静默打印PDF文档使用“打印”对话框打印PDF文档使用自定义页面尺寸打印PDF文档

    开始之前

    从Maven存储库安装Spire.PDF for Java。 下载包含两个jar,您的Java项目中应引用这两个jar。

    在不显示打印对话框的情况下将PDF文档打印到默认打印机,我们还可以自定义一些打印设置,例如删除默认打印边距,设置份数等。

    import com.spire.pdf.*;
    import java.awt.print.*;
    
    public class Print {
        public static void main(String[] args) {
            //load the sample document
            PdfDocument pdf = new PdfDocument();
            pdf.loadFromFile("Sample.pdf");
    
            PrinterJob loPrinterJob = PrinterJob.getPrinterJob();
            PageFormat loPageFormat  = loPrinterJob.defaultPage();
            Paper loPaper = loPageFormat.getPaper();
    
            //remove the default printing margins
            loPaper.setImageableArea(0,0,loPageFormat.getWidth(),loPageFormat.getHeight());
    
            //set the number of copies
            loPrinterJob.setCopies(2);
    
            loPageFormat.setPaper(loPaper);
            loPrinterJob.setPrintable(pdf,loPageFormat);
            try {
                loPrinterJob.print();
            } catch (PrinterException e) {
                e.printStackTrace();
            }
        }
    }
    

    使用打印对话框打印PDF。

    import com.spire.pdf.*;
    import java.awt.print.*;
    
    public class Print {
        public static void main(String[] args) {
            //load the sample document
            PdfDocument pdf = new PdfDocument();
            pdf.loadFromFile("Sample.pdf");
    
            PrinterJob loPrinterJob = PrinterJob.getPrinterJob();
            PageFormat loPageFormat  = loPrinterJob.defaultPage();
            Paper loPaper = loPageFormat.getPaper();
    
            //remove the default printing margins
            loPaper.setImageableArea(0,0,loPageFormat.getWidth(),loPageFormat.getHeight());
    
            loPageFormat.setPaper(loPaper);
            loPrinterJob.setPrintable(pdf,loPageFormat);
    
            //display the print dialog
            if (loPrinterJob.printDialog()) {
                try {
                    loPrinterJob.print();
                } catch (PrinterException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    

    使用自定义页面尺寸打印PDF文档。

    import com.spire.pdf.*;
    import java.awt.print.*;
    
    public class Print {
    
        public static void main(String[] args) {
    
            //load the sample document
            PdfDocument pdf = new PdfDocument();
            pdf.loadFromFile("Sample.pdf");
    
            PrinterJob loPrinterJob = PrinterJob.getPrinterJob();
            PageFormat loPageFormat  = loPrinterJob.defaultPage();
    
           //set the print page size
            Paper loPaper = loPageFormat.getPaper();
            loPaper.setSize(500,600);
            loPageFormat.setPaper(loPaper);
                    loPrinterJob.setPrintable(pdf,loPageFormat);
    
            try {
                loPrinterJob.print();
            } catch (PrinterException e) {
                e.printStackTrace();
            } 
        }
    }
    

    结论

    在Java应用程序中打印PDF文件非常简单。 这只是我在打印PDF的过程中使用的一种简单情况。 它还支持对PDF文件的其他操作,例如将PDF转换为图像,将数字签名添加到PDF文件。 您可以自己探索更多。

    from: https://dev.to//eiceblue/how-to-print-pdf-files-in-java-3160

    展开全文
  • Java实现PDF生成并且打印pdf文件(附demo) 目录: 0. 效果预览 1. 准备环境 2. Java如何调用打印机进行打印 3. Java如何生成pdf打印文件 4. 实现pdf内数据动态填充(可按需求改变数据,有一个模板就行) ...

    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();   
            } catch (DocumentException e) {   
                e.printStackTrace();   
            }   
            // 打开文档准备写入内容   
            document.open();
        }   
           
        
        /**  
         * 功能  创建PDF文档中的章节  
         * @param title 章节标题  
         * @param chapterNum 章节序列号  
         * @param alignment 0表示align=left,1表示align=center  
         * @param numberDepth 章节是否带序号 设值=1 表示带序号 1.章节一;1.1小节一...,设值=0表示不带序号  
         * @param font 字体格式  
         * @return Chapter章节  
         */  
        public static Chapter createChapter(String title, int chapterNum, int alignment, int numberDepth, Font font) {   
            Paragraph chapterTitle = new Paragraph(title, font);   
            chapterTitle.setAlignment(alignment);   
            Chapter chapter = new Chapter(chapterTitle, chapterNum);   
            chapter.setNumberDepth(numberDepth);    
            return chapter;   
        }   
        
           
        /**  
         * 功能:创建某指定章节下的小节  
         * @param chapter 指定章节  
         * @param title 小节标题  
         * @param font 字体格式  
         * @param numberDepth 小节是否带序号 设值=1 表示带序号 1.章节一;1.1小节一...,设值=0表示不带序号  
         * @return section在指定章节后追加小节  
         */  
        public static Section createSection(Chapter chapter, String title, Font font, int numberDepth) {   
            Section section = null;   
            if(chapter != null) {   
                Paragraph sectionTitle = new Paragraph(title, font);   
                sectionTitle.setSpacingBefore(SPACING);   
                section = chapter.addSection(sectionTitle);   
                section.setNumberDepth(numberDepth);
            }   
            return section;   
        }   
     
        
        /**
         * 功能:向PDF文档添加chunk
         * 
         * @param text
         * @param font
         * @return
         */
        public static Chunk createChunk(String text,Font font) {
        	return new Chunk(text, font);
        }
        
        /**  
         * 功能:向PDF文档中添加的内容 (核心句子) 
         * @param text 内容  
         * @param font 内容对应的字体  
         * @return phrase 指定字体格式的内容  
         */  
        public static Phrase createPhrase(String text,Font font) {
            Phrase phrase = new Paragraph(text,font);
            return phrase;   
        }   
           
        /**  
         * 最后关闭PDF文档  
         */  
        public void closeDocument() {   
            if(document != null) {   
                document.close();   
            }   
        }   
           
      
        /**  
         * 读PDF文件,使用了pdfbox开源项目  
         * @param fileName  
         */  
        public void readPDF(String fileName) {   
            File file = new File(fileName);   
            FileInputStream in = null;   
            try {   
                in = new FileInputStream(fileName);   
                // 新建一个PDF解析器对象   
                PDFParser parser = new PDFParser((RandomAccessRead) in);   
                // 对PDF文件进行解析   
                parser.parse();   
                // 获取解析后得到的PDF文档对象   
                PDDocument pdfdocument = parser.getPDDocument();   
                // 新建一个PDF文本剥离器   
                PDFTextStripper stripper = new PDFTextStripper();   
                // 从PDF文档对象中剥离文本   
                String result = stripper.getText(pdfdocument);   
                System.out.println("PDF文件的文本内容如下:");   
                System.out.println(result);   
      
            } catch (Exception e) {   
                System.out.println("读取PDF文件" + file.getAbsolutePath() + "生失败!" + e);   
                e.printStackTrace();   
            } finally {   
                if (in != null) {   
                    try {   
                        in.close();   
                    } catch (IOException e1) {   
                    }   
                }   
            }   
        }   
        
        /**
         * 获取临时文件
         * 
         * @return
         */
        public File getTempFile() {
        	if(file == null);
        		log.error("生成的临时文件失败");
        	return file;
        }
    }
    

    这是生成pdf的一个工具类,代码注释写的比较详细,直接看就行
    主要讲一下需要注意的地方:
    在这里插入图片描述
    文件字体:必须有字体文件

    	// 系统字体文件在 Windows/Fonts目录下,将其粘到src下即可
    	public static final String CHARACTOR_FONT_CH_FILE = "/SIMSUN.TTC,1";  //宋体 常规  
    
    纸张尺寸:设置A4,有别的需求可自行设置
    
        // 纸张尺寸
        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;  
    

    生成pdf时,必须最先调用方法生成document对象,并向里写数据

    void createDocument()
    

    pdf内容写完时,最后调用,关闭document对象

    void closeDocument()
    
    如何生成模板并填充数据

    举个例子
    比如生成这个样子:
    在这里插入图片描述

    private void writeVA(Chapter chapter) {
    
    // -------------------------这里开始 到下面写你自己的数据对象解析逻辑 --------
    		VisualAcuity[] vaArr = {leftPreVA,leftSufVA,rightPreVA,rightSufVA,doublePreVA,doubleSufVA} ;
    		initVA(); // 实例化对象
    		List<VisualAcuity> vaList = ppe.getVaList();
    		if (vaList != null&& vaList.size() > 0) {
    			for (VisualAcuity va:vaList
    				 ) {
    				fillVisualAcuity(va);
    			}
    		}
    // --------------------------end -------------------------------------
    		// 表格标题
    		JHCreatePDF.createSection(chapter,"视锐度:",titleFont,0);
    		// 生成一个section对象
    		Section section = JHCreatePDF.createSection(chapter, null, textFont, 0);
    		// 创建表格对象, 按需求初始化4列
    		PdfPTable table = new PdfPTable(4);
    		PdfPCell cell5 = null;
    
    		// 第一行 表头
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase(null,textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		cell5.setColspan(2);
    		table.addCell(cell5);
    
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase("单字母视锐度",textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell5);
    
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase("行字母视锐度",textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell5);
    
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase("拥挤字母视锐度",textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell5);
    
    		// 第二行
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase("左眼",textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		cell5.setPaddingTop(7);
    		cell5.setRowspan(2);
    		table.addCell(cell5);
    
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase("训练前",textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell5);
    
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase("填写你的数据”,textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell5);
    
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase(leftPreVA.getLineLetter(),textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell5);
    
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase(leftPreVA.getCrowdLetter(),textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell5);
    
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase("训练后",textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell5);
    
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase(leftSufVA.getSingleLetter(),textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell5);
    
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase(leftSufVA.getLineLetter(),textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell5);
    
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase(leftSufVA.getCrowdLetter(),textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell5);
    
    		// 第三行
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase("右眼",textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		cell5.setPaddingTop(7);
    		cell5.setRowspan(2);
    		table.addCell(cell5);
    
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase("训练前",textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell5);
    
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase(rightPreVA.getSingleLetter(),textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell5);
    
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase(rightPreVA.getLineLetter(),textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell5);
    
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase(rightPreVA.getCrowdLetter(),textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell5);
    
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase("训练后",textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell5);
    
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase(rightSufVA.getSingleLetter(),textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell5);
    
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase(rightSufVA.getLineLetter(),textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell5);
    
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase(rightSufVA.getCrowdLetter(),textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell5);
    
    		// 第四行
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase("双眼",textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		cell5.setRowspan(2);
    		cell5.setPaddingTop(7);
    		table.addCell(cell5);
    
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase("训练前",textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell5);
    
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase(doublePreVA.getSingleLetter(),textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell5);
    
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase(doublePreVA.getLineLetter(),textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell5);
    
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase(doublePreVA.getCrowdLetter(),textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell5);
    
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase("训练后",textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell5);
    
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase(doubleSufVA.getSingleLetter(),textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell5);
    
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase(doubleSufVA.getLineLetter(),textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell5);
    
    		cell5 = new PdfPCell(JHCreatePDF.createPhrase(doubleSufVA.getCrowdLetter(),textFont));
    		cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell5);
    
    		table.setWidthPercentage(100); // 填充度,百分百填充
    		section.add(table);
    	}
    
    

    为什么说是动态呢?? 因为这里使用的只是数据对象模型,只要是这种模型,不同数据的对象就会填充不同的数据,生成内容不同的pdf!

    整个流程涉及到pdf如何存储,打印,以及销毁!
    下面说说我的思路:

    我将生成的pdf存放在系统的临时文件夹中
    生成下一个打印文件时,定时检测pdf文件数量,然后删除之前生产的pdf文件

    到这里,基本打印,生产,数据填充,文件销毁基本写完

    下载demo源码,包含所有相关jar包,以及工具类和完整代码
    点击这里下载

    展开全文
  • 使用Java打印PDF文件 使用Java打印多个PDF文档 使用Java打印特定页面或页面范围 使用Java打印安全的PDF 使用Java打印PDF时检查打印任务的状态 目前,Java版Aspose.PDF升级到v20.10版,感兴趣的朋友可点击下载...

    在不同的公司和组织中,打印PDF文档通常是一项关键功能,可以通过在环境中进行配置来使用Aspose.PDF for Java API 。在本文中,将介绍在Java应用程序中可能出现的不同PDF打印方案。

    • 使用Java打印PDF文件
    • 使用Java打印多个PDF文档
    • 使用Java打印特定页面或页面范围
    • 使用Java打印安全的PDF
    • 使用Java打印PDF时检查打印任务的状态

    目前,Java版Aspose.PDF升级到v20.10版,感兴趣的朋友可点击下载最新版

    使用Java打印PDF文件

    按照以下步骤使用Java代码轻松打印PDF文件:

    • 创建PdfViewer对象
    • 加载输入PDF文件
    • 打印PDF文件

    下面的代码段显示了如何使用Java以编程方式打印PDF文件:

    //Create PdfViewer object
    PdfViewer viewer = new PdfViewer();
    //Open input PDF file
    viewer.bindPdf(dataDir + "Test.pdf");
    //Print PDF document
    viewer.printDocument();
    //Close PDF file
    viewer.close();

    使用Java打印多个PDF文档

    使用Java语言,打印多个文件或批量打印PDF文件是一个简单的过程。您可以按照以下步骤打印许多PDF文件:

    • 初始化字符串类型列表
    • 将多个PDF文件添加到打印
    • 打印PDF文件

    以下代码显示了如何使用Java语言打印多个PDF文件:

    // Initialize a list of String type
    Listfiles = new ArrayList<>();
    
    // Add multiple files to be printed
    files.add(dataDir + "First.pdf");
    files.add(dataDir + "Second.pdf");
    
    // Process each file to print
    for (String file : files)
    {
        //Create PdfViewer object
        PdfViewer viewer = new PdfViewer();
        //Open input PDF file
        viewer.bindPdf(file);
        //Print PDF document
        viewer.printDocument();
        //Close PDF file
        viewer.close();
    }

    使用Java打印特定页面或页面范围

    API在打印PDF文件时为您提供了很多控制。可以根据需要在打印文件时使用不同的字段和方法。例如,如果不想打印PDF文件的所有页面,而只打印几页。它可以是连续的页面范围,例如从第3页到第7页,也可以是随机的页面,如第1,5和6页。可以通过以下步骤涵盖这两种情况:

    • 初始化PdfViewer对象
    • 设置打印属性
    • 创建打印机和页面设置的对象
    • 指定是要打印所有页面,特定页面还是连续页面范围
    • 使用打印机和页面设置打印PDF文档

    以下代码显示了如何使用Java打印PDF文档中的特定页面或页面范围:

    // Create PdfViewer object
    PdfViewer viewer = new PdfViewer();
    // Open input PDF file
    viewer.bindPdf(dataDir + "test.pdf");
    // Set attributes for printing
    viewer.setAutoResize(true); // Print the file with adjusted size
    viewer.setAutoRotate(true); // Print the file with adjusted rotation
    viewer.setPrintPageDialog(false); // Do not produce the page number dialog when printing
    
    // Create objects for printer and page settings and PrintDocument
    PrintPageSettings pgs = new PrintPageSettings();
    PdfPrinterSettings ps = new PdfPrinterSettings();
    // Set printer name
    ps.setPrinterName("Microsoft Print to PDF");
    
    // ps.setPrintRange(2); // 0 = all pages; 1 = selection; 2 = some pages
    // ps.setFromPage(1);
    // ps.setToPage(2);
    
    
    ps.setPrintRange(1); // 0 = all pages; 1 = selection; 2 = some pages
    ps.setSelectedPages(new int[]{1, 3, 5});
    
    
    // Print document using printer and page settings
    viewer.printDocumentWithSettings(pgs, ps);

    使用Java打印安全的PDF

    有时,PDF文件使用密码保护或加密,以确保对数据的授权访问。可以使用Java代码轻松访问和打印安全或加密的PDF文件,并根据需要打印文件。需要按照以下步骤操作:

    • 使用密码加载受密码保护的PDF输入文件
    • 初始化PdfViewer对象
    • 打印PDF文件

    以下代码基于以下步骤,这些步骤说明了如何使用Java代码打印受保护的PDF文件:

    //Load secure PDF document while specifying User or Owner password
    Document document = new Document(dataDir + "Password.pdf" , "userORowner");
    //Create PdfViewer object
    PdfViewer viewer = new PdfViewer();
    //Open input PDF file
    viewer.bindPdf(document);
    //Print PDF document
    viewer.printDocument();
    //Close PDF file
    viewer.close();

    使用Java打印PDF时检查打印任务的状态

    将文件发送到打印机的打印队列后,您可以关注打印作业的状态。这使您的应用程序可以确定打印是否成功。PdfViewer类公开了getPrintStatus方法,该方法可帮助您检查打印作业的状态。例如,在将PDF打印为XPS格式时,可以按照以下步骤获取状态:

    • 加载输入PDF文件
    • 设置打印属性
    • 创建打印机和页面设置的对象
    • 设置打印机名称
    • 将输出打印到文件
    • 检查打印状态

    以下代码显示了如何使用Java代码在PDF打印过程中检查打印任务的状态:

    // Create PdfViewer object
    PdfViewer viewer = new PdfViewer();
    // Open input PDF file
    viewer.bindPdf(dataDir + "test.pdf");
    // Set attributes for printing
    viewer.setAutoResize(true); // Print the file with adjusted size
    viewer.setAutoRotate(true); // Print the file with adjusted rotation
    viewer.setPrintPageDialog(false); // Do not produce the page number dialog when printing
    
    // Create objects for printer and page settings and PrintDocument
    PrintPageSettings pgs = new PrintPageSettings();
    PdfPrinterSettings ps = new PdfPrinterSettings();
    
    // Set printer name
    ps.setPrinterName("Microsoft Print to PDF");
    
    
    // Resultant Printout name
    ps.setPrintFileName(dataDir + "ResultantPrintout.xps");
    
    // Print the output to file
    ps.setPrintToFile(true);
    
    // Print the document with settings specified above
    viewer.printDocumentWithSettings(pgs, ps);
    
    // Check the print status
    if (viewer.getPrintStatus() != null)
    {
        // An exception was thrown
        Exception ex = (Exception)viewer.getPrintStatus();
        if (ex != null)
        {
            // Get exception message
        }
    }
    else
    {
        // No errors were found. Printing job has completed successfully
        System.out.println("printing completed without any issue..");
    }

    如果您有任何疑问或需求,请随时加入Aspose技术交流群( 761297826 ),我们很高兴为您提供查询和咨询。

    展开全文
  • java调用实体打印机打印pdf文件,包含需要的jar包以及源码
  • java 调用打印机打印PDF文件

    千次阅读 2018-05-30 21:09:59
    1.Java Print Service ...这种方案局限性比较大,只能打印PNG文件(廉价打印机不支持打印PDF) 2.Apache PDFBox 它的打印实现也是封装了Java Service Print框架的打印功能,支持性比较好 引入maven <...

    1.Java Print Service

    Java Print Service是Java自带的打印框架,所在的包javax.print.PrintService;。

    这种方案局限性比较大,只能打印PNG文件(廉价打印机不支持打印PDF)

     

    2.Apache PDFBox

    它的打印实现也是封装了Java Service Print框架的打印功能,支持性比较好

    引入maven

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

    代码

    // 使用打印机的名称
    String printName = "Win32 Printer : Microsoft Print to PDF";
    String pdfPath = "D:\test.pdf";
    File file = new File(pdfPath);
    // 读取pdf文件
    PDDocument document = PDDocument.load(file);
    // 创建打印任务
    PrinterJob job = PrinterJob.getPrinterJob();
    // 遍历所有打印机的名称
    for (PrintService ps : PrinterJob.lookupPrintServices()) {
    String psName = ps.toString();
        // 选用指定打印机
        if (psName.equals(printerName)) {
            isChoose = true;
            job.setPrintService(ps);
            break;
        }
    }
    
    job.setPageable(new PDFPageable(document));
    
    Paper paper = new Paper();
    // 设置打印纸张大小
    paper.setSize(598,842); // 1/72 inch
    // 设置打印位置 坐标
    paper.setImageableArea(0, 0, paper.getWidth(), paper.getHeight()); // no margins
    // custom page format
    PageFormat pageFormat = new PageFormat();
    pageFormat.setPaper(paper);
    // override the page format
    Book book = new Book();
    // append all pages 设置一些属性 是否缩放 打印张数等
    book.append(new PDFPrintable(document, Scaling.ACTUAL_SIZE), pageFormat, 1);
    job.setPageable(book);
    // 开始打印
    job.print();

     

     

     

     

     

     

     

    展开全文
  • java实现打印PDF文件解决方案

    千次阅读 2012-09-12 16:45:16
    Java print service API本身支持打印, 但其并不具有解释PDF文件的能力,也就是说,用标准的Java Print API能够打印PDF文件, 但所用的打印机必须支持PDF打印标准,即打印机支持Post Script标准, 而这种打印机通常昂贵,...
  • java生成pdf文件打印

    万次阅读 2018-11-24 17:03:42
    一、前言  前几天,需要实现打印下载报表,经一番查找,选定iText--用于生成PDF文档的一个Java类库。...通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。  iText的安装非常方...
  • 使用Java打印pdf文件,数据需要重数据库里面获取,写相应的pdf模版,最后生成如下图样式的pdf文件 ![图片说明](https://img-ask.csdn.net/upload/201611/02/1478079419_88338.png)
  • Java 实现批量静默打印PDF文件

    千次阅读 2013-05-24 10:51:08
    经过几番折腾,我对批量打印PDF文件有了比较深入的了解。起初想通过使用JAVA 代码操纵PDF文件打印,但最终还是失败了,没能达到最终的效果。后来了解到可以用JAVA调用第三方软件的形式进行间接打印,这其中我试过了...
  • Java生成PDF文件

    千次阅读 2019-06-27 13:59:11
    Java生成PDF文件 一、前言  最近在做也导出试卷的功能,刚开始是导出为doc,可是导出来格式都有变化,最后说直接将word转为pdf,可是各种不稳定,各种报错、最后想到直接将文件写入pdf(参考:...
  • Java 打印PDF文件

    千次阅读 2009-10-21 19:09:00
    import java.io.*;import java.text.*;.../** A simple text test of SPDF package */public class PDFDemo { public static void main(String[] argv) throws IOException { PrintWriter pout
  • java打印PDF

    千次阅读 2018-06-20 10:00:47
    public class PrintPdf { public static void main(String[] args) { // System.out.println("... // 打印pdf的一个方法,首先安装下PDFCreator软件 try { printFile("D:\\2014090...
  • Java web 打印Java pdf打印Java 打印

    热门讨论 2009-12-07 16:30:04
    该项目是Java 实现web打印的源码,非IE打印,而是通过Java调用pdf打印。该项目是用MyEclipse写的。
  • 要求调用客户端的打印机打印pdf文件,我的项目部署在linux上的,但是要求调用本地客户端的打印机打印
  • Java代码实现打印pdf文件 方便以后学习,在此记录: package com.shipfile.servlet; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; import java.io.File; import java.io.IOException...
  • java实现连接打印机打印PDF文件

    千次阅读 2019-12-25 09:57:25
    一、在pom文件中引入对应的包: <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.6</version> </dependency&...
  • java读写pdf文件,教程文档与实例

    热门讨论 2009-11-11 10:58:25
    java读写pdf文件,教程文档都有,用读写pdf文件的方式做表格显示与打印效果很不错
  • 如何用java生成pdf文件

    2016-01-10 12:16:51
    就是写一个方法,把一个html文件打印pdf文件,我按照网上的试了,用了itext,结果不能显示中文,求大神帮忙,最好给出相应的jar包
  • 然后需求是 希望能在表格中进行签章,这里还要用到外部的接口给用户进行签章,这里的需求那么就不能使用 Window print() 方法去实现,因为不会在是一个html表格了,而是一个pdf文件,这样子其实也没什么,我们只要把...
  • java导出pdf文件工具类

    千次阅读 2016-12-08 19:12:32
    最近频繁用到itextpdf将数据导出为pdf文件,每次都要写一些基本的方法,太麻烦,就写了一个工具类,可以降低代码的冗余 下面是工具类: 首先引入itextpdf jar包,然后引入下面工具类: import java.io.File; import ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,907
精华内容 8,362
关键字:

java打印pdf文件

java 订阅