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

我是iTextiTextSharpiText的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 }); } 

这是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来说太大了,我得到了这个糟糕的结果:

在此处输入图像描述

所以我有以下两个问题:

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页面中?

Image添加到PdfPCell有不同的策略。 这些策略在我的书的第4章中有解释, XMen示例演示了所有可能的选项。 如果你不了解Java,你可以在这里找到第4章示例的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种可能的选项中,您选择了不缩放图像的单一选项;-)

以这种方式解决了我自己:

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

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