如何使用iTextSharp实现上述结果?
标识应适合单元格,单元格宽度和高度应固定。
公司名称应该从左到右开始,并且有理由用NoWrap填充整个单元格。如果公司名称长于字体大小变小或字符之间的空间变小。
标语对齐应位于中心,应使用左右填充。口号应该留在中心。字体大小并不重要。
该文字的结果应该像wpf中的Viewbox一样
抱歉英语不好。
请帮助。 完整答案将不胜感激
感谢。
我的方法:
我创建了包含3列的表
PdfPTable HeaderTable = new PdfPTable(3);
float[] widths = new float[] { .35f, 1.5f, 2.5f };
HeaderTable.WidthPercentage = 100;
第1列包含徽标
iTextSharp.text.Image myImage = iTextSharp.text.Image.GetInstance(PdfSettingProperties.LogoPath);
PdfPCell logoCell = new PdfPCell(myImage, true);
true表示徽标适合单元格
第二列将有2行。第一行是公司名称,第二行是口号。 在第3栏中,我将添加一些其他信息。
答案 0 :(得分:0)
我解决了我的问题略有不同。 我的问题是公司名称应该适合没有换行的单元格,文本应该是合理的。与Wpf中的Viewbox相同。
由于我正在使用wpf,我做了什么,我在Grid中设计了Letter Head,如下所示并将其转换为图像
<Grid x:Name="LetterHeadGrid" VerticalAlignment="Center">
<StackPanel>
<StackPanel
HorizontalAlignment="Left"
VerticalAlignment="Center"
Orientation="Horizontal">
<Border
Width="40"
Height="40"
Padding="2"
BorderThickness="0">
<Image Source="/Resources/logo.png" />
</Border>
<StackPanel Grid.Column="1">
<Viewbox
Width="100"
MinHeight="15"
MaxHeight="40"
Margin="0,0,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Stretch="Fill">
<TextBlock
x:Name="titleBlock"
VerticalAlignment="Center"
FontFamily="{StaticResource LatoBold}"
Text="HCSTP" />
</Viewbox>
</StackPanel>
</StackPanel>
<Border
x:Name="border"
Margin="08,02,0,0"
Padding="0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
BorderThickness="0,.7,0,0">
<Border.BorderBrush>
<SolidColorBrush Opacity="0.3" Color="Black" />
</Border.BorderBrush>
<Viewbox
Width="132"
MinHeight="10"
MaxHeight="13"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Stretch="Fill">
<TextBlock
x:Name="slognBlock"
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontFamily="{StaticResource LatoRegular}"
Text="Passion To Design Future"
TextAlignment="Center" />
</Viewbox>
</Border>
</StackPanel>
</Grid>
c#,背后的代码
UIElement element = LetterHeadGrid as UIElement;
Size theTargetSize = new Size(260, 72);
element.Measure(new System.Windows.Size(double.PositiveInfinity, double.PositiveInfinity));
element.Arrange(new Rect(theTargetSize));
// to affect the changes in the UI, you must call this method at the end to apply the new changes
element.UpdateLayout();
double dpiScale = 600.0 / 96;
double dpiX = 600.0;
double dpiY = 600.0;
RenderTargetBitmap rtb = new RenderTargetBitmap(Convert.ToInt32((theTargetSize.Width) * dpiScale), Convert.ToInt32((theTargetSize.Height) * dpiScale), dpiX, dpiY, PixelFormats.Pbgra32);
element.Measure(theTargetSize);
element.Arrange(new Rect(theTargetSize));
rtb.Render(element);
PngBitmapEncoder png = new PngBitmapEncoder();
png.Frames.Add(BitmapFrame.Create(rtb));
string filePath = "LetterHead.png";
if (File.Exists(filePath))
{
File.Delete(filePath);
using (Stream stm = File.Create(filePath))
{
png.Save(stm);
}
}
else
{
using (Stream stm = File.Create(filePath))
{
png.Save(stm);
}
}
并添加单元格的图像路径
iTextSharp.text.Image myImage = iTextSharp.text.Image.GetInstance("LetterHead.png");
PdfPCell logoCell = new PdfPCell(myImage, true) {Padding = 2f};
logoCell.Border = 0;
logoCell.MinimumHeight = 17f;
注意:我还在等待最佳答案