2014-07-08 123 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

相关问题