java itextpdf找到重复的关键字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java itextpdf找到重复的关键字相关的知识,希望对你有一定的参考价值。

参考技术A 在要编辑的文档的PDF文件页面中弹出的查找页面中输入关键字。
1、第一步:通过在打开的PDF编辑器上使用鼠标拖动方法来打开要编辑的文档PDF文件。2、第二步:这样就将要编辑的文档PDF文件打开到PDF编辑器中了。3、第三步:接着点击打开编辑的文档的PDF编辑器菜单中的视图菜单下选择查找。4、第四步:在要编辑的文档的PDF文件页面中弹出的查找页面中输入关键字。5、这样就可以查找关键字了

Java用itextpdf生成pdf

因项目需求,要把数据生成到pdf中,并且还要可以画印章,也是初学,找资料,终于搞定了

我的做法是在pdf中画表格;我们最后的效果如下

首先建立一个pdf书写器

 // 建立一个Document对象
 // 2.建立一个书写器(Writer)与document对象关联
 PdfWriter writer = PdfWriter.getInstance(document, out);
//此处是插入水印
 writer.setPageEvent(new Watermark("水印 "));
// writer.setPageEvent(new HeaderFooter());// 页眉/页脚
 // PdfWriter.ALLOW_PRINTING 0xffffffff
//permissions &= 0xfffffffc;
writer.setEncryption(null, "123456".getBytes(),
PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128 | PdfWriter.DO_NOT_ENCRYPT_METADATA);
//writer.setEncryption(null, "123456".getBytes(), 0xfffff0c0, PdfWriter.STANDARD_ENCRYPTION_128);
 // 3.打开文档
 document.open();

下面是我的具体内容的插入,因为我最后的效果是要一行里面展示的文字大小和颜色不一致,我使用的方法是,一段落是一个整体,就是pdf的段落,段落里面再具体加入每一块儿;具体如下:

//创建一个表格
PdfPTable table3 = PdfReportUtil.createTable(new float[]100);
//创建一个段落 
Paragraph p3 = new Paragraph("", PdfReportUtil.TEXT_12_FONT);
//新建一个字体对象,可以设置字体大学和颜色等
 Font font1 = new Font();
 font1.setSize(12f);
//新建一个内容块
 Chunk chunks1 = new Chunk(courseAndExamStr.toString() + "  ");
 chunks1.setFont(font1);
//将内容块加入段落
 p3.add(chunks1);

 String izPassStr = courseVO.getIzPassStr();
 if (!StringUtils.isBlankExcludeNullStr(izPassStr)) 
    Font passFont = new Font();
    passFont.setSize(12f);
    if (courseVO.getIzPass().equals(YesNoEnum.NO.getCode())) 
    //设置文字颜色
        passFont.setColor(new BaseColor(215, 55, 63));
    
    Chunk chunk1 = new Chunk(izPassStr);
    chunk1.setFont(passFont);
    chunk1.setLineHeight(12f);
    p3.add(chunk1);
 
 String examScoreStr = courseVO.getExamScoreStr();

 if (!StringUtils.isBlankExcludeNullStr(examScoreStr)) 
      Font examScoreFont = new Font();
      examScoreFont.setSize(10f);
      examScoreFont.setColor(new BaseColor(201, 201, 201));
      Chunk chunk1 = new Chunk("  " + examScoreStr);
      chunk1.setFont(examScoreFont);
      chunk1.setLineHeight(10f);
      p3.add(chunk1);
   
//新建一个pdf的表格单元格
 PdfPCell cell1 = new PdfPCell();
 cell1.setVerticalAlignment(Element.ALIGN_MIDDLE);
 cell1.setHorizontalAlignment(Element.ALIGN_LEFT);
 cell1.setColspan(1);
//将段落添加到单元格内
 cell1.setPhrase(p3);
 cell1.setPadding(1.0f);
 cell1.setBorder(0);
 cell1.setPaddingTop(5.0f);
 cell1.setPaddingBottom(5.0f);
//将单元格加入表格里
 table3.addCell(cell1);
//将这个表格加入到pdf里
 document.add(table3);

主要内容结束后,就开始右下角的盖章和标注数据:

也是通过表格插入数据,图片是通过把图片base64的流生成图片,然后插入到pdf中

 //右下角盖章处
 PdfPTable table2 = PdfReportUtil.createTable(new float[]100);
 table2.addCell(PdfReportUtil.createCellPadding("数据中心", PdfReportUtil.TEXT_12_FONT, Element.ALIGN_RIGHT, 1, false, 3.0f));
 table2.addCell(PdfReportUtil.createCellPadding("运营组", PdfReportUtil.TEXT_12_FONT, Element.ALIGN_RIGHT, 1, false, 3.0f));
table2.addCell(PdfReportUtil.createCellPadding(DateUtils.formatDateTime(), PdfReportUtil.TEXT_12_FONT, Element.ALIGN_RIGHT, 1, false, 3.0f));
document.add(table2);
//获取当前内容的高度
float height1 = currentHeight(writer);
// 获取页面总高度
float heights = document.getPageSize().getHeight();
//添加图片
BufferedImage bufferedImage = CodeUtil.base64ToBufferedImage(studentSpecialCourseSeal);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, "png", baos);
baos.flush();
byte[] imageInByte = baos.toByteArray();
baos.close();
Image image = Image.getInstance(imageInByte);
image.scalePercent(62);
float h = new BigDecimal(0.62).multiply(new BigDecimal(image.getHeight())).divide(new BigDecimal(2), 2, RoundingMode.HALF_UP).floatValue();
//此处是设置图片印章的位置,让印章可以跟着文字内容变化
image.setAbsolutePosition(420, (heights - height1) - h);
//图片填充方式
image.setAlignment(Image.UNDERLYING);
document.add(image);

获取pdf当前内容的高度

public static float currentHeight(PdfWriter writer) throws ReflectiveOperationException 
        Method getPdfDocument = writer.getClass().getDeclaredMethod("getPdfDocument");
        getPdfDocument.setAccessible(true);
        PdfDocument pdfD = (PdfDocument) getPdfDocument.invoke(writer);
        Field getHeight = pdfD.getClass().getDeclaredField("currentHeight");
        getHeight.setAccessible(true);
        return (float) getHeight.get(pdfD);
    

到此主要的内容也就结束了,其余的就是根据自己业务进行判断相关的了

以上是关于java itextpdf找到重复的关键字的主要内容,如果未能解决你的问题,请参考以下文章

Java - 何时使用'this'关键字[重复]

java简单选择排序

java中的volatile关键字错误[重复]

Java中的implements和extends关键字有啥区别[重复]

带有“this”关键字的Java复制构造函数[重复]

同步关键字不使函数同步:Java [重复]