我是 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 });
}
这是 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页面中?
答案 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);