`
anson_xu
  • 浏览: 513397 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类

iText 跨行and背景图片

    博客分类:
  • java
阅读更多

最近用iText生成pdf文件供下载和当做附件email, 第一次使用,跨行和实现背景图片卡了n久,g了n久,都是提问的,没见给出的解答的,还得靠自己,倒腾了n久,总算解决了,贴出来!

 

        iText的介绍参考http://www.china1024.com/bytesoft/info_show.jsp?news_id=968或者iText的官网,如果想做进一步的了解,到http://www.51leifeng.net/上下本<<iText in Action>>,英文的,耐心点就行了。下面直入主题。

 

1.  iText的跨行

        iText的API中Cell可以很容易实现跨行和跨列,但是没法设置列宽和列高(好像是,找了n久没有找到)。只能打PdfPCell的主意了(PdfPCell也是iText推荐的),但是PdfPCell中只有设置跨列的方法,没有提供跨行的方法。用table嵌套,在外层的table中嵌套table,应该可以实现跨列,html中有这样做过。表格是画出来,但是嵌套的表格之间的间隙没发去掉。其实table的嵌套思路是对的,但是应该把table放到cell(PdfPCell的对象)中,再将这个cell放到最外层的table中。总的思路:最外层的table中只addCell,嵌套的table放到被加入到外层table之中的cell中。有点拗口,看代码吧:

  1. package cn.chenkun.iText;
  2. import java.io.FileOutputStream;
  3. import com.lowagie.text.Document;
  4. import com.lowagie.text.PageSize;
  5. import com.lowagie.text.Paragraph;
  6. import com.lowagie.text.pdf.PdfPCell;
  7. import com.lowagie.text.pdf.PdfPTable;
  8. import com.lowagie.text.pdf.PdfWriter;
  9. public class Colspan {
  10.     public static void main(String[] args) {
  11.         colspan();
  12.     }
  13.     
  14.     private static void colspan(){
  15.         Document document = new Document(PageSize.A4, 36363636);
  16.         try {
  17.             PdfWriter.getInstance(document, new FileOutputStream("d:\\coslpan.pdf"));
  18.             document.open();  
  19.             
  20.             PdfPTable table = new PdfPTable(4);  // 最外层table
  21.             float[] wid = {80f, 100f, 80f, 60f};
  22.             table.setTotalWidth(wid);
  23.             table.setLockedWidth(true);
  24.             
  25.             PdfPCell cell = null;  // 最外层table的cell
  26.             
  27.             PdfPTable iTable = null// 嵌套的table
  28.             PdfPCell iCell = null;  // 嵌套的table的cell
  29.             
  30.             iTable = new PdfPTable(3);
  31.             float[] iWid = {80f, 100f, 80f};
  32.             iTable.setTotalWidth(iWid);
  33.             iTable.setLockedWidth(true);
  34.             iCell = new PdfPCell(new Paragraph("column 1"));
  35.             iCell.setFixedHeight(30);
  36.             iTable.addCell(iCell);
  37.             iCell.setColspan(2);
  38.             iTable.addCell(iCell);
  39.             iCell = new PdfPCell(new Paragraph("column 2"));
  40.             iCell.setFixedHeight(30);
  41.             iTable.addCell(iCell);
  42.             iTable.addCell(iCell);
  43.             iTable.addCell(iCell);
  44.             
  45.             iCell = new PdfPCell(new Paragraph("column 3"));
  46.             iCell.setFixedHeight(30);
  47.             iTable.addCell(iCell);
  48.             iTable.addCell(iCell);
  49.             iTable.addCell(iCell);
  50.             
  51.             cell = new PdfPCell(iTable);  // 用这个table初始外层table的cell
  52.             cell.setColspan(3);  // 设置它跨3列
  53.             cell.setFixedHeight(3*30);  // 设置它的高度
  54.             table.addCell(cell);  // 将这个cell加入table中
  55.             
  56.             iTable = new PdfPTable(1);  
  57.             float[] iWid2 = {60f};
  58.             iTable.setTotalWidth(iWid2);
  59.             iTable.setLockedWidth(true);
  60.             iCell = new PdfPCell(new Paragraph("i am here"));
  61.             iTable.addCell(iCell);
  62.             
  63.             cell = new PdfPCell(iTable);
  64.             cell.setFixedHeight(3*30);  // 跨3列了
  65.             table.addCell(cell);
  66.             
  67.             document.add(table);
  68.         } catch (Exception de) {
  69.             de.printStackTrace();
  70.         }
  71.         document.close();
  72.     }
  73. }

 

2. iText的背景图片

        iText中的PdfPCell都是有自己默认的布局的,要实现自己的布局,必须实现PdfPCellEvent接口,在方法cellLayout中定义自己的布局。更多信息见<<iText in Action>>中10.2 Working with iText’s direct content。Figure 10.6实际上已经实现了背景图片,这里将代码改写如下:

  1. package cn.chenkun.iText;
  2. import java.io.FileOutputStream;
  3. import com.lowagie.text.Document;
  4. import com.lowagie.text.Element;
  5. import com.lowagie.text.Image;
  6. import com.lowagie.text.PageSize;
  7. import com.lowagie.text.Rectangle;
  8. import com.lowagie.text.pdf.PdfContentByte;
  9. import com.lowagie.text.pdf.PdfPCell;
  10. import com.lowagie.text.pdf.PdfPCellEvent;
  11. import com.lowagie.text.pdf.PdfPTable;
  12. import com.lowagie.text.pdf.PdfWriter;
  13. public class PicBackGround {
  14.     public static void main(String[] args) {
  15.         picBg();
  16.     }
  17.     private static void picBg() {
  18.         Document document = new Document(PageSize.A4, 36363636);
  19.         try {
  20.             PdfWriter.getInstance(document, new FileOutputStream("d:\\testPicBG.pdf"));
  21.             document.open();
  22.             BGPic border = new BGPic();
  23.             float wid = 80f;
  24.             float hei = 100f;
  25.             float[] widArr = { wid, wid };
  26.             PdfPTable table = new PdfPTable(2);
  27.             table.setTotalWidth(widArr);
  28.             table.setLockedWidth(true);
  29.             PdfPCell cell = null;
  30.             for (int i = 1; i <= 4; i++) {
  31.                 Image img = Image.getInstance("d:/ma.jpg");
  32.                 cell = new PdfPCell(img, true);
  33.                 cell.setFixedHeight(hei);
  34.                 cell.setHorizontalAlignment(Element.ALIGN_CENTER);
  35.                 cell.setPadding(8);
  36.                 cell.setCellEvent(border);  // 加入背景图片
  37.                 table.addCell(cell);
  38.             }
  39.             document.add(table);
  40.         } catch (Exception e) {
  41.             e.printStackTrace();
  42.         } finally {
  43.             document.close();
  44.         }
  45.     }
  46. }
  47. class BGPic implements PdfPCellEvent {
  48.     public void cellLayout(PdfPCell cell, Rectangle rect, PdfContentByte[] canvas) {
  49.         PdfContentByte cb = canvas[PdfPTable.BACKGROUNDCANVAS];
  50.         Image img = null;
  51.         try {
  52.             img = Image.getInstance("d:/hai.jpg");
  53.             img.scaleAbsolute(80100);  // 设置背景图片的大小
  54.             img.setAbsolutePosition(298606);  // 设置第一个背景图片的绝对位置
  55.             cb.addImage(img);
  56.             img.setAbsolutePosition(217706);  // 设置第二个背景图片的绝对位置
  57.             cb.addImage(img);
  58.         } catch (Exception e) {
  59.             e.printStackTrace();
  60.         }
  61.     }
  62. }

 

 

 

//---------------------------

百度里有搜到一种背景图设置法
Image jpgBack = Image.getInstance(xxxxx);
jpgBack.setAlignment(Image.UNDERLYING); 

不过这种方法对表格不起作用
表格里加上图片后,文字怎么都写不到图片上去.
请有过经验的同志们,告知如何给表格加背景图

分享到:
评论

相关推荐

    itext往word里插入图片和画表格

    在这个场景中,我们将探讨如何使用iText在Word文档中插入图片和绘制表格。 首先,理解一个关键概念:iText本身并不直接支持Word格式。然而,由于Word文档可以被转换为或从OpenXML格式解析,我们可以通过处理这些XML...

    利用itext将html转为pdf带图片所需jar

    如果图片是通过网络URL引用的,iText会尝试下载并嵌入到PDF中。 在实际应用中,可能需要自定义`HTMLWorker`的行为,例如更改字体设置、调整页面布局或处理特定的HTML标签。iText提供了一些回调接口,允许开发者对...

    利用ITEXT、PDFBOX将PDF转为图片

    PDF转换为图片是一种...综上所述,ITEXT和PDFBOX结合使用,可以在Java环境中方便地将PDF文档转换为图片。这为开发者提供了更多处理PDF文档的灵活性和可能性,但同时也需要根据具体需求选择合适的转换参数和优化策略。

    itext7 pdf转图片

    在IT行业中,iText是一个广泛使用的Java和.NET库,用于创建、编辑和处理PDF文档。在最新的版本iText 7中,它提供了丰富的功能,包括将PDF文档转换为图像。这个话题涉及到PDF处理和图像转换两个核心领域。下面将详细...

    itext将图片生成PDF(高清版)

    本教程将详细介绍如何使用`iText`将图片转换为高清PDF,并提供一个无坑版的demo示例。 首先,我们需要理解`iText`库的核心概念。`iText`提供了丰富的API,允许开发者创建复杂的PDF文档,包括插入文本、图像、表格等...

    itext图片转pdf

    本篇文章将深入探讨如何使用iText工具jar包将图片转换为PDF,同时确保图片的等比伸缩,避免失真。 首先,我们需要了解iText的基本用法。iText库提供了一系列API,可以创建新的PDF文档、添加文本、图像、表格等内容...

    itextpdf在已有pdf指定页及位置添加图片(包含jar及实例)

    在IT行业中,PDF(Portable Document Format...总的来说,使用iTextPDF库,你可以轻松地在已有的PDF文件中添加图片,实现灵活的PDF编辑功能。通过熟练掌握iTextPDF的API,你可以处理更多复杂的PDF操作,提高工作效率。

    使用iText-2.0.8将Html转换为pdf,带图片功能

    iText是一款广泛使用的Java库,专门用于创建和编辑PDF文档。在版本2.0.8中,它提供了将HTML转换为PDF的功能,这对于从网页内容生成打印版或者提供离线阅读材料非常有用。这个过程涉及到多个步骤和技术,下面将详细...

    android Itext生产PDF文件添加图片页眉的简单例子

    在这个简单例子中,我们将探讨如何使用`iText`库在生成的PDF文件中添加图片作为页眉。 首先,你需要在你的项目中引入`iText`库。如果你使用的是Gradle,可以在`build.gradle`文件中添加依赖: ```gradle ...

    itext设置段落行间距.zip

    在实际项目中,可能还需要处理更多细节,如页眉页脚、图片插入等,但上述内容已经覆盖了“itext设置段落行间距.zip”压缩包中的主要知识点。在实际操作中,结合具体的代码示例(如压缩包中的TestDemo),可以更好地...

    itext5生成PDF(含水印文字及图片)

    itext5生成PDF(含水印文字及图片)的源代码,操作说明详细,代码完整可用。

    itext7 根据pdf模板填充图像框

    官方提供了详细的下载和安装指南([访问链接](https://developers.itextpdf.com/itext7/download-and-install-information/))。 - 如果是Java项目,还可以通过Maven依赖进行集成。 #### 四、关键步骤解析 ##### ...

    java使用IText导出PDF(包含图片、表格、文字等等Demo和依赖包)

    下面将详细介绍如何使用IText库来实现这个功能,包括添加图片、创建表格以及插入文本。 首先,你需要在项目中引入IText的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;...

    Itext5文本转PDF,含图片,代码实例

    Itext5文本转PDF,含图片,代码实例,是5版本的,含亚洲文字支持,有文本,图片转pdf的实例,支持自定义编码,整理好的,直接能用,乱码是因为编码不对,设置编码就好了,具体百度怎样设置编码,里面有设置编码的接口...

    itext生成PDF图片文档

    iText生成PDF图片文档 iText是一个功能强大的Java类库,用于生成PDF文档。通过使用iText,我们可以轻松地生成PDF文档,包括图片、文字、表格等多种元素。本文将详细介绍如何使用iText生成PDF图片文档。 iText基本...

    IText 和 iTextAsian

    IText和iTextAsian是两个在Java和.NET平台上广泛使用的PDF处理库,它们主要用于创建、编辑和处理PDF文档。IText是主要的核心库,而iTextAsian则是一个扩展,专门针对亚洲字符集的支持,如中文、日文和韩文。 IText...

    java itext pdf word 中文 表格 图片

    总的来说,理解并熟练使用iText库,你将能够用Java高效地生成包含中文、表格和图片的PDF文档。同时结合Apache POI,还可以处理Word文档的生成。这在实际开发中是非常实用的技能,尤其在处理多语言和数据可视化的需求...

    PDF图片背景源码

    PDF图片背景源码是关于使用Itext库在PDF文档中添加图片作为背景、水印以及进行字体设置和页眉页脚操作的技术实现。Itext是一个流行的开源Java库,专门用于创建和修改PDF文档,它提供了丰富的API来实现复杂的PDF操作...

    Itext生成带表格,图片的word文档代码,里面包含需要的jar包

    本篇文章将深入探讨如何使用Itext库生成带有表格和图片的Word文档,并提供一个基于描述中的"Demo"文件的示例代码。 首先,我们需要了解Itext库的基本用法。Itext主要通过`Document`对象来构建文档结构,通过`...

    itext生成word文档,包含图片

    然而,根据你的需求,我们不仅要用iText生成Word文档,还要在文档中嵌入图片,这需要对iText的功能有深入的理解,并且可能需要结合其他库如Apache POI。以下是关于这个主题的详细知识: 1. **iText简介**: iText...

Global site tag (gtag.js) - Google Analytics