国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

基于BS的Java+iText導(dǎo)出PDF報表

2019-11-17 04:07:29
字體:
供稿:網(wǎng)友
     常常會需要按照模板數(shù)據(jù)庫的數(shù)據(jù)整理打印出來,嘗試過ireport、Word、PDF,各有各得優(yōu)點,pdf在使用上是非常方便的,只要制作好模板,基本上就算是成功了一半了。下面完整的把web工程中到處pdf的流程列出來,希望對網(wǎng)友們有點幫助。

1.制作模板

     1) 首先,在word里面畫好表格(注意是表格,剛開始的時候覺得表格對格式不好控制,就用畫圖工具里面的矩形畫,那樣是不行的),按照需要打印的格式。這一步是很重要的,因為如果word表格需要修改的話,會引起后面很多修改,工作量是很大的,所有提醒網(wǎng)友一定要確定最終模板后再進(jìn)行操作。

      2)然后就是導(dǎo)出pdf了。安裝Adobe Acrobat (我用的是Adobe Acrobat 8 PRofessional),網(wǎng)上可以找到安裝程序。安裝后word里面會出現(xiàn)導(dǎo)出為pdf的控件,,如果沒有的話也可以選擇文件--打印,打印機(jī)中選擇Adobe pdf,打印出pdf。

      3)修改pdf模板。用Adobe Acrobat打開pdf模板,運(yùn)行“表單--運(yùn)行表單域識別”,該工具就會自動識別出需要填寫內(nèi)容的表格。如果有個別地方不能識別,可以點擊“視圖--工具欄--表單”找出表單工具,點擊,可以在需要輸入文本的地方畫出文本域。雙擊識別出的文本域(),修改“名稱(當(dāng)作該文本域的標(biāo)志,程序中給該字段賦值就是通過這個標(biāo)志進(jìn)行的,所以這個名字不能重復(fù),而且最好是有一定意義的)”、“外觀--字體()”,所有文本域都修改好保存。

2.導(dǎo)出代碼

      1)加載所需jar包,iText-2.1.3.jar(導(dǎo)出pdf所需包),iTextAsian.jar(亞洲語言包)。

      2)整段代碼如下:

public void genQRB() throws IOException {


  HttpServletRequest request = ServletActionContext.getRequest();
  HttpServletResponse response = ServletActionContext.getResponse();
  response.reset();
  ByteArrayOutputStream ba = new ByteArrayOutputStream();
  ByteArrayOutputStream totalba = new ByteArrayOutputStream();
  PushbuttonField pushbuttonField = null;
  String path = request.getsession().getServletContext().getRealPath("/");
  try {
   /* 打開已經(jīng)定義好字段以后的pdf模板 */
   String TemplatePDF = path + "pdf//qrb_zsb.pdf";

   /* 使用中文字體 */
   BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",
     BaseFont.NOT_EMBEDDED);
   Font FontChinese = new Font(bf, 8, Font.NORMAL);
   Font fontChinesesmall = new Font(bf, 6, Font.NORMAL);

   PdfReader reader = null;
   PdfStamper stamp = null;
   AcroFields form = null;
   PdfCopyFields copy = new PdfCopyFields(totalba);
   reader = new PdfReader(TemplatePDF);
   /* 將要生成的目標(biāo)PDF文件名稱 */
   ba = new ByteArrayOutputStream();
   stamp = new PdfStamper(reader, ba);

   /* 取出報表模板中的所有字段 */
   form = stamp.getAcroFields();
   /* 為字段賦值,注意字段名稱是區(qū)分大小寫的 */
   form.setFieldProperty("name", "textfont", bf, null);

   ... ...

   //獲取數(shù)據(jù)庫中的數(shù)據(jù)
   Bmxx bmxx = listBmxx();

   form.setField("xm", bmxx.getXm());
   stamp.setFormFlattening(true);
   reader.close();
   stamp.close();
   copy.addDocument(new PdfReader(ba.toByteArray()));
   ba.close();
   copy.close();
   reader = new PdfReader(totalba.toByteArray());
   stamp = new PdfStamper(reader, ba);
   form = stamp.getAcroFields();
   stamp.close();
   reader.close();
   System.out.println("------------正在導(dǎo)出:ba.size:" + ba.size()
     + "||totalba.size():" + totalba.size());

  } catch (DocumentException de) {
   de.printStackTrace();
   System.err.println("A Document error:" + de.getMessage());
  }
  // setting some response headers
  response.setHeader("Expires", "0");
  response.setHeader("Cache-Control",
    "must-revalidate, post-check=0, pre-check=0");
  response.setHeader("Pragma", "public");

  response.setContentType("application/pdf");


  /* 如果想出來讓IE提示你是打開還是保存的對話框,加上下面這句就可以了 */
  response.setHeader("Content-disposition", "attachment; filename="
    + "bmxxqrb.pdf");

  response.setContentLength(ba.size());
  try {
   ServletOutputStream out = response.getOutputStream();
   ba.writeTo(out);
   // ba1.writeTo(out);
   out.flush();
   out.close();
   ba.close();
   totalba.close();
  } catch (IOException e) {
   e.printStackTrace();
   System.err.println("A Document error:" + e.getMessage());
  } finally {
   if (ba != null)
    ba.close();
   if (totalba != null)
    totalba.close();
  }
}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 黔西县| 牟定县| 中宁县| 嘉鱼县| 榆中县| 固镇县| 巴里| 旌德县| 莎车县| 连云港市| 大邑县| 禄丰县| 佛山市| 儋州市| 延津县| 阿城市| 钟山县| 准格尔旗| 石河子市| 正宁县| 内乡县| 九寨沟县| 松溪县| 富顺县| 宾阳县| 翁牛特旗| 商洛市| 昭苏县| 二手房| 衢州市| 山东省| 随州市| 北宁市| 温宿县| 拉孜县| 石首市| 宿迁市| 万年县| 利川市| 永定县| 宿迁市|