zoukankan      html  css  js  c++  java
  • PDF 报表 Java 组件 iText5 中的单位注意事项

    这里面涉及到这几个单位:

    点(磅)(pt)、像素(px)、英寸(inch)、毫米(mm)

    分辨率单位有:

    dpi(点每英寸):出现于打印或印刷领域。

    lpi (线每英寸):描述光学分辨率的尺度。

    ppi(像素每英寸):存在于电脑显示领域。

    下面举一个例子进行说明,比如:

    一个图片 test.jpg 的像素是 2468*3437

    Image png = Image.getInstance(imagePath);
    png.getWidth(); //获取到的是2468
    png.getHeight(); //获取到的是3437

    单位都是像素 px。

    默认的度量系统大多以排版单位为基础得出其他单位的近似值,iText 中 PageSize 使用的单位就是“磅”,所以设置 PageSize 大小的时候需要将“像素”转化为“磅”。

    换算过程是这样的:

    1inch = 72pt = 25.4mm

    这里按照 300ppi 的分辨率进行计算(为什么是300呢?这是我们公司规定的冲印分辨率),则图片的宽度由 px 换算为 pt 就是:

    2468px / 300ppi * 72pt = 210pt

    所以,应该这样获取 PageSize。

    Rectangle pageSize = new Rectangle(png.getWidth()/300*72, png.getHeight()/300*72);

    下面是根据我们公司需求写的代码,需求是将一个目录下的图片按照原尺寸合成为PDF文档,现在开始测试,将桌面上test目录下的图片合成为 测试版.pdf 文档:

     1 package com.demo.util.iText;
     2 
     3 import java.io.File;
     4 import java.io.FileOutputStream;
     5 
     6 import com.itextpdf.text.Document;
     7 import com.itextpdf.text.Image;
     8 import com.itextpdf.text.PageSize;
     9 import com.itextpdf.text.Rectangle;
    10 import com.itextpdf.text.pdf.PdfWriter;
    11 /**
    12  * 
    13  * @author wangbo
    14  *
    15  */
    16 public class test {
    17     
    18     public static void main(String[] args) {
    19         
    20         try {
    21             
    22              String pdfUrl = "C:\Users\Administrator\Desktop\测试版.pdf";
    23              String fileUrl = "C:/Users/Administrator/Desktop/test/";
    24              
    25              //建立com.itextpdf.text.Document对象的实例
    26              Document doc = new Document(PageSize.A4, 0, 0, 0, 0);
    27              //建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中
    28              PdfWriter.getInstance(doc, new FileOutputStream(pdfUrl));
    29              //打开文档
    30              doc.open();
    31              
    32              File file = new File(fileUrl);
    33              if (file.isDirectory()) {
    34                  File[] list = file.listFiles();
    35                  Image png = null;
    36                  for (File file2 : list) {
    37                      png = Image.getInstance(file2.getAbsolutePath());
    38                      //根据图片像素设置图片的大小,单位是磅
    39                      png.scaleAbsolute(png.getWidth()/300*72, png.getHeight()/300*72);
    40                      System.out.println(png.getScaledWidth()+ "*" +png.getScaledHeight());
    41                      //根据图片大小设置页面的大小
    42                      Rectangle pageSize = new Rectangle(png.getScaledWidth(), png.getScaledHeight());
    43                      doc.setPageSize(pageSize);
    44                      //新加一页
    45                      doc.newPage();
    46                      //将图片放入文档中
    47                      doc.add(png);
    48                  }
    49              }
    50              
    51              //关闭文档
    52              doc.close();
    53              
    54              //进行pdf文件生产
    55              File pdfFile = new File(pdfUrl);
    56              if (pdfFile.exists()) {
    57                  pdfFile.createNewFile();
    58              }
    59             
    60         } catch (Exception e) {
    61             e.printStackTrace();
    62         }
    63         
    64     }
    65     
    66 }

    补充一下:我这用的是iText5,没研究iText7,据说这两相差的还比较大,需要的jar包有:(其中的clover包生成World文档的时候能用到)

     再补充一篇网上找的帮助文档:http://files.cnblogs.com/files/wbyp/iText中文教程%28含代码%29.pdf

  • 相关阅读:
    使用DOM4J生成XML文档的分析和简单实例
    察看数据库索引使用情况
    SQL Server分布式事务模板
    SQLBulkCopy 性能统计
    个人技术发展思路
    在SQLServer 中利用OUTPUT 语句实现删除数据的同时备份数据
    对一段SQL进行语法检查
    LoD 迪米特法则
    开发心得
    实现一个服务的基础结构和管理本地服务和WCF服务的管理器
  • 原文地址:https://www.cnblogs.com/wbxk/p/7122502.html
Copyright © 2011-2022 走看看