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找到重复的关键字的主要内容,如果未能解决你的问题,请参考以下文章