因为项目报表有EXCEL导出,现在要新增PDF导出,我就想用EXCEL转PDF,于是找到JCOB调用COM组件,但是发现JCOB不能在LINUX下运行。同时JCOB也有个坏处。如果EXCEL里面表格不是自动换行,里面的字段也显示不全。必须严格调整EXCEL的格式。(导入jacob.jar (1.9),同时将jacob.dll放入到jdk目录下jre/bin下面)
 ActiveXComponent app = new ActiveXComponent("Excel.Application");String els = “D:\\aaaa.xlsx”;String pdf = “D:\\pdf.pdf”;try{app.setProperty("Visible",false);Dispatch workbooks = app.getProperty("Workbooks").toDispatch();Dispatch workbook = Dispatch.invoke(workbooks, "Open", Dispatch.Method, new Object[]{els, new Variant(false),new Variant(false)}, new int[3]).toDispatch();Dispatch.invoke(workbook, "SaveAs", Dispatch.Method, new Object[] { pdf, new Variant(57), new Variant(false),new Variant(57), new Variant(57), new Variant(false),new Variant(true), new Variant(57), new Variant(true),new Variant(true), new Variant(true) }, new int[1]);Variant f = new Variant(false);System.out.println("to pdf" + pdf);Dispatch.call(workbook, "Close", f);}catch(Exception e){e.printStackTrace();}finally{if(null!=app){app.invoke("Quit", new Variant[] {});}}

于是找到Itext,决定用读POI读EXCEL方式,再写入生成PDF, 在官网上下载了5.5.6还有对应的中文itext-asian.jar包。对应的jar我放在附件里面。用POI读的方式也有个缺点,要非常精准确定行数读取,报表里面有表格还有段落。有点繁琐。
1. 需使用中文字体

BaseFont bfChinese= BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);Font f8 = new Font(bfChinese,8, Font.NORMAL);
Font f8_bold = new Font(bfChinese,8, Font.BOLD);加粗:Chunk chunk = new Chunk("显示中文加粗字体",f8_bold);document.add(chunk);
增加下划线:Chunk underline = new Chunk("hello,AJava.org ",f8_bold);underline.setUnderline(0.1f, -1f);
  1. 生成table,按钮图片
public class TestTest {public static void main(String[] args) throws Exception{TestTest test = new TestTest();Document document = new Document();PdfWriter writer= PdfWriter.getInstance(document, new FileOutputStream("src/test.pdf"));document.open();BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);Font f8 = new Font(bfChinese, 8, Font.NORMAL);Font f8_bold = new Font(bfChinese, 8, Font.BOLD);PdfPTable tab = new PdfPTable(2);tab.setWidthPercentage(100);PdfPCell cell = new PdfPCell(test.createCell(new Phrase("个人客户",f8), new float[]{1,38}, true));tab.addCell(cell);cell = new PdfPCell(test.createCell(new Phrase("非个人客户",f8), new float[]{1,38}, false));tab.addCell(cell);document.add(tab);document.close();}public PdfPTable createCell(Phrase phrase,float[] cells,boolean ischecked)throws Exception{PdfPTable tab = new PdfPTable(2);tab.setWidths(cells);PdfPCell cell = newPdfPCell(createImage(ischecked));//居中cell.setUseAscender(true);cell.setUseDescender(true);cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//     cell.setPaddingLeft(1f); //左1fcell.setBorder(Rectangle.NO_BORDER);tab.addCell(cell);cell = new PdfPCell(phrase);//居中cell.setUseAscender(true);cell.setUseDescender(true);cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//     cell.setPaddingLeft(1f); //左1fcell.setBorder(Rectangle.NO_BORDER);tab.addCell(cell);return tab;}public PdfPTable createImage(boolean ischecked)throws Exception{PdfPTable table = new PdfPTable(1);Image img = Image.getInstance("src/btn_uncheck.png");if(ischecked){img = Image.getInstance("src/btn_checked.png");}img.scaleToFit(9, 7);PdfPCell cell = new PdfPCell();cell.addElement(img);cell.setBorder(Rectangle.NO_BORDER);table.addCell(cell);return table;}
}
  1. 画图生成checkbox
 public void createCheckBox(PdfWriter writer,int llx,int lly,int urx,int ury,String name,boolean ischeck){try{RadioCheckField bt = new RadioCheckField(writer, new Rectangle(llx,lly, urx, ury), name, "Yes");bt.setCheckType(RadioCheckField.TYPE_CHECK);bt.setBorderWidth(BaseField.BORDER_WIDTH_THIN);bt.setBorderColor(BaseColor.BLACK);bt.setBackgroundColor(BaseColor.WHITE);bt.setChecked(ischeck);PdfFormField ck = bt.getCheckField();writer.addAnnotation(ck);}catch(Exception e){e.printStackTrace();}}

用html格式生成pdf,对于html标签有些不能识别,必须严格按要求写html

       Document document = new Document();PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("pdf.pdf"));document.open();XMLWorkerHelper.getInstance().parseXHtml(writer,document, new FileInputStream("D:/template.html"));document.close();

EXCEL转PDF,JACOB,生成checkbox相关推荐

  1. Excel转Pdf —— jacob

    这需求,我是真的吐了,找了太多东西了,poi直接想都不想,直接放弃poi documents4j导出pdf很简单,但是没找到其他pdf相关设置的参数,算了 最后还是jacob能解决所有问题 -- 缩放 ...

  2. 关于使用jacob+poi插件实现编辑Excel转PDF操作!

    最近在项目中,出现了Excel转PDF的需求,找了很多方法都不尽人意.今天就将我实现的方法分享出来,所需下载,都已备好,放心实验! 1.需要的jar包和控件 jacob-1.19.jar poi-3. ...

  3. java采用Jacob将Excel转PDF

    注意事项:使用此方法需安装Office import java.io.File; import java.util.Date;import com.jacob.activeX.ActiveXCompo ...

  4. jacob电脑重启后word/excel转pdf是0KB问题解决方法

    问题现象:使用jacob将word/excel转换为pdf时,服务器重启后,必须重新登录下桌面,才可转换pdf 成功,否则转换的pdf文件直接是0KB. 1.确保所用电脑的office本身可以将wor ...

  5. java excel转pdf linux,从JAVA直接读取EXCEL、WORD并生成PDF文件

    从JAVA直接读取EXCEL.WORD并生成PDF文件 1.操作EXCEL和WORD文件 使用JAVA从EXCEL.WORD文件中读写数据,可以使用http://jexcelapi.sourcefor ...

  6. Py自动化办公—Word文档替换、Excel表格读取、Pdf文件生成和Email自动邮件发送实战案例...

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 平阳歌舞新承宠,帘外春寒赐锦袍. ...

  7. Java实现windows,linux服务器word,excel转为PDF;aspose-words,Documents4j

    Java实现windows,linux服务器word,excel转为PDF:aspose-words,Documents4j 一.通过aspose-words将word,Excel文档转为PDF 1. ...

  8. java生成pdf表格_java在pdf中生成表格的方法

    1.目标 在pdf中生成一个可变表头的表格,并向其中填充数据.通过泛型动态的生成表头,通过反射动态获取实体类(我这里是User)的get方法动态获得数据,从而达到动态生成表格. 每天生成一个文件夹存储 ...

  9. java ajax 导出excel文件_springMVC(4)---生成excel文件并导出

    springMVC(4)---生成excel文件并导出 在开发过程中,需要将数据库中的数据以excel表格的方式导出. 首先说明.我这里用的是Apache的POI项目,它是目前比较成熟的HSSF接口, ...

最新文章

  1. 技术13期:一文读懂Flink的流式处理及窗口理解
  2. leetcode 191. Number of 1 Bits
  3. PHPMaker 2020中文版
  4. 【深度学习】神经网络中的蒸馏技术,从Softmax开始说起
  5. 张秋余---经典语录
  6. layui 行悬停显示工具_Minitab | 工具栏和状态栏
  7. [react] 给组件设置很多属性时不想一个个去设置有什么办法可以解决这问题呢?
  8. 网站制作---eWebeditor不兼容IE8问题的解决方法
  9. 约翰霍普金斯大学计算机博士收入,约翰霍普金斯大学计算机科学研究生项目详情!...
  10. 汽车在十字路口左转时,转大弯和转小弯是什么意思?
  11. 升降压电路的工作原理
  12. 【专访】润和软件刘洋:同心聚力开拓基于OpenHarmony的国产化科技创新之路
  13. 一个机器人在m×n大小的地图的左上角(起点,下图中的标记“start“的位置)。 机器人每次向下或向右移动。机器人要到达地图的右下角。(终点,下图中的标记“Finish“的位置)。 可以有多少种不同
  14. 【实验2 选择结构】7-3 sdut-C语言实验-时间间隔
  15. TCA9548的控制
  16. python把一堆图片分成n份_用Python实现将一张图片分成9宫格的示例
  17. Light Propagation Volumes in CryEngine 3
  18. PDF加密文件解密方法(解除复制打印限制)——转帖
  19. 小米智能摄像机云台Pro如何插入视频监控存储卡
  20. 高管频繁离职,创始人缺乏远见和管理数千人规模团队的能力

热门文章

  1. 推荐几个出论文的好方向!
  2. 2019 xnuca pwn vexx
  3. 前端练习——弹窗、判断语句 (星座测试)
  4. 资讯汇总230128
  5. 数据采集的基本方法?
  6. GitHub 上值得收藏的100个精选前端项目!
  7. 基于图像识别的表格数据提取系统
  8. Unity 打包APK 适配全面屏、刘海屏、水滴屏、挖孔屏
  9. 确定sw1开关信号输入端口_三菱PLC入门 | FX2N系列PLC的信号输入端子接线(图文详解)...
  10. 比尔盖兹CES的最后语录