java打印功能

我用的是itext7打印,引入下面这些包

下面请看代码,里面每句都有注释:

package com.gx.servlet;

import java.io.ByteArrayInputStream;

import java.io.IOException;

import java.util.List;

import javax.servlet.ServletException;

import javax.servlet.ServletOutputStream;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.itextpdf.io.source.ByteArrayOutputStream;

import com.itextpdf.kernel.colors.DeviceRgb;

import com.itextpdf.kernel.font.PdfFont;

import com.itextpdf.kernel.font.PdfFontFactory;

import com.itextpdf.kernel.geom.PageSize;

import com.itextpdf.kernel.pdf.PdfDocument;

import com.itextpdf.kernel.pdf.PdfWriter;

import com.itextpdf.layout.Document;

import com.itextpdf.layout.element.Cell;

import com.itextpdf.layout.element.Paragraph;

import com.itextpdf.layout.element.Table;

import com.itextpdf.layout.property.HorizontalAlignment;

import com.itextpdf.layout.property.TextAlignment;

import com.itextpdf.layout.property.UnitValue;

public void doPost(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

//定义返回类型 这里为返回文件 text.pdf

         response.addHeader("Content-Disposition", "attachment;filename=test.pdf");          ByteArrayOutputStream bao = new ByteArrayOutputStream();//新建一个输出流

         PdfWriter writer = new PdfWriter(bao);//pdfWriter 使用传递输出流为参数的构造函数

         PdfDocument pdfDoc = new PdfDocument(writer);

         //构建文档对象,可以设置PageSize.A1——A4纸大小

         Document  doc = new Document(pdfDoc,PageSize.A2);

         doc.setMargins(10, 10, 10, 10); //设置外边距

         //解决中文字体问题

         PdfFont sysFont = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false);

         // new Paragraph("")   添加标题; //段落方法           

         doc.add(new Paragraph("成本进度分析").setFont(sysFont).setTextAlignment

(TextAlignment.CENTER).setFontSize(20l).setBold());//构建表格以100%的宽度//new

float[]{2,2,6}声数组,有多少个值就有多少列,里面的值代表对应列的宽度比例

         Table table = new Table(new float[]{1, 1, 1,1, 1, 1,1, 1}).setWidth

(UnitValue.createPercentValue(100));//81代表8   1值是宽度

//添加表头new Cell(2,1)意思是合并单元格几行几列  前面的代表列,后面参数是行setBackgroundColor颜色的值    setPaddingTop文字垂直居中

Cell cell0=new Cell(2,1).add(new Paragraph("费用项")).setFont(sysFont).setTextAlignment

(TextAlignment.CENTER).setBackgroundColor(new DeviceRgb(221,234,238)).setPaddingTop(14f);

Cell cell00=new Cell(2,1).add(new Paragraph("合同金额")).setFont(sysFont).setTextAlignment

(TextAlignment.CENTER).

setBackgroundColor(new DeviceRgb(221,234,238)).setPaddingTop(14f);

Cell cell03=new Cell(2,1).add(new Paragraph("预算总成本")

).setFont(sysFont).setTextAlignment(TextAlignment.CENTER).

         setBackgroundColor(new DeviceRgb(221,234,238)).setPaddingTop(14f);

Cell cell04=new Cell(2,1).add(new Paragraph("单方造价")).setFont(sysFont).setTextAlignment

(TextAlignment.CENTER).setBackgroundColor(new DeviceRgb(221,234,238)).setPaddingTop(14f);

Cell cell004=new Cell(1,4).add(new Paragraph("完工量")).setFont(sysFont)

.setTextAlignment(TextAlignment.CENTER).setBackgroundColor(new DeviceRgb(221,234,238));

Cell cell05=new Cell(1,1).add(new Paragraph("年初完工量")).setFont(sysFont)

.setTextAlignment(TextAlignment.CENTER).setBackgroundColor(new DeviceRgb(221,234,238));

Cell cell06=new Cell(1,1).add(new Paragraph("本月")).setFont(sysFont)

.setTextAlignment(TextAlignment.CENTER).setBackgroundColor(new DeviceRgb(221,234,238));

Cell cell07=new Cell(1,1).add(new Paragraph("本年完工量")).setFont(sysFont)

.setTextAlignment(TextAlignment.CENTER).setBackgroundColor(new DeviceRgb(221,234,238));

Cell cell08=new Cell(1,1).add(new Paragraph("累计完工量")).setFont(sysFont)

.setTextAlignment(TextAlignment.CENTER).setBackgroundColor(new DeviceRgb(221,234,238));

                           table.addHeaderCell(cell0);

                       table.addHeaderCell(cell00);

                       table.addHeaderCell(cell03);

                         table.addHeaderCell(cell04);

                           table.addHeaderCell(cell004);

                       table.addHeaderCell(cell05);

                         table.addHeaderCell(cell06);

                       table.addHeaderCell(cell07);

                         table.addHeaderCell(cell08);

SYS_ChenBenJinDuService userService = new SYS_ChenBenJinDuServiceImpl();

List<SYS_ChenBenJinDuPo> po = userService.selectfindall();//如果list没数据就会报500的错

//向表格添加数据

for (SYS_ChenBenJinDuPo sys_ChenBenJinDuPo : po) {

Cell cell1=new Cell().add(new Paragraph(sys_ChenBenJinDuPo.getCostResolveName()))

.setFont(sysFont).setTextAlignment(TextAlignment.CENTER);

Cell cell2=new Cell().add(new Paragraph(sys_ChenBenJinDuPo.getSignaMoney()))

.setFont(sysFont).setTextAlignment(TextAlignment.CENTER);

Cell cell3=new Cell().add(new Paragraph(sys_ChenBenJinDuPo.getTargetPrimeCost())

).setFont(sysFont).setTextAlignment(TextAlignment.CENTER);

Cell cell4=new Cell().add(new Paragraph(sys_ChenBenJinDuPo.getDanFangZaoJia())

).setFont(sysFont).setTextAlignment(TextAlignment.CENTER);

Cell cell5=new Cell().add(new Paragraph(sys_ChenBenJinDuPo.getComplete())).setFont(sysFont)

.setTextAlignment(TextAlignment.CENTER);

Cell cell6=new Cell().add(new Paragraph(sys_ChenBenJinDuPo.getMorthFenComplete())

).setFont(sysFont).setTextAlignment(TextAlignment.CENTER);

Cell cell7=new Cell().add(new Paragraph(sys_ChenBenJinDuPo.getYeatComplete())

).setFont(sysFont).setTextAlignment(TextAlignment.CENTER);

Cell cell8=new Cell().add(new Paragraph(sys_ChenBenJinDuPo.getLeijiTiaoZhen())

).setFont(sysFont).setTextAlignment(TextAlignment.CENTER);

                          table.addCell(cell1);

                          table.addCell(cell2);

                          table.addCell(cell3);

                          table.addCell(cell4);

                          table.addCell(cell5);

                          table.addCell(cell6);

                            table.addCell(cell7);

                            table.addCell(cell8);

                   }

            //将表格添加入文档并页面居中

                doc.add(table.setHorizontalAlignment(HorizontalAlignment.CENTER));

                doc.close();//关闭对象

              //将输出流转换为输入流

                 ByteArrayInputStream swapStream = new ByteArrayInputStream(bao.toByteArray());

                 ServletOutputStream out=response.getOutputStream();

                 byte[] buffer=new byte[1024];//定义byte数组

                 int count;

                 //循环输出流

                 while((count=swapStream.read(buffer))!=-1){

                 out.write(buffer, 0, count);

                 }

                 //关闭流

                 out.flush();

                out.close();

                swapStream.close();

         }

Jsp代码:

$("#DAYIN").click(function(){

     window.open("${ctx}/servlet/JinDUFenXin");

});

打印结果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值