/** * ITextTest * iText生成PDF加入列表,註釋等內容,同時設置頁眉和頁腳及頁碼等。 */ package com.labci.itext.test; import java.awt.Color; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import com.lowagie.text.Annotation; import com.lowagie.text.Document; import com.lowagie.text.DocumentException; import com.lowagie.text.Font; import com.lowagie.text.HeaderFooter; import com.lowagie.text.List; import com.lowagie.text.ListItem; import com.lowagie.text.Phrase; import com.lowagie.text.Rectangle; import com.lowagie.text.pdf.BaseFont; import com.lowagie.text.pdf.PdfWriter; /** * @author Bill Tu(tujiyue/iwtxokhtd) * Jun 6, 2011[4:10:35 PM] * */ public class ITextList { private final static String RESULT_FILE="itext_list.pdf"; public static void main(String []args){ Document doc=new Document(); try { PdfWriter.getInstance(doc, new FileOutputStream(RESULT_FILE)); BaseFont fontChinese=null; try { fontChinese = BaseFont.createFont("STSong-Light","UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);//設置中文字體 } catch (IOException e) { e.printStackTrace(); } Font chinese = new Font(fontChinese, 10, Font.NORMAL); /** * HeaderFooter的第2個參數爲非false時代表打印頁碼 * 頁眉頁腳中也可以加入圖片,並非只能是文字 */ HeaderFooter header=new HeaderFooter(new Phrase("這僅僅是個頁眉,頁碼在頁腳處",chinese),false); //設置是否有邊框等 // header.setBorder(Rectangle.NO_BORDER); header.setBorder(Rectangle.BOTTOM); header.setAlignment(1); header.setBorderColor(Color.red); doc.setHeader(header); HeaderFooter footer=new HeaderFooter(new Phrase("-",chinese),new Phrase("-",chinese)); /** * 0是靠左 * 1是居中 * 2是居右 */ footer.setAlignment(1); footer.setBorderColor(Color.red); footer.setBorder(Rectangle.BOX); doc.setFooter(footer); /** * 頁眉頁腳的設置一定要在open前設置好 */ doc.open(); /** * true:代表要排序,10代表序號與文字之間的間距 * false:代表不排序,則文字前的符號爲"-" */ List itextList=new List(true,10); /** * 也可以改變列表的符號[可選] * $$$$$$$$$$$ * 要改變列表符號時,上面的List構造方法第一參數值必須爲false * $$$$$$$$$$$ * 可以使用字符串,Chunk,Image等作列表符號,如下 */ //itextList.setListSymbol("*"); ListItem firstItem=new ListItem("first paragraph"); ListItem secondItem=new ListItem("second paragraph"); ListItem thirdItem=new ListItem("third paragraph"); itextList.add(firstItem); itextList.add(secondItem); itextList.add(thirdItem); doc.add(itextList); //添加註釋,註釋有標題和內容,註釋可以是文本,內部鏈接,外部鏈接,圖片等 Annotation annotation=new Annotation("what's this?","it's a tree and it is not a big"); doc.add(annotation); doc.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (DocumentException e) { e.printStackTrace(); } } }
工程結構圖:
背景 spring和mybatis集成過程中,我們可以通過MapperFactoryBean的方式配置Mapper接口。但是這樣需要在配置文件中,爲每個mapper配置相同的代碼塊,浪費時間。關鍵對於代碼潔癖的人來說,一點不能忍。 <bea
爲什麼要研究字符串? 人機交互的過程中,文字、數字、字母、符號都是字符表現形式,這部分內容佔了人機信息交互的大部分內容,所以有必要明確一些基本問題。因此大部分數據類型都應該有字符串表達形式,我們在定義新類型的時候可以根據需要來定義新類型的
security的簡單原理: 使用衆多的攔截器對url攔截,以此來管理權限。但是這麼多攔截器,不可能對其一一來講,主要講裏面核心流程的兩個。 首先,權限管理離不開登陸驗證的,所以登陸驗證攔截器AuthenticationProcessing
我們經常會需要啓動多個實例的情況來測試註冊中心、配置中心等基礎設施的高可用,也會用來測試客戶端負載均衡的調用等。但是,我們一個應用只能有一個端口號,這就使得在本機測試的時候,不得不爲同一個服務設置不同的端口來進行啓動。 在本地用不同端口啓動
簡介 Java Reflection,稱爲 Java 反射,是Java基礎部分的一個比較難的點。Reflection(反射)是被視爲動態語言的關鍵,通過反射機制,我們可以在運行時(runtime)獲取類的完整結構。例如,可以獲取到
一面 1. 簡短自我介紹 2. 事務的ACID,其中把事務的隔離性詳細解釋一遍 3. 髒讀、幻影讀、不可重複讀 4. 紅黑樹、二叉樹的算法 5. 平常用到哪些集合類?ArrayList和LinkedList區別?HashMap內部數據結構
當我們站在技術之路的原點,未來可能充滿了迷茫,也存在着很多不同的可能。在這個知識爆炸與終身學習/碎片化學習爲主的時代,我們面臨的問題之一就是如何進行有效學習,不僅能有效平衡廣度與深度,並且能真正的積澱下來,提升自己的研發效能。於筆者而
阿里巴巴Java開發手冊 梳理筆記 - finally 塊必須對資源對象、流對象進行關閉 規約內容: 2.1 異常處理 6. 【強制】 finally 塊必須對資源對象、流對象進行關閉,有異常也要做 try - catch 。 說明:如果
在Java方面,能夠實現多線程安全修改對象值得方法只有2個 1.原子操作 2.互斥方法 而在Java當中,或是其他語言中,基本上也都是使用CAS實現。CAS是比較並交換的意思,這個操作包含2個連續的操作,比較,還有賦值,因爲2個操作在cpu
單線程輪詢並執行任務,有可能會導致飢餓。比較適合於一些具有一個任務的週期調度。 任務列表用數組存儲,元素最前面的元素是最先被執行的任務。 schedule方法是固定間隔執行,根據上一次執行的結束時間來定義間隔的開始時間 scheduleAt
創建的ReadWriteLock需要使用兩個方法來繼續創造2個對象,分別是ReadLock和WriteLock。 這兩個鎖對象的方法調用都會匯聚到ReadWriteLock的Sync類中。多個對象的方法調用匯聚到一個對象上面,這個設計模式是
synchronized關鍵字可以修飾普通方法,靜態方法,當修飾普通方法,鎖對象是當前對象,當修飾靜態方法,鎖對象是當前類的class synchroinzed關鍵字可以使用同步代碼塊實現同步,此時可以指定鎖對象。 同步方法的實現方式 同步
AQS是Java多線程編程的重入鎖,管程,工具類的基礎類,是必須要掌握的。不掌握這個類,根本不能稱之爲合格的Java程序員。 即使是把這個類所有的代碼都背會,也是值得的。 如何標識已經有線程在執行呢? 有兩個變量,一個state變量,一個e
################這是之前的思考 內存屏障只是保證清空流水線,如何保證高速緩存的內容更新到最新或刷新到主存呢?這個問題突然想到了,不知道這個需要怎回答。 內存屏障保證的CPU執行執行序列能夠順序執行,而不是亂序執行。當然,前提
使用volidate關鍵字修飾的成員變量,保證可見性,也就是當一個線程修改這樣的成員變量後,其他的線程能夠立即看到這次的修改。有兩個方面的原因: 1.編譯器不優化對這樣的關鍵字修飾變量的一些訪問操作 2.對讀,寫這個關鍵字修飾的變量前後,會