java操作pdf文件,能否找到某个关键词所在的页码? 谢谢!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java操作pdf文件,能否找到某个关键词所在的页码? 谢谢!相关的知识,希望对你有一定的参考价值。
我刚刚做得一个PDF输出的一个小功能 发给你不知道对你有没有帮助public static void getPDFDocument(ArrayList<UserTbl> list) throws DocumentException, IOException, BadElementException
// ドキュメントの初期化
Document document = new Document(PageSize.A4);
// システム时间を取得する
Date date = new Date();
SimpleDateFormat formatter=new SimpleDateFormat("yyyy-MM-dd HH'时'mm'分'ss'秒'");
SimpleDateFormat formatter2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString=formatter.format(date);
String dateString2=formatter2.format(date);
// ドキュメントURLの设定
String filePath = "e://"+dateString+".pdf";
PdfWriter.getInstance(document, new FileOutputStream(filePath));
// ドキュメントをオープンする
document.open();
// 文字様式を设定
BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font f11 = new Font(bfChinese, 11, Font.NORMAL);
Font f8 = new Font(bfChinese, 8, Font.NORMAL);
Font f12 = new Font(bfChinese, 12, Font.BOLD);
// タイトルを作成する
Paragraph p1 = new Paragraph("利用者情报一覧\n", f12);
p1.setAlignment(Element.ALIGN_CENTER);
document.add(p1);
Paragraph p2 = new Paragraph("时间:"+dateString2+"\n\n", f11);
p2.setAlignment(Element.ALIGN_RIGHT);
document.add(p2);
// テーブルを作成する
PdfPTable table = new PdfPTable(7);
PdfPCell cell = new PdfPCell();
cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
cell.setPhrase(new Paragraph("PCログインID", f8));
table.addCell(cell);
cell.setPhrase(new Paragraph("お名前我", f8));
table.addCell(cell);
cell.setPhrase(new Paragraph("メールアドレス", f8));
table.addCell(cell);
cell.setPhrase(new Paragraph("携帯ログインID", f8));
table.addCell(cell);
cell.setPhrase(new Paragraph("所属", f8));
table.addCell(cell);
cell.setPhrase(new Paragraph("属性", f8));
table.addCell(cell);
cell.setPhrase(new Paragraph("データ种别", f8));
table.addCell(cell);
document.add(table);
table.setWidthPercentage(100);
// テーブルの中の内容
for(UserTbl bean : list)
document.add(getPdfHeader(bean,list));
document.close();
public static PdfPTable getPdfHeader(UserTbl bean,ArrayList<UserTbl> list) throws DocumentException, IOException
PdfPTable table = new PdfPTable(7);
BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font f8 = new Font(bfChinese, 8, Font.NORMAL);
// PCログインID
String userId = StringUtils.trim(bean.getUser_id());
// お名前
String userName = StringUtils.trim(bean.getUser_name());
// メールアドレス
String mobileMail = StringUtils.trim(bean.getMobile_mail());
// 携帯ログインID
String mobileId = StringUtils.trim(bean.getMobile_id());
// 所属
String MobilePass = StringUtils.trim(bean.getMobile_pass());
// 属性
String attr = StringUtils.trim(bean.getAttr());
// データ种别
String secName = StringUtils.trim(bean.getSec_name());
//写入table
PdfPCell cell = new PdfPCell();
cell.setPhrase(new Paragraph(userId, f8));
table.addCell(cell);
cell.setPhrase(new Paragraph(userName, f8));
table.addCell(cell);
cell.setPhrase(new Paragraph(mobileMail, f8));
table.addCell(cell);
cell.setPhrase(new Paragraph(mobileId, f8));
table.addCell(cell);
cell.setPhrase(new Paragraph(MobilePass, f8));
table.addCell(cell);
cell.setPhrase(new Paragraph(attr, f8));
table.addCell(cell);
cell.setPhrase(new Paragraph(secName, f8));
table.addCell(cell);
return table;
参考技术A 这个一般不行!
Java操作PDF,在PDF文件指定位置输出水印
需要参考我的上一篇博客,定位PDF中的关键字,找出需要打印水印的坐标位置。
先说测试结果(PDF原件也是上一篇中的图片所示):
新生成的带有水印的PDF文件如下所示:
junit测试代码及输出:
maven配置文件
<!-- 引入pdf --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.13</version> </dependency>
打印水印java文件PDFDocHelper.java
package com.alphajuns.util; import com.itextpdf.text.BaseColor; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Element; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.PdfStamper; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; import java.util.Map; /** * @Author AlphaJunS * @Date 19:25 2020/3/7 * @Description 文档帮助类 */ public class PDFDocHelper { private static BaseFont base = null; // 获取基础文字 public static BaseFont getBaseFont() throws DocumentException, IOException { if (base == null) { try { base = BaseFont.createFont("/u01/config/simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); } catch (Throwable th) { base = BaseFont.createFont("C:\\\\WINDOWS\\\\Fonts\\\\SIMSUN.TTC,1", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); } } return base; } //psw文件签名 public static String signPsw(String oldPswFilePath, List<Map<String, ?>> reviews) throws IOException, DocumentException { int pos = oldPswFilePath.lastIndexOf(\'.\'); // 获取文件后缀 String suffix = oldPswFilePath.substring(pos + 1); // 判断是否为pdf文件 if (!"pdf".equals(suffix.toLowerCase())) { throw new RuntimeException("Not supported PSW file"); } return signSinglePsw(oldPswFilePath, reviews); } //单个psw文件签名 private static String signSinglePsw(String oldPswFilePath,List<Map<String, ?>> reviews) throws IOException, DocumentException { String newPswPath = oldPswFilePath; int pos = oldPswFilePath.lastIndexOf(\'.\'); // 获取文件后缀名 String suffix = oldPswFilePath.substring(pos + 1); // 生成新的文件路径 newPswPath = oldPswFilePath.substring(0, pos) + ".PSW." + suffix; System.out.println("单个psw文件签名生成的新路径:" + newPswPath); PdfReader reader = new PdfReader(oldPswFilePath); FileOutputStream fout = new FileOutputStream(newPswPath); PdfStamper stp = new PdfStamper(reader, fout); // 总页数 System.out.println("PDF总页数:" + reader.getNumberOfPages()); for (int i = 0; i < reader.getNumberOfPages(); ) { // 需要从第一页开始,i放在循环中会报空指针异常 i++; PdfContentByte content = stp.getOverContent(i); content.beginText(); // 设置字体及字号 content.setFontAndSize(getBaseFont(), 10); Map<String, Object> review = (Map<String, Object>) reviews.get(reviews.size() - 1); addDeptReview(content, review); content.endText(); } stp.close(); // 将输出流关闭 fout.close(); reader.close(); // 文件读写结束 System.out.println("PSW文件读写完毕"); return newPswPath; } /** * @Author AlphaJunS * @Date 18:48 2020/3/7 * @Description 添加水印 * @param content * @param review * @return void */ private static void addDeptReview(PdfContentByte content, Map<String, Object> review) { if (Integer.parseInt(String.valueOf(review.get("type"))) == 1) { content.setColorFill(BaseColor.BLUE); } else { content.setColorFill(BaseColor.RED); } // 设置水印位置和内容 String result = (String) review.get("result"); System.out.println("水印内容:" + result); System.out.println("打印位置坐标:" + pswX[0] + "," + pswY[0]); content.showTextAligned(Element.ALIGN_LEFT, result, pswX[0], pswY[0], 0); } // 打印水印坐标 private static float[] pswY = {128}; private static float[] pswX = {337}; }
以上是关于java操作pdf文件,能否找到某个关键词所在的页码? 谢谢!的主要内容,如果未能解决你的问题,请参考以下文章
[API 开发管理] 分享几个 eoLinker 实用操作技巧