如何在android中使用iText库将背景模板设置为pdf?

时间:2014-07-08 18:53:45

标签: android pdf itext

我想在iText Library生成的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

我该如何正确地做到这一点?有人帮我吗?

1 个答案:

答案 0 :(得分:0)

你的问题有几个问题,这可以解释为什么没有人回答。我会告诉你什么是错的,然后你可以创建一个新问题。

你说:

  

它在android中不起作用,因为.addtemplate()方法需要一些awt库!

如果addTemplate()方法需要AWT库,那么您使用的是iText。在Android上工作时,您应该使用iTextG:http://itextpdf.com/product/itextg

您正在使用PdfReader,这使人们假设您要将背景图片添加到现有文档中。这意味着您使用PdfStamper,但您的代码看起来像是在使用PdfWriter。这是一个矛盾。

您的setBackground()方法会将Chapter作为参数添加到您的图像中。这是违反直觉的:   - 如果您要将背景图片添加到现有文档,则永远不会使用Chapter对象。   - 如果您要将背景图像添加到从头创建的PDF 的每个页面,您将使用页面事件。

另一个主要问题是您创建图像并按原样添加。您没有缩放它以适合页面。

另外:如果您在现有PDF的背景中添加图像。该图像的某些部分可能会被原始文档中出现的不透明形状所覆盖。