---最近在用itext寫pdf報告,期間遇到目錄生成的問題,而目錄生成我認為最關鍵的是獲取章節的頁碼問題。下面分別介紹這兩種方法。除了這兩種方法之外,還可以參考我的另一篇部落格:itext 目錄生成的第三種方法
---方法一:
-------1、先生成不帶目錄的pdf檔案,命名為a.pdf。假設此時目錄應該在第3頁,分別從a.pdf中擷取pdf檔案,分別命名為a-start.pdf、a-end.pdf。
-------2、遍歷a.pdf獲取目錄章節的頁碼。命名為a-middle.pdf。
-------3、合併a-start.pdf、a-middle.pdf、a-end.pdf三個pdf。
-------
複雜度:o(m*n) m為a.pdf頁數、n為目錄中章節的數目。
---方法二:
-------1、先生成不帶目錄的pdf檔案,並用map記錄目錄中章節出現的頁碼,命名為a.pdf。假設此時目錄應該在第3頁,分別從a.pdf中擷取pdf檔案,分別命名為a-start.pdf、a-end.pdf。
-------2、直接從map集合中獲取目錄章節的頁碼。命名為a-middle.pdf。
-------3、合併a-start.pdf、a-middle.pdf、a-end.pdf三個pdf。
-------複雜度:o(n) m為a.pdf頁數、n為目錄中章節的數目。
分析:第二種方法本質上利用空間換時間來減少時間複雜度。具體原始碼詳見itext生成目錄原始碼
VS2010下生成dll的方法(第二種方法)
這種模式較為簡單,只用乙個標頭檔案就可以,不用dllmain.cpp和source.def檔案 1.首先建立生成dll的專案 開啟vs2010,兩種途經建立dll專案,基於mfc dll的和基於win32控制台應用程式的,這裡選擇基於win32控制台建立。a.檔案 新建 專案 專案命名為myapi ...
Qt 第二種執行緒
流程 工程目錄 新增在這裡作為全域性 namespace ui class mywidget public qwidget endif mywidget h mythread.cpp include mythread.h include 待會用到sleep函式 include mythread my...
Go練習題 3 第二種方法
乙個使用者管理系統 需要提供的功能 1.新增使用者 2.刪除使用者 3.修改使用者資訊 4.查詢使用者資訊 package main import fmt os strconv strings 定義密碼輸入次數 const password string 123123 maxauth int 3 使...