丽水建设局网站文件,网页游戏大全下载,新乡优化,电商网站规划书简体中文写入
iText本身对简体中文的支持有限#xff0c;但可以通过引入额外的字体包来增强其对简体中文的支持。例如#xff0c;可以使用iTextAsian.jar这个亚洲字体包#xff0c;它包含了几种简单的亚洲字体#xff0c;其中包括简体中文字体。只需要将iTextAsian.jar放到… 简体中文写入
iText本身对简体中文的支持有限但可以通过引入额外的字体包来增强其对简体中文的支持。例如可以使用iTextAsian.jar这个亚洲字体包它包含了几种简单的亚洲字体其中包括简体中文字体。只需要将iTextAsian.jar放到类路径下并在报表文件中设置相应的字体就能够正常显示中文信息。如果想要使用其他的自定义的字体则需要进行相应的扩展。
第一种使用iTextAsian.jar中的简体中文字体
Test
public void test8() {Font font FontFactory.getFont(STSong-Light, UniGB-UCS2-H, BaseFont.EMBEDDED, 12, Font.NORMAL);Document document new Document();try {PdfWriter.getInstance(document, new FileOutputStream(d:/test/hello.pdf));document.open();document.add(new Paragraph(白日依山尽黄河入海流。, font));document.add(new Paragraph(欲穷千里目更上一层楼。, font));document.close();} catch (DocumentException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();}
} 第二种自定义字体
下载字体从字体天下网下载一个字体需要注意的是在商业应用中版权问题就下载这个吧看着不错 使用自定义的字体也很简单即在使用字体之前要先注册一下注册完成后就可以使用了。
Test
public void test9() {URL resource getClass().getClassLoader().getResource(HongLeiXingShuJianTi-2.otf);FontFactory.register(resource.getPath(), HongLeiXingShuJianTi-2.otf);Font font FontFactory.getFont(HongLeiXingShuJianTi-2.otf, BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 20, Font.NORMAL);Document document new Document();try {PdfWriter.getInstance(document, new FileOutputStream(d:/test/hello.pdf));document.open();document.add(new Paragraph(白日依山尽黄河入海流。, font));document.add(new Paragraph(欲穷千里目更上一层楼。, font));document.close();} catch (DocumentException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();}
} 读取文本和图片
iText并没有直接从pdf中提取图片的api但这并不代表不能提取图片可以这样做
读取目标文档截图 步骤
定义一个pdf阅读器再定义一个pdf内容解析器构造方法接受一个pdf阅读器作为参数逐行进行内容解析这里需要实现RenderListener接口RenderListener接口有两个重要方法renderText(和renderImage(
renderText(TextRenderInfo renderInfo): 这个方法在文本渲染时被调用。TextRenderInfo对象包含了关于文本渲染的所有信息包括文本、字体、颜色等等。你可以通过这个方法来控制文本的渲染方式例如设置文本的颜色、字体等。
renderImage(ImageRenderInfo renderInfo): 这个方法在图像渲染时被调用。ImageRenderInfo对象包含了关于图像渲染的所有信息包括图像的路径、宽度和高度等。你可以通过这个方法来控制图像的渲染方式例如设置图像的大小、位置等。
Test
public void test10() {try {PdfReader pdfReader new PdfReader(new FileInputStream(d:/test/hello.pdf));int numberOfPages pdfReader.getNumberOfPages();PdfReaderContentParser parser new PdfReaderContentParser(pdfReader);for (int i 0; i numberOfPages; i) {int finalI i;parser.processContent(i 1, new RenderListener() {Overridepublic void beginTextBlock() {}Overridepublic void renderText(TextRenderInfo renderInfo) {System.out.println(---start text---);String text renderInfo.getText();System.out.println(text);System.out.println(---end text---);}Overridepublic void endTextBlock() {}Overridepublic void renderImage(ImageRenderInfo renderInfo) {System.out.println(---start image---:);PdfImageObject image null;try {image renderInfo.getImage();} catch (IOException e) {e.printStackTrace();}byte[] imageAsBytes image.getImageAsBytes();String fileType image.getFileType();String imageName d:/test/ (finalI 1) . fileType;FileUtil.writeBytes(imageAsBytes, imageName);System.out.println(imageName: imageName);System.out.println(---end image---);}});}} catch (IOException e) {e.printStackTrace();}
} 总结
注意目标文档中先是两行文本内容然后才是一张图片。但是从提取日志来看先提取出来的是图片然后才是文本内容因此这里虽然可以从pdf中提取到图片但是图片和文本的顺序是不能保证的需要特别注意哦。
读取表格
读取目标文档截图 很遗憾使用iText从pdf文档中读取表格内容并没有像poi读取word中表格一样可以逐行读取的API读取表格内容和读取文本是一样的不能读取出表格的样式内容。如图 上一篇掌握iText轻松处理PDF文档-基础篇-CSDN博客