精华内容
下载资源
问答
  • Java实现打印功能

    千次阅读 2018-09-12 15:09:38
    前段时间项目中刚好有遇到这个需求,具体是实现将上传到服务端的附件进行不下载在线打印打印时要进行预览。 一开始是想直接使用Java API的打印方法,具体实现时发现在启用后可以调出打印对话框,但打印机没有反应...

    前段时间项目中刚好有遇到这个需求,具体是实现将上传到服务端的附件进行不下载在线打印,打印时要进行预览。

    一开始是想直接使用Java API的打印方法,具体实现时发现在启用后可以调出打印对话框,但打印机没有反应,查看了网上的很多方法,试了下还是不行,就放弃了。看下Java实现的代码:

    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
     
    import javax.print.Doc;
    import javax.print.DocFlavor;
    import javax.print.DocPrintJob;
    import javax.print.PrintException;
    import javax.print.PrintService;
    import javax.print.PrintServiceLookup;
    import javax.print.SimpleDoc;
    import javax.print.attribute.DocAttributeSet;
    import javax.print.attribute.HashDocAttributeSet;
    import javax.print.attribute.HashPrintRequestAttributeSet;
    import javax.print.attribute.PrintRequestAttributeSet;
    import javax.print.attribute.standard.MediaSizeName;
    import javax.swing.JOptionPane;
     
    public class PrintUtils {
        public static void main(String[] args) {
            FileInputStream textStream = null;
            try {
                textStream = new FileInputStream("C:\\CityLove.pdf");
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
             
            //String printStr = "打印测试内容";// 获取需要打印的目标文本
            if (textStream != null) // 当打印内容不为空时
            {
                // 指定打印输出格式
                DocFlavor flavor = DocFlavor.INPUT_STREAM.PDF;//SERVICE_FORMATTED.PRINTABLE
                // 定位默认的打印服务
                PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
                // 创建打印作业
                DocPrintJob job = printService.createPrintJob();
                // 设置打印属性
                PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
                // 设置纸张大小,也可以新建MediaSize类来自定义大小
                pras.add(MediaSizeName.ISO_A4);
                DocAttributeSet das = new HashDocAttributeSet();
                // 指定打印内容
                Doc doc = new SimpleDoc(textStream, flavor, das);
                // 不显示打印对话框,直接进行打印工作
                try {
                    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);
            }
        }
     
     
    }

    之后就采用的POI方法装换文件,将word,Excel转成HTML页面,然后调用浏览器的打印功能。具体如下:

    需要添加的maven依赖,对应版本,否则会报错

    <dependency>
    	<groupId>org.apache.poi</groupId>
    	<artifactId>poi-scratchpad</artifactId>
    	<version>3.15</version>
    </dependency>
    <dependency>
    	<groupId>org.apache.poi</groupId>
    	<artifactId>poi</artifactId>
    	<version>3.15</version>
    </dependency>
    <dependency> 
    	<groupId>org.apache.poi</groupId> 
    	<artifactId>poi-ooxml</artifactId>
    	<version>3.15</version>
    </dependency>
    <dependency>
    	<groupId>org.apache.poi</groupId>
    	<artifactId>ooxml-schemas</artifactId>
    	<version>1.3</version>
    </dependency>
    <dependency> 
        <groupId>fr.opensagres.xdocreport</groupId> 
    	<artifactId>xdocreport</artifactId> 
    	<version>1.0.6</version> 
    </dependency>
    <dependency>
    	<groupId>org.apache.poi</groupId>
    	<artifactId>poi-ooxml-schemas</artifactId>
    	<version>3.15</version><!--$NO-MVN-MAN-VER$-->
    </dependency>

    Java转换方法:

    /**
       * doc转HTML
       */
      public String wordDocToHtml(String filePath) throws Exception {
        InputStream input = new FileInputStream(filePath);
        HWPFDocument wordDocument = new HWPFDocument(input);
        WordToHtmlConverter wConverter =
            new WordToHtmlConverter(DocumentBuilderFactory.newInstance().newDocumentBuilder()
                .newDocument());
    
        wConverter.setPicturesManager(new PicturesManager() {
          @Override
          public String savePicture(byte[] content, PictureType pictureType, String suggestedName,
              float widthInches, float heightInches) {
            return suggestedName;
          }
        });
    
        wConverter.processDocument(wordDocument);
        List list = wordDocument.getPicturesTable().getAllPictures();
        if (list != null) {
          for (int i = 0; i < list.size(); i++) {
            Picture picture = (Picture) list.get(i);
            picture.writeImageContent(new FileOutputStream(filePath + picture.suggestFullFileName()));
          }
        }
    
        Document document = wConverter.getDocument();
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        DOMSource domSource = new DOMSource(document);
        StreamResult streamResult = new StreamResult(outputStream);
        TransformerFactory tFactory = TransformerFactory.newInstance();
        Transformer serializer = tFactory.newTransformer();
        serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
        serializer.setOutputProperty(OutputKeys.INDENT, "yes");
        serializer.setOutputProperty(OutputKeys.METHOD, "html");
        serializer.transform(domSource, streamResult);
        outputStream.close();
    
        String content = new String(outputStream.toByteArray());
        String newFilePath = UuidUtil.getTimeBasedUuid() + ".html";
        File file = new File(filePath + newFilePath);
        FileUtils.writeStringToFile(file, content, "utf-8");
    
        return file.getName();
      }
    
    /**
       * docx转HTML
       * 
       * @throws Exception
       */
    
      public String wordDocxToHtml(String filePath, HttpServletRequest request) throws Exception {
        String sysFileString = getSysFilePath(request);
        InputStream input = new FileInputStream(filePath);
        XWPFDocument document = new XWPFDocument(input);
        XHTMLOptions options = XHTMLOptions.create(); // 存放图片的文件夹
    
        options.setExtractor(new FileImageExtractor(new File(sysFileString))); // html中图片的路径
        options.URIResolver(new BasicURIResolver(sysFileString));
        options.setIgnoreStylesIfUnused(false);
        options.setFragment(true);
    
        String newFilePath = UuidUtil.getTimeBasedUuid() + ".html";
        File file = new File(filePath + newFilePath);
    
        OutputStreamWriter outputStreamWriter =
            new OutputStreamWriter(new FileOutputStream(file), "utf-8");
        BufferedWriter bufferedOutputStream = new BufferedWriter(outputStreamWriter);
    
        XHTMLConverter xhtmlConverter = (XHTMLConverter) XHTMLConverter.getInstance();
        xhtmlConverter.convert(document, bufferedOutputStream, options);
    
        if (outputStreamWriter != null) {
          outputStreamWriter.close();
        }
    
        return file.getName();
      }
    
    /**
       * Excel转HTML
       * 
       * @throws Exception
       */
      public String excelToHtml(String filePath, String suffix) throws Exception {
        InputStream input = new FileInputStream(filePath);
        HSSFWorkbook excelBook = null;
        if (suffix.equals("xlsx")) {
          // 将07版转化为03版
          Xssf2HssfUtil xlsx2xls = new Xssf2HssfUtil();
          XSSFWorkbook xSSFWorkbook = new XSSFWorkbook(input);
          excelBook = new HSSFWorkbook();
          xlsx2xls.transformXSSF(xSSFWorkbook, excelBook);
        } else {
          excelBook = new HSSFWorkbook(input);
        }
    
        ExcelToHtmlConverter eHtmlConverter =
            new ExcelToHtmlConverter(DocumentBuilderFactory.newInstance().newDocumentBuilder()
                .newDocument());
        int index = excelBook.getActiveSheetIndex();
        String sheetName = "";
        for (int i = 0; i < index + 1; i++) {
          // 设置字体
          HSSFFont font = excelBook.getFontAt((short) i);
          font.setCharSet(HSSFFont.DEFAULT_CHARSET);
          font.setFontHeightInPoints((short) 8);// 更改默认字体大小
          font.setFontName("黑体");// 更改字体格式
          font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);// 非粗体显示
          // 去掉Excel头
          eHtmlConverter.setOutputColumnHeaders(false);
          // 去掉Excel行号
          eHtmlConverter.setOutputRowNumbers(false);
          // 去掉表名
    
          sheetName = sheetName + " ";
          excelBook.setSheetName(i, sheetName + " ");
        }
    
        eHtmlConverter.processWorkbook(excelBook);
        List pics = excelBook.getAllPictures();
        if (pics != null) {
          for (int i = 0; i < pics.size(); i++) {
            Picture pic = (Picture) pics.get(i);
            pic.writeImageContent(new FileOutputStream(filePath + pic.suggestFullFileName()));
          }
        }
    
        Document htmlDocument = eHtmlConverter.getDocument();
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        DOMSource domSource = new DOMSource(htmlDocument);
        StreamResult streamResult = new StreamResult(outStream);
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer serializer = tf.newTransformer();
        serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
        serializer.setOutputProperty(OutputKeys.INDENT, "yes");
        serializer.setOutputProperty(OutputKeys.METHOD, "html");
        serializer.transform(domSource, streamResult);
        outStream.close();
    
        String content = new String(outStream.toByteArray());
        String newFilePath = UuidUtil.getTimeBasedUuid() + ".html";
        File file = new File(filePath + newFilePath);
        FileUtils.writeStringToFile(file, content, "utf-8");
    
        return file.getName();
      }

    最终虽然大致实现了功能,但是还有很多问题,在文件转换时,有很多样式没法保存,比如说有的下划线丢失了,文档的对齐格式跑偏。这几个问题有尝试去修改,在网上也搜了很多,没有找到解决方法。个人觉得还是把文件转成PDF格式,再去进行操作可能会更好一点。

    希望分享对大家有所帮助,欢迎留言改进。

    展开全文
  • java 开发将数据库查询的数据导出到word中,支持打印预览和打印功能

    java 开发将数据库查询的数据导出到word中,支持打印预览和打印功能

    展开全文
  • [CKEditor那点事儿]使用java开发ckeditor的文件上传功能

    万次阅读 热门讨论 2010-08-24 11:40:00
    那些使用java开发CKEditor上传和文件浏览功能,千篇一律的使用的是Servlet的方式,传统的JSP下的模式,不管现在框架已经发展到何种境界,都是一样的照搬,抄袭,让人很无奈,其实这是一个很简单的功能,就是获取请求...

    关于CKEditor的使用,网络上有无数的文章,这里不再赘述。而关于java支持的文件上传功能,网络上同样有千千万万的文章,但是遍历十几二十篇就会发现,千篇一律的抄袭,各种爬虫程序带来的互联网信息垃圾给我们的信息获取带来很大的障碍。那些使用java开发CKEditor上传和文件浏览功能,千篇一律的使用的是Servlet的方式,传统的JSP下的模式,不管现在框架已经发展到何种境界,都是一样的照搬,抄袭,让人很无奈,其实这是一个很简单的功能,就是获取请求,上传文件,返回结果而已。

    通常我们的项目会使用springMVC或者struts或者其他框架,来作为C的部分,说白了,也就是控制请求和执行流程。而如果我们在采用了spring或者struts 的系统中,还是去使用servlet配置urlmapping来拦截文件上传请求,那岂不是让人很别扭,那些copy文章的人,怎么就不去考虑考虑呢?

    言归正传,ckeditor默认的图片插入,是不带“浏览图片”和“上传”标签的,所以需要手动配置一下,开启这个功能,而主要的猫腻,也就是这个配置的地方:

    上面我们配置了路径,由于ckeditor并没有支持java的插件,所以这里也是需要我们自己开发的内容。上面的上传和浏览图片的请求,我们定义了自己的url,也就是上述.do结尾的部分,我的测试工程中使用的是springMVC,利用的是2.5以后的注解功能。

    好了,这里配置了,那么作用是什么呢?打开ckeditor:

     

    可以看到,上述多出了上传和浏览的功能,现在点击是没用的,因为我们还没开发具体的实现嘛

    那么那些配置出了多出了这两个地方,还有什么作用呢?用firefox看看其上传部分的代码,可以很明显直到那个配置的url到底是什么用途了

     

    其实就是一个上传form,那个action的url就是我们配置的而已,所以这里只要开发拦截这个请求并上传文件的功能就可以了嘛,多简单的事儿。

     

    写代码前,看看我们的现状吧,我们可能会让这个图片上传到图片服务器去,但是呢,兜里尚未有足够的银子,而且这个图片暂时量不大,所以现阶段还是保存在应用的特定位置中,够无奈的吧,没办法,谁让咱么有特定的图片服务器呢,那么就下办法在本应用下作文章吧。我们采用一个upload/img的目录,来保存图片文件,以后要迁移到图片服务器也方便些。

    但是问题来了,所有的图片都放到这个文件夹下,岂不是很庞大,而且一旦超过1000张,文件搜索速度是有点折磨的,那就咱想想办法吧,那就再建立一级目录,每一级下面最多放500张,如果当前文件夹下超过了500张,就重新建立一个文件夹,放入其中。这样目录就变成了三级的 upload/img/20100824 我们采用时间字符串来命名。

    那就看看代码吧:

     

    这里我用的是注解@Controller的方式,如果你用的是struts,那就去配置一个action吧,都是很简单的事儿……

     

    再啰嗦点别的,这里如果使用这样的方式开发完成以后,在eclipse里直接去run in server,你会发现上传没报错,但是返回的url根本不显示图片嘛,怎么回事儿?

    是这样子的,在eclipse下有一个server的显示框,双击你建立的server,可以配置server的启动路径等内容,其中有一个需要我们特别关注的选项:

    将来项目发布的时候,如果你直接将项目拷贝到tomcat里,也没啥子问题,但是测试阶段更为方便的,是在这里更改下部署路径等,让我们的上传功能跟上线之后一样生效。

    上述的上传日志,会打印出:

    D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/NormandyPosition/freemarker/upload/img/20100824/logo.jpg

    对比下上图的内容,是不是你也明白了是怎么回事儿了,上述的其实是一个临时的目录,所以这里我们要更改一下:

    把server path改成你的apache的安装目录,你可以直接选择第二个单选按钮

    把deploy path改成你的项目名称

    这样改完之后呢:

     

     

     

     

    搞定了~

     

    下篇咱想想怎么去弄一个多级目录的服务器的图片浏览功能

     

     

    展开全文
  • java错误日志打印问题

    千次阅读 2019-03-29 17:12:20
    前言:说来惭愧,做了5,6的java开发,今天才发现之前的打印方式是错误的,生产环境出了问题,但是没法定位,后来发现输出方式有问题,为此记录一下; 已下面方法作为测试 import org.slf4j.Logger; import org.slf4j...

    前言:说来惭愧,做了5,6的java开发,今天才发现之前的打印方式是错误的,生产环境出了问题,但是没法定位,后来发现输出方式有问题,为此记录一下;

    已下面方法作为测试

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory
    
    private Logger logger = LoggerFactory.getLogger(AccountController.class);
    
    @RequestMapping(value="/testException")
    public void testException() {
    	try {
    		int result = 1 / 0;
    	} catch (Exception e) {
    	    e.printStackTrace();  // 0000
    		logger.error("--------testException.errorInfo>:", e);// 1111
    		logger.error("--------testException.errorInfo>:{}", e.getMessage());  // 2222
    		logger.error("--------testException.errorInfo>:"+ e);  // 3333
    	}
    }
    

    0000: 在控制台打印堆栈异常信息,一般在开发调试的时候使用
    1111:打印详细的错误信息,可打印某个类,某个方法,某行以及错误消息
    2222:只打印错误信息,不定位到某一行
    3333:错误的写法,不会打印,用逗号“,”分割

    **正确的是 logger.error("--------testException.errorInfo>:", e);// 1111**
    展开全文
  • 本文记录了java开发过程的一些细节问题,并给出了详细的解决方式,希望能帮助你解决你的问题...
  • 最近在做微信服务号开发,简单总结一下,便于... JAVA 微信公众平台的开发中,微信只公布了一个基于Http协议的接口和加解密的算法sdk,在开发的过程中可以自己根据需求来配置数据,调用相关接口,也可以引用比较...
  • 电子面单打印,因为系统版本原因,没有使用丰桥的sdk,而是通过打印控件LODOP打印,关键的是怎么生成相关数据,以及排版,因为有了德邦接口的经验,直接拿来就用,我们使用的是100x150mm规格的,以下是超完整的打印...
  • MLDN李兴华JAVA开发实战经典

    千次阅读 2018-02-14 16:04:48
    MLDN李兴华JAVA开发实战经典第一部分 课程体系就业课程介绍 Java开发实战经典视频列表 《java开发实战经典》一书出版以来一直受到大家的好评,我们在此感谢支持我们的读者,如果对于课程的视频有不清楚的读者,...
  • JAVA开发全集

    千次阅读 2016-09-23 16:16:20
     //打印消息信息  message.writeTo(System.out);  } catch (SOAPException e) {  e.printStackTrace();  } catch (IOException e) {  e.printStackTrace();  }  }    @Test//基于soap的...
  • 一般来说,大部分小伙伴都是在windows上进行软件开发,然后部署应用时发布到Linux环境下,这时候就需要在Linux上安装Java运行环境了。当然直接安装配置好JDK,我们也可以在Linux上直接开发。 一、环境准备 centos7...
  • java前后台开发之文件上传

    万次阅读 2017-08-31 10:23:05
    做了一个多月的改bug,6天的开发,刚做完一个文件上传,得好好整理下。 文件上传的大体思路其实是一样的,前端通过表单的方式上传,后端解析这个表单请求中的内容,得到文件部分的字段,再以流的形式读到内存中,...
  • Java集成DataX开发

    千次阅读 2019-01-16 17:02:02
    Java集成DataX开发背景DataX 下载集成准备系统集成总结 背景 最近有个项目需要将其他服务器上个的数据库数据导入到其他数据库中,有个同事推荐使用DataX工具,所以下了个DataX研究了下;发现还需要搭建Python环境,...
  • JAVA开发Yarn应用

    2020-05-03 23:33:16
    文章目录 思考 流程图 需求 实际... } } } 启动 命令3个参数,第一个执行的文件位置,第二个测试container个数,第三个这个程序的jar包在,hdfs上的位置,在程序省略了把本地jar包上传到hdfs上了,自己提前上传 java ...
  • 使用JNPF开发平台可以简单、快速、高效的构建各种类型java项目。 JAVA版介绍 JNPF.java版采用前后端分离,可将代码直接导入idea运行,也可将前后端代码利用ngnix分开部署。 JNPF主体架构、技术 采用前后端分离...
  •  一、新建数据库表 二、新建Java项目 1、上传相关jar包: 2、conf下新建配置文件 log4j.xml,用来打印日志 mybatis-config.xml全局配置文件 需配置数据源,事物和mapper.xml的位置 3、对应着数据库新建bean ...
  • Java游戏开发——推箱子

    千次阅读 多人点赞 2018-11-27 17:02:11
    目的:使用Java开发一个带音乐版推箱子游戏 素材文件夹: 素材分析:pic1是墙,pic2是箱子,pic3是箱子位于目标点上时的状态,pic4是目标点,pic5是向下移动,pic6是向左移动,pic7是向右移动,pic8是向上移动...
  • 微信小程序开发之图片上传+Java服务端接收

    万次阅读 多人点赞 2017-09-02 00:07:15
    但是,但是,但是,靠谱的,不用改动就能够正常运行的Java服务端接收代码,几乎没有,没错,是几乎,没有。因为我基本上把网上能搜出来的代码都试了。试到第三个的时候,有点靠谱了,遗憾的是有bug。所幸改了bug后,...
  • java开发日常工作笔记

    2019-07-19 10:21:30
    在项目中mybatis日志打印级别配置文件修改日志打印级别后仍然没有打印sql,但是另一半运维急需sql,通过断点在 com.ibatis.sqlmap.engine.mapping.statement.MappedStatement#executeQueryWithCallback 查看变量sql...
  • Java 开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一 线实战的检验及不断完善,公开到业界后,众多社区开发者踊跃参与,共同打磨完善,系统化地整理 成册,当前的版本是泰山版。...
  • java 开发工具及其他使用工具介绍

    千次阅读 2017-09-05 10:10:57
    PrintLife 是一款Mac平台的封面版面设计打印工具 ,可以帮助我们实现信笺、贺卡、证书、信封,传真封面、请柬、拼贴画、名片、传单、海报、光盘封面的设计,对于这些封面版面设计工作都能方便快速地实现。...
  • java开发经验分享

    千次阅读 2013-10-13 17:02:23
    开发经验分享 一、 编码 1. 约束自己,规范编码习惯 充足的代码注释、标准缩进的格式、注意命名规范。参考《开发管理规范》 "看上去"专业能促进代码质量。越是难看的代码,在它的演化过程中会越来越差。因为当...
  • 短信猫(GSM MODEM)linux64_Java开发指南   **开发所需文件**: smslib-3.5.3.jar 短信猫二次开发包(可前往http://smslib.org官网下载最新版本) log4j-1.2.14.jar 打印日志使用(版本不限) RXTXcomm....
  • 实战开发两个使用kafka服务的java应用,一个发布消息,一个订阅消息。
  • 适用于Java的Google云打印(GCP)API 文件: : 关于能力 有两种方法可以做到这一点: 使用Windows API加载打印机功能并创建XML(XPS格式)文件。 例如:使用“ PrintQueue”类-> GetPrintCapabilitiesAsXml.Write...
  • java开发经典文章

    千次阅读 2008-09-15 17:37:00
    功能区(例如购物车、收银台) 页脚(版权和有关法律声明) 我们通常采用DIV元素来将这些结构定义出来,类似这样: <div id="header"></div> <div id="content"></div> <div id="globalnav"></div> ...
  • 由于公司App开发的支付需求,需要后台用Java来完成银联支付接入接口。首先你要先进入银联开发登录地址open.unionpay.com找到手机控件支付模块,完成相应的入网步骤准备工作做完之后银联会对你发放相应的技术文档这里...
  • java微信jssdk开发

    千次阅读 2017-01-19 15:16:27
    微信开发对于新手来说是非常头痛的,鉴于各种反人类的设计和体验接口,笔者在开发完整个微信公众号后觉得有必要做下笔记,便于日后查阅。 1. 设置完appid,appsecret等基础设置,直接说说jssdk所需的主要配置。 如...
  • Java实现水印功能

    千次阅读 2015-05-25 00:29:00
    一,水印功能, ...Java实现水印功能很多,因需要自己实现了一个,完成了写到博客中,方便日后使用,懒人计划.... 二,实现步骤, 1,实现原理  * Theory/原理:  * 1,建立一个画布,设置其边线

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,881
精华内容 12,352
关键字:

java开发上传打印功能

java 订阅