Skip to main content

Détail du fichier d'impression Java

Premiers mots: les derniers besoins de l'entreprise doivent utiliser l'impression Java et le projet appartenant à la structure C / S. Par conséquent, cet article ne doit pas être une impression Web Java. Il compare également les maux de tête, vérifie les informations en ligne et trouve cet exemple non parfait, il y aura toujours un problème aussi problème. Par conséquent, je veux écrire ma propre expérience pour que les gens partagent, apprennent!

Conseil: En raison de la raison de mon projet, l'impression de fichiers PDF sont fabriqués et d'autres formats expliqueront également!
Quelques façons d'imprimer

1. Imprimer à l'aide de l'original Java à

2. Imprimer
3. Utilisez PDFBOX

Java Imprimer Imprimer:

Il existe certains déploiements:

Mise en œuvre de l'objet imprimé:

Implémentation de l'interface imprimable
Utilisez l'objet d'impression avec la boîte à outils. GetDefaultToolkit (). Getprintjob)
Trouver des objets de positionnement
via javax.print.printSerivelookup:
Fondamentalement, imprimée (); méthodeimpression.
**实现Printable接口:**
// 此种方式必须实现 Printable接口private void printTextAction(String printStr){printStr = area.getText().trim(); // 打印字符串if (printStr != null && printStr.length() > 0){PAGES = getPagesCount(printStr);// 分页// 创建打印对象PrinterJob myPrtJob = PrinterJob.getPrinterJob();// 页面格式PageFormat pageFormat = myPrtJob.defaultPage();myPrtJob.setPrintable(this, pageFormat);if (myPrtJob.printDialog()) // 显示打印对话框{try{myPrtJob.print(); // 开始打印}catch(PrinterException pe){pe.printStackTrace();}}}else{JOptionPane.showConfirmDialog(null, "Sorry, Printer Job is Empty, Print Cancelled!", "Empty", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE);}}/* 分页 */public int getPagesCount(String curStr){int page = 0;int position, count = 0;String str = curStr;while(str.length() > 0) // 文本尚未计算完毕{position = str.indexOf('\n');count += 1;// 统计行数if (position != -1)str = str.substring(position + 1); // 截取尚未计算的文本elsestr = "";}if (count > 0)page = count / 54 + 1; // 以总行数除以 54 获取总页数return page;// 返回需打印的总页数}

// 打印字符private void printText2Action(String printStr){if (printStr != null && printStr.length() > 0){try{ PAGES = getPagesCount(printStr);DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;PrintService printService = PrintServiceLookup.lookupDefaultPrintService(); // 静默打印DocPrintJob job = printService.createPrintJob();PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();DocAttributeSet das = new HashDocAttributeSet();Doc doc = new SimpleDoc(this, flavor, das);job.print(doc, pras);}catch(PrintException pe){pe.printStackTrace();}}else{JOptionPane.showConfirmDialog(null, "Sorry, Printer Job is Empty, Print Cancelled!", "Empty", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE);}}

Auto 3 Il est également un point majeur de cet article

// 打印文件private void printFileAction(){// 创建一个文件选择器,构造函数存放的是当前用户路径JFileChooser fileChooser = new JFileChooser(SystemProperties.USER_DIR);// 显示文件选择对话框int state = fileChooser.showOpenDialog(this);// 选择完成if (state == fileChooser.APPROVE_OPTION){// 获取选择到的文件File file = fileChooser.getSelectedFile();// 打印属性,可为空PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();// 设置打印格式:自动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 (service != null){try{// 创建打印作业DocPrintJob job = service.createPrintJob();FileInputStream fis = new FileInputStream(file);DocAttributeSet das = new HashDocAttributeSet();pras.add(Chromaticity.MONOCHROME);// 请求横向模式// pras.add(OrientationRequested.LANDSCAPE);// Letter大小pras.add(MediaSizeName.NA_LETTER);// European A4 paperpras.add(MediaSizeName.ISO_A4);// 请求双面// pras.add(Sides.DUPLEX);Doc doc = new SimpleDoc(fis, flavor, das);job.print(doc, pras);}catch(Exception e){e.printStackTrace();}}}}

Original 3: Initialement, je veux utiliser de cette façon et découvrir qu'il a une courte commission très sérieuse. Il s'agit de TXT, HTML, PDF et d'autres types de fichiers, bien que son API fournit ces types de prinides, mais la plupart des imprimantes pouvant imprimer normalement ou imprimer du contenu sont en blanc! Cela peut être mort dans l'ancien, à la recherche de la raison, j'ai constaté que les gens ont réagi à ce problème, mais je ne l'ai pas résolu. Par conséquent, l'auteur fournit deux idées de mise en œuvre, 1. Méthodes d'impression autochtones, images et mots imprimés à 100%. Par conséquent, PDF peut être commuté sur une image, puis imprimée. C'est définitivement autour de la route, mais peut être réalisé. 2. Appliquez d'autres moyens d'effectuer l'impression. Ce qui suit continuera.



Avantages: Vous pouvez imprimer des documents complexes

d'Excel, mot, v.v: ordinateur doit être installéBureau, vous devez entrer dans la bibliothèque dans la position spécifiée.

Exigences:
Bibliothèque: Jacob.dll
Paquet JAR: Jacob.jar
Télécharger Jacob Environment
private void doPrintDoc(List<File> fileList) { if (null == fileList || fileList.isEmpty()) {return;} // 初始化组件ComThread.InitSTA(); for (File file : fileList) { if (file == null || !file.exists()) {return;} int index = file.getName().indexOf(".");String extName = file.getName().toUpperCase().substring(index + 1); String comApp = "Word.Application";String property = "Documents"; if (extName.equals("DOC") || extName.equals("DOCX") || extName.equals("WPS")) {comApp = "Word.Application";property = "Documents";} else if (extName.equals("XLS") || extName.equals("XLSX") || extName.equals("ET")) {comApp = "Excel.Application";property = "Workbooks";} else if (extName.equals("PPT") || extName.equals("PPTX") || extName.equals("DPS")) {comApp = "PowerPoint.Application";property = "Presentations";} ActiveXComponent axc = new ActiveXComponent(comApp);try {if (!property.equals("Presentations")) {Dispatch.put(axc, "Visible", new Variant(false));}Dispatch document = axc.getProperty(property).toDispatch(); Dispatch doc = null; if (property.equals("Presentations")) {doc = Dispatch.call(document, "Open", file.getAbsolutePath(), true, true, false).toDispatch();} else {doc = Dispatch.invoke(document, "Open", Dispatch.Method, new Object[] { file.getAbsolutePath() }, new int[1]).toDispatch();} Dispatch.call(doc, "PrintOut");Dispatch.call(doc, "Close");if (!property.equals("Presentations")) {axc.invoke("Quit", new Variant[] {});} } catch (Exception e) {e.printStackTrace();} finally {comApp = "";property = ""; }} ComThread.Release();} De cette manière, les inconvénients sont clairs, non passés

Déploiement final PDFBox

Ressources nécessaires: Définition du package pdfbox.jar / polices.jar: la journalisation des communes.JAR

Télécharger PDFBox (version complète), Code source et Commons-Logging.jar


private static void print() {try {File file = new File("C:/Users/Jason/Desktop/打印测试.pdf");PDDocument document = PDDocument.load(file);// 加载成打印文件PDFPrintable printable = new PDFPrintable(document);PrinterJob job = PrinterJob.getPrinterJob();job.setPrintable(printable);job.print();} catch (InvalidPasswordException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (PrinterException e) {e.printStackTrace();}} Cette méthode est tout simplement trop grande, code très simple, fort! Je recommande d'utiliser Ceci. Pas besoin de citer des bibliothèques dynamiques, juste rejoindre le package JAR!

Sujets

Catégories