android手機生成pdf格式文件,Android根據pdf模板生成pdf文件

1 public voidFillPdfTemplate(String id) {2 android.icu.text.SimpleDateFormat simpleDateFormat =

3 new android.icu.text.SimpleDateFormat("HHmmss");//HH:mm:ss4 //設置默認時區

5 simpleDateFormat.setTimeZone(android.icu.util.TimeZone.getTimeZone("GMT+8:00"));6 //獲取當前時間

7 Date date2 = newDate(System.currentTimeMillis());8 String sim2 =simpleDateFormat.format(date2);9

10 String folderName_WaterImage = "WaterImage";11 String folderName_WaterDB = "WaterDB";12 String folderName_WaterPdf = "WaterPdf";13

14 File sdCardDir_PdfTemplate = newFile(Environment.getExternalStoragePublicDirectory(15 Environment.DIRECTORY_DOWNLOADS), folderName_WaterDB);16 File sdCardDir_WaterPdf = newFile(Environment.getExternalStorageDirectory(),17 folderName_WaterPdf);18

19 //模板路徑

20 String templatePath = sdCardDir_PdfTemplate + "/" + "WaterTemplate.pdf";21 //生成的新文件路徑

22 String newPDFPath = sdCardDir_WaterPdf + "/" +

23 mWaterInfo.SamplingDate + "_" + mWaterInfo.WellNumber + "_" + sim2 + ".pdf";24

25 /**

26 * 使用中文字體27 * 如果是利用 AcroFields填充值的不需要在程序中設置字體,在模板文件中設置字體為中文字體就行了28 */

29 BaseFont bf = null;30 try{31 bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);32 } catch(DocumentException e) {33 e.printStackTrace();34 } catch(IOException e) {35 e.printStackTrace();36 }37 Font FontChinese = new Font(bf, 12, Font.NORMAL);38

39 PdfReader reader;40 FileOutputStream out;41 ByteArrayOutputStream bos;42 PdfStamper stamper;43 try{44 out = new FileOutputStream(newPDFPath);//輸出流

45 reader = new PdfReader(templatePath);//讀取pdf模板

46 bos = newByteArrayOutputStream();47 stamper = newPdfStamper(reader, bos);48 AcroFields form =stamper.getAcroFields();49

50 String[] strDate = mWaterInfo.SamplingDate.split("-");51 String[] str ={52 mWaterInfo.WellNumber, mWaterInfo.Longitude + "," +mWaterInfo.Latitude,53 strDate[0], strDate[1], strDate[2], mWaterInfo.SamplingTime,54 mWaterInfo.SampleMethods, mWaterInfo.SampleDepth, mWaterInfo.Temperature,55 mWaterInfo.Weather, mWaterInfo.WaterLevel, mWaterInfo.WaterTemp1,56 mWaterInfo.ORP1, mWaterInfo.DO1, mWaterInfo.pH1, mWaterInfo.CT1, mWaterInfo.NTU1,57 mWaterInfo.Smell, mWaterInfo.Thing, mWaterInfo.Color, mWaterInfo.SamplingName,58 mWaterInfo.RecordingName};59

60 String[] it = newString[]{61 "Text1", "Text2", "Text3", "Text4", "Text5", "Text6", "Text7",62 "Text8", "Text9", "Text10", "Text11", "Text12", "Text13", "Text14", "Text15",63 "Text16", "Text17", "Text18", "Text19", "Text20", "Text21", "Text22",};64

65 for (int i = 0; i < 22; i++) {66 form.setFieldProperty(it[i], "textfont", bf, null);67 form.setField(it[i], str[i]);68 }69

70

71 stamper.setFormFlattening(true);//如果為false那么生成的PDF文件還能編輯,一定要設為true

72 stamper.close();73

74 Document doc = newDocument();75

76 PdfCopy copy = newPdfCopy(doc, out);77 doc.open();78 PdfImportedPage importPage =copy.getImportedPage(79 new PdfReader(bos.toByteArray()), 1);80 copy.addPage(importPage);81

82

83 File sdCardDir_WaterImage = newFile(Environment.getExternalStoragePublicDirectory(84 Environment.DIRECTORY_DOWNLOADS), folderName_WaterImage);85

86 String imagePath1 = sdCardDir_WaterImage + "/" + "Image" + id + "_1";87 String imagePath2 = sdCardDir_WaterImage + "/" + "Image" + id + "_2";88 //插入現場圖片

89 Image image1 =Image.getInstance(imagePath1);90 doc.add(image1);91 Image image2 =Image.getInstance(imagePath2);92 doc.add(image2);93

94 doc.close();95

96 Toast.makeText(this, "導出pdf完成", Toast.LENGTH_LONG).show();97 } catch(IOException e) {98 System.out.println(1);99 } catch(BadPdfFormatException e) {100 e.printStackTrace();101 } catch(DocumentException e) {102 e.printStackTrace();103 }104 }

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375889.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375889.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375889.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

棧的應用--數制轉換

十進制N和其他d進制 N(N div d)XdN mod d &#xff08;其中&#xff1a;div為整除運算&#xff0c;mod為求余運算&#xff09; void conversion(){SqStack S;int N;SElemType e;Init_Stack(S);scanf("%d",&N);while(N){Push(S,N%8);NN/8;}while(!Stack_Empty(S…

radio按鈕點擊文字選中按鈕

<input type"radio" name"name" id"rd" value" " /><label for"rd">測試</label> 轉載于:https://www.cnblogs.com/kevin1988/p/3727041.html

tokumx經營報表

#見數據庫列表 show dbs#切換/創建數據庫(當創建一個集合(table)的時候會自己主動創建當前數據庫)use admin;#添加用戶 db.addUser("zhoulf ","123456",true)#更改password&#xff08;為已經存在的用戶更改password&#xff09; db.addUser("zhoulf …

微博 Android 啟動廣告,使用Xposed去除微博國際版的啟動廣告

本文同步更新于旺仔的個人博客&#xff0c;訪問可能有點慢&#xff0c;多刷新幾次。前面有篇文章已經介紹了如何創建Xposed模塊的文章了&#xff0c;這篇就讓我們來實現一個簡單的去除啟動廣告的功能吧。起因為什么要是要去掉微博國際版的開屏廣告呢&#xff0c;因為廣告煩人啊…

鴿巢原理

鴿巢原理&#xff1a; n1個鴿子放入n個窩中&#xff0c;至少有一個窩含有兩只鴿子 Find a multipleTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 5590 Accepted: 2434 Special JudgeDescription The input contains N natural (i.e. positive integer) numbers…

linux命令:vim文件操作命令、新建用戶,查看用戶列表,chown命令

命令 簡單說明 :w 保存編輯后的文件內容&#xff0c;但不退出vim編輯器。這個命令的作用是把內存緩沖區中的數據寫到啟動vim時指定的文件中。 :w! 強制寫文件&#xff0c;即強制覆蓋原有文件。如果原有文件的訪問權限不允許寫入文件&#xff0c;例如&#xff0c;原有的文件…

cocos2d-x android 環境搭配,cocos2d-x?Android環境配置問題和解決方法

1.前提&#xff1a;下載安裝Cygwin,并已經在cygwin\home\admin(計算機用戶名)下的.bash_profile中完成如下配置&#xff1a;NDK_ROOT /cygdrive/d/cocos2dxdev/andrid-ndk-r8e//NDK安裝位置export NDK_ROOT問題&#xff1a;運行cygwin.exe.錄入如下的第一行數據后&#xff0c;沒…

jQuery 1.9 移除了 $.browser 的替代方法

授權方式&#xff1a;署名&#xff0c;非商業用途&#xff0c;保持一致&#xff0c;轉載時請務必以超鏈接(http://www.fwolf.com/blog/post/35)的形式標明文章原始出處和作者信息及本聲明。 jQuery 從 1.9 版開始&#xff0c;移除了 $.browser 和 $.browser.version &#xff0…

基于QTcpSocket和QTcpServer的Tcp通訊以及QDataStream序列化數據

最近要在QT下開發Tcp通訊&#xff0c;發送序列化數據以便于接收。 這里涉及到幾個問題&#xff1a; 1.QTcpSocket、QTcpServer的通訊 2.QDataStream序列化數據 多的不說&#xff0c;直接上干貨&#xff01;&#xff01;&#xff01; 客戶端&#xff1a; tcpclient.h 1 #ifndef …

android mina分析,Android與Mina整合

最近想在自己做的安卓手機應用中加入即時聊天功能&#xff0c;于是想到了用Mina來實現&#xff0c;也是由于自己想著偷懶&#xff0c;借用了官方的example中chat的相關代碼&#xff0c;經過一番改造&#xff0c;很快就能在java環境中正常運行了。確認沒問題后&#xff0c;將cli…

棧的應用--括號匹配的檢驗

算法中設置一個棧&#xff0c;每次讀入一個括號&#xff0c;若是右括號&#xff0c;則或者與置于棧頂的括號匹配&#xff0c;或者是不合法的情況&#xff0c;若是左括號&#xff0c;則入棧。若算法結束&#xff0c;棧是空的&#xff0c;則括號合法。 括號匹配函數 Status bra…

node.js 初體驗

node.js 初體驗 2011-10-31 22:56 by 聶微東, 174545 閱讀, 118 評論, 收藏, 編輯 PS: ~ 此篇文章的進階內容在為《Nodejs初階之express》 ~ 2014/09/24 更新《Express 4.X 啟航指南》 歡迎閱讀和評論:) 最近寫的文章收到許多朋友的反饋&#xff0c;感謝大家的支持和建議&#…

Qt之模型/視圖(實時更新數據)

上兩節簡單介紹了Qt中對于模型/視圖的編程&#xff0c;大部分助手里說的很清楚了&#xff0c;現在就開始實戰部分吧&#xff01; 在實際應用中&#xff0c;視圖展示的數據往往并非一成不變的&#xff0c;那么如何實時更新成了一個很重要的問題&#xff01;功能&#xff1a;&am…

android 動態生成fragment,Android動態加載fragment(fragment復用)

【實例簡介】Android動態加載fragment(fragment復用)【實例截圖】【核心代碼】fm_reuse└── fm_reuse├── AndroidManifest.xml├── bin│ ├── AndroidManifest.xml│ ├── classes│ │ └── com│ │ └── example│ │ └── fm_reuse│ …

Linux內核3.0移植并基于Initramfs根文件系統啟動

Linux內核移植與啟動 Target borad&#xff1a;FL2440 Bootloader&#xff1a;U-boot-2010.09 交叉編譯器&#xff1a;buildroot-2012.08 1.linux內核基礎知識 首先&#xff0c;磨刀不誤砍柴工。在動手進行linux內核移植之前&#xff0c;我們有必要對linux內核進行一定的了解。…

操作系統上機作業--實現shell(2)(多進程)

sh2.c: 實現shell程序&#xff0c;要求在第1版的基礎上&#xff0c;添加如下功能 ? 實現文件重定向 ? $ echo hello >log ? $ cat log ? Hello 實現思路&#xff1a; 和sh1.c相比&#xff0c;主要是修改了cmd函數的實現過程。通過循環找出重定向符號"&g…

當泛型方法推斷,擴展方法遇到泛型類型in/out時。。。

說到泛型方法&#xff0c;這個是.net 2.0的時候引入的一個重要功能&#xff0c;c#2.0也對此作了非常好的支持&#xff0c;可以不需要顯試的聲明泛型類型&#xff0c;讓編譯器自動推斷&#xff0c;例如&#xff1a; 1 void F<T>(T value){} 2 //... 3 int i 0; 4 F(i); 此…

AOP相關

實現AOP的技術&#xff0c;主要分為兩大類&#xff1a;一是采用動態代理技術&#xff0c;利用截取消息的方式&#xff0c;對該消息進行裝飾&#xff0c;以取代原有對象行為的執行&#xff1b;二是采用靜態織入的方式&#xff0c;引入特定的語法創建“方面”&#xff0c;從而使得…

操作系統上機作業--根據萊布尼茲級數計算PI(1)(多線程)

pi1.c: 使用2個線程根據萊布尼茲級數計算PI ? 萊布尼茲級數公式: 1 - 1/3 1/5 - 1/7 1/9 - ... PI/4 ? 主線程創建1個輔助線程 ? 主線程計算級數的前半部分 ? 輔助線程計算級數的后半部分 ? 主線程等待輔助線程運行結束后,將前半部分和后半部分相加實現思路&#xff1…

四種途徑將HTML5 web應用變成android應用

作為下一代的網頁語言&#xff0c;HTML5擁有很多讓人期待已久的新特性。HTML5的優勢之一在于能夠實現跨平臺游戲編碼移植&#xff0c;現在已經有很多公司在移動設備上使用HTML5技術。隨著HTML5跨平臺支持的不斷增強和智能手機的迅速普&#xff0c;HTML5技術有著非常好的發展前景…