導出pdf功能


  本程序下載地址:

  PDF是我們極其常用的文件格式,但對如何生成PDF,個人一直覺得很神秘,其實利用一些公開的PDF庫,我們就可以直接生成PDF文件,而不用關注PDF文件的內部細節。我知道的PDF庫有如CARIO和HARU。

  HARU是一款免費的,跨平台的,開源的生成PDF的庫。支持嵌入PNG、JPEG圖片,支持CJK字體編碼。用C語言編寫,因此可以在C/C++中調用。HARU也提供了Ruby,Delphhi,和C#的捆綁(binding)。項目主頁見http://libharu.sourceforge.net/index.html

  對於HARU這個開源的PDF庫,我們沒必要深究具體代碼的實現, 只需要使用它提供的接口: 如何創建一個PDF, 設置PDF寬高,保存PDF等就可以了。

  下面通過一個例子:使用HARU開源庫,實現把圖片轉為pdf功能。

  程序運行界面:點擊導出pdf,將會把圖片轉為pdf。

  

  具體導出PDF響應函數過程如下:

 1 void CPdfDlg::OnBtnExportPdf() 
 2 {
 3     // TODO: Add your control notification handler code here
 4     
 5     //生成的pdf名稱
 6     CString strDlgPathName = "E:\\123.pdf";                                
 7 
 8     //需要轉換的圖片
 9     CString strImage = "E:\\002.jpg";                                    
10 
11     //臨時生成的圖片
12     CString strImageTemp = "E:\\000.jpg";                                
13     
14     //新建PDF文檔,error_handler為錯誤響應函數
15     HPDF_Doc  pExportPdf = HPDF_New (error_handler, NULL);                
16     
17     if (NULL == pExportPdf)
18         return;
19     
20     CxImage xImage;
21 
22     //E:\\002.jpg圖片格式為3,可以用其它函數獲取不同類型圖片的格式ID
23     int nType = 3;                                                        
24     xImage.Load(strImage,nType);
25     
26     //臨時生成jpg圖片
27     xImage.Save(strImageTemp,CXIMAGE_FORMAT_JPG);                        
28     
29     HPDF_Page page = HPDF_AddPage (pExportPdf);
30     double imageH = xImage.GetHeight();
31     double imageW = xImage.GetWidth();    
32     HPDF_Image jpgImage = HPDF_LoadJpegImageFromFile (pExportPdf, strImageTemp);
33     HPDF_Page_SetWidth (page, HPDF_Image_GetWidth (jpgImage));
34     HPDF_Page_SetHeight (page, HPDF_Image_GetHeight(jpgImage));    
35     HPDF_Page_DrawImage (page, jpgImage, 0, 0,HPDF_Image_GetWidth (jpgImage),HPDF_Image_GetHeight (jpgImage));
36     
37     //刪除臨時生成的圖片
38     DeleteFile(strImageTemp);                                            
39     
40     //保存pdf
41     HPDF_SaveToFile (pExportPdf,strDlgPathName);                        
42     
43     if (NULL != pExportPdf)
44     {
45         HPDF_Free (pExportPdf);
46     }
47 }

  在使用HPDF_New (error_handler, NULL)這個函數新建一個PDF時,需要指定錯誤響應函數,也就是創建失敗后會執行的函數。

  這個錯誤處理函數函數原型為:

( HPDF_STDCALL * HPDF_Error_Handler )(HPDF_STATUS error_no, HPDF_STATUS detail_no,  void *user_data);

  我們可以返照這個函數原型,寫出一個錯誤響應函數:


1
//PDF錯誤處理回調 2 void __cdecl CPdfDlg::error_handler(HPDF_STATUS error_no,HPDF_STATUS detail_no,void *user_data) 3 { 4 //在此可以拋出異常 5 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM