使用java将iText中的多个图像添加到单个pdf文件中

时间:2015-03-29 16:41:13

标签: java image pdf itext

我有以下代码,但此代码仅将最后一个图像添加到pdf中。

    try {
        filePath = (filePath != null && filePath.endsWith(".pdf")) ? filePath
                : filePath + ".pdf";
        Document document = new Document();
        PdfWriter writer = PdfWriter.getInstance(document,
                new FileOutputStream(filePath));
        document.open();    
        // document.add(new Paragraph("Image Example"));
        for (String imageIpath : imagePathsList) {

            // Add Image
            Image image1 = Image.getInstance(imageIpath);
            // Fixed Positioning
            image1.setAbsolutePosition(10f, 10f);
            // Scale to new height and new width of image
            image1.scaleAbsolute(600, 800);
            // image1.scalePercent(0.5f);
            // Add to document
            document.add(image1);
            //document.bottom();


        }
        writer.close();

    } catch (Exception e) {
        LOGGER.error(e.getMessage());
    }

您是否会告诉我如何更新代码以便将所有图片添加到导出的pdf中? imagePathsList包含我想要添加到单个pdf中的所有图像路径。

最诚挚的问候, 奥勒利安

2 个答案:

答案 0 :(得分:4)

查看MultipleImages示例,您会发现代码中存在两个错误:

  1. 您创建一个大小为595 x 842用户单位的页面,无论图像的尺寸如何,您都可以将每个图像添加到该页面。
  2. 您声称只添加了一张图片,但事实并非如此。您正在同一页上添加所有图像在彼此之上。最后一张图片涵盖了之前的所有图像。
  3. 看看我的代码:

    public void createPdf(String dest) throws IOException, DocumentException {
        Image img = Image.getInstance(IMAGES[0]);
        Document document = new Document(img);
        PdfWriter.getInstance(document, new FileOutputStream(dest));
        document.open();
        for (String image : IMAGES) {
            img = Image.getInstance(image);
            document.setPageSize(img);
            document.newPage();
            img.setAbsolutePosition(0, 0);
            document.add(img);
        }
        document.close();
    }
    

    我使用第一张图片的大小创建一个Document实例。然后我循环遍历图像数组,将下一页的页面大小设置为每个图像的大小之前我触发newPage() [*] 。然后我在坐标0,0处添加图像,因为现在图像的大小将与每个页面的大小相匹配。

    [*] 只有在当前页面添加了某些内容时,newPage()方法才会生效。第一次进入循环时,尚未添加任何内容,因此没有任何反应。这就是您在创建Document实例时需要将页面大小设置为第一个图像大小的原因。

答案 1 :(得分:0)

Android具有" PdfDocument"实现这一目标,

Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="150"/>
    </Grid.RowDefinitions>
    <ListView Grid.Row="0" ItemsSource="{Binding Person}" ScrollViewer.VerticalScrollBarVisibility="Visible" ScrollViewer.CanContentScroll="True" >
        <ListView.View>
            <GridView>
                <GridViewColumn DisplayMemberBinding="{Binding Path=Id}" Header="Id" Width="100"/>
                <GridViewColumn DisplayMemberBinding="{Binding Path=Name}" Header="Name" Width="Auto" />
            </GridView>
        </ListView.View>
    </ListView>
 <Grid>

}

最后在清单中启用存储权限,这应该有效