使用iTextSharp,WPF的LetterHead Logo,Title和Slogan Design

时间:2018-01-31 04:19:03

标签: c# wpf itext

enter image description here

如何使用iTextSharp实现上述结果?

  1. 标识应适合单元格,单元格宽度和高度应固定。

  2. 公司名称应该从左到右开始,并且有理由用NoWrap填充整个单元格。如果公司名称长于字体大小变小或字符之间的空间变小。

  3. 标语对齐应位于中心,应使用左右填充。口号应该留在中心。字体大小并不重要。

  4. 最终结果如下所示 enter image description here

    该文字的结果应该像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栏中,我将添加一些其他信息。

1 个答案:

答案 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;

注意:我还在等待最佳答案