Android环境下生成PDF文件
来源:互联网 发布:淘宝怎么出售二手 编辑:程序博客网 时间:2024/05/16 10:58
一、背景
公司需要一个从本地选择图片生成pdf文件并上传的功能,由于Android本身并没有对pdf的支持,这里选择使用一个第三方的库来达成需求。
二、库的选择
2.1 当前主流的库
在众多Java语言编写的PDf库中,对Android有支持且有一定用户量的的有:iText、Qoppa qPDF工具包、PDFJet。
2.2 三个库的对比如下:
2.3 选型
鉴于性能和开源,决定选择iText作为此次接入的PDF库。
三、iText库接入
3.1 资源说明
3.1.1 下载链接
https://github.com/itext/itextpdf/tree/itextg
3.1.2 下载说明
If you want to use iText on Android or the Google App Engine, you need to use iTextG. iTextG is almost identical to iText, except that it only uses classes that are white-listed by Google. All references to java.awt, javax.nio and other “forbidden” packages have been removed.
(在Android上使用iText,需要使用iTextG。iTextG与iText基本相同,只是替换掉了java.awt,javax.nio等Android上不支持的包。)
3.1.3 混淆说明
# itext-dontwarn com.itextpdf.**-keep class com.itextpdf.** {*;}
3.2 图片生成pdf方法
3.2.1 设置pdf每页的背景
public class PdfBackground extends PdfPageEventHelper { @Override public void onEndPage(PdfWriter writer, Document document) { //设置pdf背景色为白色 PdfContentByte canvas = writer.getDirectContentUnder(); Rectangle rect = document.getPageSize(); canvas.setColorFill(BaseColor.WHITE); canvas.rectangle(rect.getLeft(), rect.getBottom(), rect.getWidth(), rect.getHeight()); canvas.fill(); //设置pdf页面内间距 PdfContentByte canvasBorder = writer.getDirectContent(); Rectangle rectBorder = document.getPageSize(); rectBorder.setBorder(Rectangle.BOX); rectBorder.setBorderWidth(BORDER_WIDTH); rectBorder.setBorderColor(BaseColor.WHITE); rectBorder.setUseVariableBorders(true); canvasBorder.rectangle(rectBorder); }}
3.2.2 根据图片Uri生成pdf
/** * 根据图片生成PDF * * @param pdfPath 生成的PDF文件的路径 * @param imagePathList 待生成PDF文件的图片集合 * @throws IOException 可能出现的IO操作异常 * @throws DocumentException PDF生成异常 */private void createPdf(String pdfPath, List<String> imagePathList) throws IOException, DocumentException { Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(pdfPath)); //设置pdf背景 PdfBackground event = new PdfBackground(); writer.setPageEvent(event); document.open(); for (int i = 0; i < imagePathList.size(); i++) { document.newPage(); Image img = Image.getInstance(imagePathList.get(i)); //设置图片缩放到A4纸的大小 img.scaleToFit(PageSize.A4.getWidth() - BORDER_WIDTH * 2, PageSize.A4.getHeight() - BORDER_WIDTH * 2); //设置图片的显示位置(居中) img.setAbsolutePosition((PageSize.A4.getWidth() - img.getScaledWidth()) / 2, (PageSize.A4.getHeight() - img.getScaledHeight()) / 2); document.add(img); } document.close();}
四、参考文献
4.1 iText官方网站:
http://itextpdf.com/
4.2 iText5图片处理相关examples:
http://developers.itextpdf.com/examples/image-examples-itext5
4.3 Stefan Fenz的博客地址:
http://stefan.fenz.at/creating-pdfs-on-android-an-evaluation/
- Android环境下生成PDF文件
- Android环境下生成PDF文件
- android 生成pdf文件
- Android下生成pdf并显示中文
- android 文字或者图片生成.pdf文件
- android 文字或者图片生成.pdf文件
- Android使用iText生成pdf文件并读取pdf内容
- Android下生成和读取PDF文件的工程demo, ttf的使用
- 使用iTextsharp 在ASP.NET环境下生成PDF文档
- Android下读取PDF文件的解决方案
- Android生成PDF文件、webview加载本地PDF或者网络PDF
- c#生成pdf文件
- PDF文件的生成
- Jasper生成PDF文件
- PDF文件的生成
- JAVA生成PDF文件
- python生成pdf文件
- java生成PDF文件
- java对一个数如何保留三位小数
- 第一个Java程序(HelloWorld)
- Spring与Hibernate整合
- monkeyrunner环境搭建
- 吵架后,千万不要删照片和聊天记录,这就是代价!
- Android环境下生成PDF文件
- Python web 简单服务器的搭建与运行
- pom.xml 详解
- Java中的形参和实参的区别以及传值调用和传引用调用
- D
- composer安装laravel项目
- android状态栏设置
- JQuery简单学习
- 小仙女-mybatis基础