当前位置: 首页 > 知识库问答 >
问题:

使用带有 itext pdf 的Android Studio创建包含图像的表格时出现的问题

齐俊达
2023-03-14

我正在创建包含表格和图像的pdf。问题是我可以在第一页看到图像,但在第二页看不到。

>

  • 使用Android Studio 3.1.3和itextg-5.5.8

    public void createPDF() throws IOException{
    
        EditText pdfREFNo=(EditText)findViewById(R.id.etReferenceNo);
        FileName = pdfREFNo.getText().toString()+".pdf";
        outpath = Environment.getExternalStorageDirectory() + "/PDF/";
    
        File docsFolder = new File(Environment.getExternalStorageDirectory() + "/PDF");
        boolean isPresent = true;
        if (!docsFolder.exists()) {
            isPresent = docsFolder.mkdir();
        }
        if (isPresent) {
            outpath = Environment.getExternalStorageDirectory() + "/PDF/";
        } else {
        }
    
        try {
            PdfWriter.getInstance(doc, new FileOutputStream(outpath+FileName));
    
            Document doc = new Document(PageSize.A4,20f,20f,50f,50f);
            Font fontHeader = new Font(FontFamily.HELVETICA, 11, Font.BOLD, new BaseColor(0, 0, 0));
            Font fontCell = new Font(FontFamily.HELVETICA, 10, Font.NORMAL, new BaseColor(0, 0, 0));
            Font fontCell_white = new Font(FontFamily.HELVETICA, 10, Font.NORMAL, new BaseColor(255, 255, 255));
    
            doc.open();
    
            PdfPTable table1 = new PdfPTable(8);
            table1.setWidthPercentage(100f);
    
            PdfPTable table_A = new PdfPTable(6);
            table_A.setWidthPercentage(100f);
    
            // convert image to byte array (arrTick)
            try {
                Drawable d = getResources().getDrawable(R.drawable.tick);
                Bitmap bitmap = ((BitmapDrawable)d).getBitmap();
                arrTick = BMP.getBytes(bitmap);
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        //Creating Table 1
        insert_cell(table1,"Table 1 ",Element.ALIGN_LEFT,8,fontHeader,1 ,1, false, emptyArr, -1);
    
        insert_cell(table1, "Yes", Element.ALIGN_LEFT, 2, fontCell, 0 ,1, false, emptyArr, -1);
        insert_cell(table1, "No", Element.ALIGN_LEFT, 2, fontCell, 0 ,1, false, emptyArr, -1);
        insert_cell(table1, "Uncertain", Element.ALIGN_LEFT, 4, fontCell, 0 ,1, false, emptyArr, -1);
    
        if (cbYes.isChecked() == true) {
            insert_cell(table1, "", Element.ALIGN_CENTER, 2, fontCell, 0, 1, true, arrTick, 3);
        } else {
            insert_cell(table1, "", Element.ALIGN_CENTER, 2, fontCell_white, 0, 1, false, emptyArr, -1);
        }
        if (cbNo.isChecked() == true) {
            insert_cell(table1, "", Element.ALIGN_CENTER, 2, fontCell, 0, 1, true, arrTick, 3);
        } else {
            insert_cell(table1, "", Element.ALIGN_CENTER, 2, fontCell_white, 0, 1, false, emptyArr, -1);
        }
        if (cbUncertain.isChecked() == true) {
            insert_cell(table1, "", Element.ALIGN_CENTER, 4, fontCell, 0, 1, true, arrTick, 3);
        } else {
            insert_cell(table1, "", Element.ALIGN_CENTER, 4, fontCell_white, 0, 1, false, emptyArr, -1);
        }
        doc.add(table1);
        doc.newPage();
    
        insert_cell(table_A,"Remark",Element.ALIGN_LEFT,6,fontHeader,1 ,1, false, emptyArr, -1);
        insert_cell(table_A, etRemarks.getText().toString(), Element.ALIGN_LEFT, 6, fontCell, 0 ,1, false, emptyArr, -1);
        insert_cell(table_A," ",Element.ALIGN_LEFT,6,fontCell_white,0 ,0, false, emptyArr, -1);
    
        insert_cell(table_A,"table_A",Element.ALIGN_LEFT,6,fontHeader,1 ,1, false, emptyArr, -1);
    
        insert_cell(table_A, "Yes", Element.ALIGN_LEFT, 2, fontCell, 0 ,1, false, emptyArr, -1);
        insert_cell(table_A, "No", Element.ALIGN_LEFT, 2, fontCell, 0 ,1, false, emptyArr, -1);
        insert_cell(table_A, "Pending", Element.ALIGN_LEFT, 2, fontCell, 0 ,1, false, emptyArr, -1);
    
        if (cbYes2.isChecked()) {
            insert_cell(table_A, "", Element.ALIGN_CENTER, 2, fontCell, 0, 1, true, arrTick, 3);
        } else {
            insert_cell(table_A, "", Element.ALIGN_CENTER, 2, fontCell_white, 0, 1, false, emptyArr, -1);
        }
    
        if (cbNo2.isChecked()) {
            insert_cell(table_A, "", Element.ALIGN_CENTER, 2, fontCell, 0, 1, true, arrTick, 3);
        } else {
            insert_cell(table_A, "", Element.ALIGN_CENTER, 2, fontCell_white, 0, 1, false, emptyArr, -1);
        }
    
        if (cbUncertain.isChecked()) {
            insert_cell(table_A, "", Element.ALIGN_CENTER, 2, fontCell, 0, 1, true, arrTick, 3);
        } else {
            insert_cell(table_A, "", Element.ALIGN_CENTER, 2, fontCell_white, 0, 1, false, emptyArr, -1);
        }
    
        doc.add(table_A);
        doc.close();
    
        } catch (FileNotFoundException e)
        {
        e.printStackTrace();
        } catch (DocumentException e)
        {
        e.printStackTrace();
        }
    }
    
    private void insert_cell(PdfPTable table, String text, int align, int colspan, Font font, int background, int border, boolean signFlag, byte[] sign, int type) throws IOException, BadElementException {
    
        if(text.trim().equalsIgnoreCase("") == false && signFlag == false) {
            PdfPCell cell = new PdfPCell(new Phrase(text.trim(), font));
            cell.setHorizontalAlignment(align);
            cell.setColspan(colspan);
            cell.setPaddingLeft(5f);
            cell.setPaddingTop(3f);
            cell.setPaddingBottom(3f);
            cell.setPaddingRight(5f);
    
            if (background == 0) {
                cell.setBackgroundColor(BaseColor.WHITE);
            } else if (background == 1) {
                cell.setBackgroundColor(BaseColor.LIGHT_GRAY);
            } else if (background == 2) {
                cell.setBackgroundColor(BaseColor.BLACK);
            }else if (background == 3) {
                cell.setBackgroundColor(BaseColor.YELLOW);
            }
    
            if (border == 0) {
                cell.setBorder(PdfPCell.NO_BORDER);
            } else if (border == 1) {
                cell.setBorder(PdfPCell.BOX);
            }
            table.addCell(cell);
        }
    
    // to add empty cell
    
        if (text.trim().equalsIgnoreCase("") == true && signFlag == false) {
            PdfPCell cell = new PdfPCell(new Phrase("-", font));
            cell.setHorizontalAlignment(align);
            cell.setColspan(colspan);
            cell.setPaddingLeft(5f);
            cell.setPaddingTop(3f);
            cell.setPaddingBottom(3f);
            cell.setPaddingRight(5f);
    
            if (background == 0) {
                cell.setBackgroundColor(BaseColor.WHITE);
            } else if (background == 1) {
                cell.setBackgroundColor(BaseColor.LIGHT_GRAY);
            } else if (background == 2) {
                cell.setBackgroundColor(BaseColor.BLACK);
            }else if (background == 3) {
                cell.setBackgroundColor(BaseColor.YELLOW);
            }
    
            if (border == 0) {
                cell.setBorder(PdfPCell.NO_BORDER);
            } else if (border == 1) {
                cell.setBorder(PdfPCell.BOX);
            }
            table.addCell(cell);
        }
    
    // to add image
    
    if(text.trim().equalsIgnoreCase("") ==true && signFlag == true && sign != null)
    {
        Bitmap img1 = BMP.getImage(sign);
        Drawable d1 = new BitmapDrawable(img1);
        BitmapDrawable bitDw = ((BitmapDrawable) d1);
        Bitmap bmp = bitDw.getBitmap();
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.JPEG, 100, stream);
        Image image = Image.getInstance(stream.toByteArray());
    
        switch (type)
        {
        case 1:     // signature
        try{
            image.scaleAbsolute(150f,70f);
            PdfPCell cell = new PdfPCell();
            cell.setHorizontalAlignment(align);
            cell.setColspan(colspan);
            cell.addElement(image);
            table.addCell(cell);
    
        }catch (Exception e) {
            e.printStackTrace();
        }
        break;
    
        case 2:     // photo
        try{
            image.setRotationDegrees(270f);
            PdfPCell cell = new PdfPCell();
           cell.setHorizontalAlignment(align);
            cell.setColspan(colspan);
            cell.addElement(image);
            table.addCell(cell);
    
        }catch (Exception e) {
            e.printStackTrace();
        }
        break;
    
        case 3:     // tick
        try{
            image.scaleAbsolute(100f,18f);
            image.setAlignment(Element.ALIGN_CENTER);
            PdfPCell cell = new PdfPCell();
            cell.setHorizontalAlignment(align);
            cell.setColspan(colspan);
            cell.addElement(image);
            table.addCell(cell);
        }catch (Exception e) {
            e.printStackTrace();
        }
        break;
    }
    }
    

    我正在创建包含表格和图像的pdf。问题是我可以在第一页看到图像,但在第二页看不到。


  • 共有1个答案

    范楚
    2023-03-14

    通过使用Image.getInstance(byte[]符号)修复。

    case 3:     // tick
        try{
            Image tick = Image.getInstance(sign);   // byte[] sign
            tick.scaleAbsolute(100f,18f);
            tick.setAlignment(Element.ALIGN_CENTER);
            PdfPCell cell = new PdfPCell();
            cell.setHorizontalAlignment(align);
            cell.setColspan(colspan);
            cell.addElement(tick);
            table.addCell(cell);
        }catch (Exception e) {
            e.printStackTrace();
        }
        break;
    

    而不是:

    Bitmap img1 = BMP.getImage(sign);
    Drawable d1 = new BitmapDrawable(img1);
    BitmapDrawable bitDw = ((BitmapDrawable) d1);
    Bitmap bmp = bitDw.getBitmap();
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bmp.compress(Bitmap.CompressFormat.JPEG, 100, stream);
    Image image = Image.getInstance(stream.toByteArray());
    
    case 3:     // tick
        try{
            image.scaleAbsolute(100f,18f);
            image.setAlignment(Element.ALIGN_CENTER);
            PdfPCell cell = new PdfPCell();
            cell.setHorizontalAlignment(align);
            cell.setColspan(colspan);
            cell.addElement(image);
            table.addCell(cell);
        }catch (Exception e) {
            e.printStackTrace();
        }
        break;
    

    已修复的 PDF:

     类似资料:
    • 我正在创建一个函数,它检索设备的已安装应用程序,应用程序的包和每个应用程序拥有的权限。问题是,我想把所有这些放进一个JSON文件,我不知道怎么做,这里是我编程的,但它不工作,请,如果有人知道一些东西,帮助,这是非常重要的,对我!提前道谢。

    • 我一直在互联网上努力研究如何在编译成可运行的jar后显示图像图标。我发现这个问题太晚了,我以前在eclipse中运行过很多次程序,一切都正常,现在6个月后项目完成了,我用eclipse编译了我的程序,没有音频或图像工作。在网上阅读,它说关于图片文件夹的位置应该在罐子里,但我的没有放在那里? 我在源文件夹中移动了图片文件夹,但它不起作用。我有一种感觉,这可能与资源的路径有关。。。但这只是猜测。 我已

    • 使用debian 9.5、Python3.5、libreoffice 5.2、x86_64 arch。 我有一个22页的word文件(docx),其中包含几个图表。 使用bash从终端运行时,以下命令正常工作,即生成22页的pdf文件: 输出: 转换 /tmp/docx5/output.docx- 问题如下:使用subprocess.run从python执行的相同外部命令生成的pdf文件只有一页,

    • 问题内容: 我目前无法正常工作的应用程序部分是能够一次滚动浏览并显示一张图像列表。我从用户那里得到一个目录,在该目录中的所有文件中进行后台处理,然后加载仅包含jpeg和png的数组。接下来,我想用第一个图像更新JLabel,并提供上一个和下一个按钮以滚动浏览并依次显示每个图像。当我尝试显示第二张图像时,它没有更新…这是到目前为止我得到的: 我用来更新图像的方法: 然后在我的createAndSho

    • 我正在使用openjdk 14.0.1 我一直跟着教程 https://openjfx.io/openjfx-docs/#install-javafx 遵循CLI中的运行时图像模块化教程 我已经使用jlink成功创建了运行时映像。创建的运行时映像如下所示,使用bin中的jvm,我可以运行此应用程序。 以便从此运行时创建包 我正在使用命令 这将创建一个安装程序,如下所示 但当我运行安装程序时,一声巨

    • 我用python scrapy编写了一个脚本,从一个网站下载一些图片。当我运行我的脚本时,我可以在控制台中看到图像的链接(它们都是格式)。然而,当我打开下载完成时应该保存图像的文件夹时,我什么也没有看到。我犯错的地方? 这是我的蜘蛛(我正在从Sublime文本编辑器运行): 这是我在中为要保存的图像定义的内容: 为了让事情更清楚: 我希望保存图像的文件夹名为,我已将其放在项目下的文件夹中。 文件夹