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

  • 相关阅读:
    iOS 面试题搜集
    iOS 常用第三方类库、完整APP示例
    iOS 键盘遮挡输入 解决办法
    iOS UIColor RGB HEX
    iOS APP性能优化
    iOS Swift 数组 交换元素的两种方法
    iOS CoreData primitive accessor
    iOS Start developing ios apps (OC) pdf
    iOS 传值方式
    iOS IB_DESIGNABLE IBInspectable @IBDesignable @IBInspectable 加速UI开发
  • 原文地址:https://www.cnblogs.com/wbxk/p/7122502.html
Copyright © 2011-2022 走看看