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

时间:2014-05-12 10:49:38

标签: c# pdf pdf-generation itextsharp itext

我是 iText iTextSharp (iText的C#版本)的新手,我遇到以下问题。

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

enter image description here

我以这种方式将其插入到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 });
                }

这是 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;
    }

}

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

enter image description here

所以我有以下两个问题:

1)我可以将 iTextSharp.text.Image 大小调整到我的代码中,还是让我用图像编辑器来完成? 如果有可能我可以在哪里做?当我将immage加载到 GetPdfChartV2()时,行为:

chart = iTextSharp.text.Image.GetInstance(_folderImmages + "1.jpg");

或当我将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 });

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

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

3 个答案:

答案 0 :(得分:5)

Image添加到PdfPCell有不同的策略。这些策略在my book的第4章中进行了解释,XMen example演示了所有可能的选项。如果您不了解Java,您将找到第4章here示例的C#端口。

你正在使用这个:

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

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

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

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

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

// we add the image with addCell()
table.AddCell(img[2]);

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

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

cell = new PdfPCell();
cell.AddElement(img[3]);
table.AddCell(cell);

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

img[3].WidthPercentage = 50;

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

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

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

答案 1 :(得分:1)

以这种方式自己解决:

chart = iTextSharp.text.Image.GetInstance(_folderImmages + "1.jpg");
chart .ScalePercent(24f);

这里更好的解释:http://www.mikesdotnetting.com/Article/87/iTextSharp-Working-with-images

答案 2 :(得分:0)

在Java中,我可以使用这种方法来调整单元格中图像的大小:

    Image image = Image.getInstance(fileLocation);
    image.scalePercent((float)7.5);
    PdfPCell imageCell = new PdfPCell(image,false);