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页面中?
添加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种可能的选项中,您选择了不缩放图像的单一选项;-)
| 归档时间: |
|
| 查看次数: |
17025 次 |
| 最近记录: |