如何将iTextSharp.text.Image大小调整为我的代码?

And*_*ili 3 c# pdf pdf-generation itext itextsharp

我是iText和iTextSharp(iText的C#版本)的新手,我有以下问题.

我在我的PDF中插入了一些jpg图表.这些图表由一些像这样的jpg呈现:

在此输入图像描述

我以这种方式将其插入到我的PDF表中:

iTextSharp.text.Image img = null;

..........................................
..........................................
..........................................
 if (currentVuln.UrgencyRating > 0)
                {
                    img = ChartHelper.GetPdfChartV2((int)currentVuln.UrgencyRating * 10, _folderImages);
                    vulnerabilityDetailsTable.AddCell(new PdfPCell(img) { Border = PdfPCell.RIGHT_BORDER, BorderColor = new BaseColor(79, 129, 189), BorderWidth = 1, Padding = 5, MinimumHeight = 30, PaddingTop = 10 });
                }
Run Code Online (Sandbox Code Playgroud)

这是GetPdfChartV2()方法的一部分,我在其中加载图表immage:

    public static iTextSharp.text.Image GetPdfChartV2(int percentage, string _folderImmages)
    {
        iTextSharp.text.Image chart = null;
        string folderImmages = _folderImmages;

        if (percentage == 0)
        {
            return null;
        }
        else if (percentage == 10)
        {
            chart = iTextSharp.text.Image.GetInstance(_folderImmages + "1.jpg");
        }

        else if (percentage == 20)
        {
            chart = iTextSharp.text.Image.GetInstance(_folderImmages + "2.jpg");
        }
        ....................................................
        ....................................................
        ....................................................
        else if (percentage == 100)
        {
            chart = iTextSharp.text.Image.GetInstance(_folderImmages + "10.jpg");
        }

        return chart;
    }

}
Run Code Online (Sandbox Code Playgroud)

问题是图表immage对我的PDF来说太大了,我得到了这个糟糕的结果:

在此输入图像描述

所以我有以下两个问题:

1)我可以将iTextSharp.text.Image大小调整为我的代码或让我用图像编辑器吗?如果有可能我可以在哪里做?当我通过以下行将immage加载到GetPdfChartV2()时:

chart = iTextSharp.text.Image.GetInstance(_folderImmages + "1.jpg");
Run Code Online (Sandbox Code Playgroud)

或者当我将immage放入我的PDF表格单元格时:

vulnerabilityDetailsTable.AddCell(new PdfPCell(img) { Border = PdfPCell.RIGHT_BORDER, BorderColor = new BaseColor(79, 129, 189), BorderWidth = 1, Padding = 5, MinimumHeight = 30, PaddingTop = 10 });
Run Code Online (Sandbox Code Playgroud)

你能帮我解决这个问题吗?

2)为什么当我在Windows Photo Viewer上看到上一张图表时(100%的大小)我看到它小得多或者在StackOverflow页面中?

Bru*_*gie 5

添加Image到a 有不同的策略PdfPCell.这些策略将在第4章介绍我的书,和X战警例子演示了所有可能的选项.如果你不理解Java,你会发现第4章的例子C#端口这里.

你正在使用这个:

// we wrap he image in a PdfPCell
PdfPCell cell = new PdfPCell(img[0]);
table.AddCell(cell);
Run Code Online (Sandbox Code Playgroud)

如文档所述,此选项不会缩放图像(这是您想要的).如果要缩放图像,可以使用:

// we wrap the image in a PdfPCell and let iText scale it
cell = new PdfPCell(img[1], true);
table.AddCell(cell);
Run Code Online (Sandbox Code Playgroud)

通过添加布尔参数true,您可以要求iText缩放图像.

另一种选择是这样使用addCell():

// we add the image with addCell()
table.AddCell(img[2]);
Run Code Online (Sandbox Code Playgroud)

这也将缩放图像,但使用默认单元格的属性.如果不更改这些属性,则会有2个用户单位的填充.

您还可以选择使用复合模式:

cell = new PdfPCell();
cell.AddElement(img[3]);
table.AddCell(cell);
Run Code Online (Sandbox Code Playgroud)

这将确保缩放图像以填充100%的单元格宽度,除非您更改图像的宽度百分比,例如:

img[3].WidthPercentage = 50;
Run Code Online (Sandbox Code Playgroud)

此行将确保图像的宽度是单元格可用宽度的50%.

最后,您可以在将图像添加到单元格之前对其进行缩放,如您自己的(不完整的)答案中所述.

在5种可能的选项中,您选择了不缩放图像的单一选项;-)