2014-07-08 125 views
0

我想設置,通過iText庫,這樣的事情發生在我的PDF背景模板(圖像):如何在Android中使用iText庫將背景模板設置爲pdf?

Click too see the image

我試圖用類似下面的代碼:

 PdfReader reader = new PdfReader("./assets/sarbargandroid.pdf"); 

     PdfImportedPage page = writer.getImportedPage(reader, 1); 

     PdfContentByte cb = writer.getDirectContent(); 

     cb.addTemplate(page, 0.0, 0.0); 

但它沒有在android中工作,因爲.addtemplate()方法需要一些awt庫! 我試圖addimage這樣的東西:

 private void setBackground(Chapter document) { 

     ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
     Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.sarbarg); 
     bitmap.compress(Bitmap.CompressFormat.JPEG , 100, stream); 
     Image img; 
     try { 
      img = Image.getInstance(stream.toByteArray()); 
      img.setAbsolutePosition(0, 0); 

      document.add(img); 

     } catch (BadElementException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (DocumentException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

但因爲圖像不適合頁面並創建這樣一個PDF格式正確我以前不工作: Click too see image

我怎樣才能做到這一點是否正確?任何人都幫助我?

回答

0

你的問題有幾個錯誤,這可能解釋爲什麼沒人回答。我會告訴你什麼是錯的,然後也許你可以創建一個新的問題。

你說:

因爲.addtemplate()梅索德需要一些AWT庫並沒有在Android的工作!

如果addTemplate()方法需要AWT庫,那麼您使用的是iText。在Android上工作時,你應該使用iTextG:http://itextpdf.com/product/itextg

您正在使用PdfReader這使人們認爲你想要一個背景圖片添加到現有文件。這意味着您使用PdfStamper,但您的代碼看起來像您使用的是PdfWriter。這是一個矛盾。

您的setBackground()方法將Chapter作爲您添加圖像的參數。這是違反直覺的: - 如果您想將背景圖片添加到現有文檔,則永遠不會使用Chapter對象。 - 如果您想要將背景圖像添加到的每個頁面(從頭創建創建的PDF),您將使用頁面事件。

另一個主要問題是您創建圖像並按原樣添加它。您沒有將其縮放以適合頁面。

另外:如果您在現有PDF的背景中添加圖像。部分圖像可能被原始文檔中存在的不透明形狀覆蓋。

+0

謝謝@布魯諾的完整答案,這對我有幫助,最後我用PdfStamper解決了我的問題。 – Babak

相關問題