ITextSharp,定位文本

发布于 2024-12-11 00:12:02 字数 1177 浏览 0 评论 0原文

我们使用 ITextSharp 的原因我不明白,而且我们还没有这本书,而且我有一个烦人的问题,希望得到帮助。

我正在使用页脚,但无法让它按照我想要的方式对齐。

我的函数接受一个字符串列表,但通常我想要每行 4 个字符串。它不像 itextsharp 可以处理带有换行符的字符串,这就是列表的原因。

现在这对我来说位置不正确,第一个字符串看起来不错,但是第二个字符串有点长,它的一半在文档之外,第三个字符串也是如此,第四个字符串甚至不可见,即使有 1 厘米的空间左边。

感谢您的帮助!

public PdfTemplate AddPageText(IList<string> stringList, PdfWriter writer) 
{
    var cb = writer.DirectContent;
    PdfTemplate footerTemplate = cb.CreateTemplate(450, 120); //55);

    footerTemplate.BeginText();
    BaseFont bf2 = BaseFont.CreateFont(BaseFont.TIMES_ITALIC, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED);
    footerTemplate.SetFontAndSize(bf2, 9);
    footerTemplate.SetColorStroke(BaseColor.DARK_GRAY);
    footerTemplate.SetColorFill(BaseColor.GRAY);

    footerTemplate.SetLineWidth(3);
    footerTemplate.LineTo(50, footerTemplate.YTLM);

    int y = 10;
    foreach (string text in stringList)
    {
        float widthoftext = 500.0f - bf2.GetWidthPoint(text, 9);
        footerTemplate.ShowTextAligned(PdfContentByte.ALIGN_RIGHT, text, widthoftext, 50 - y, 0);
        y += y;
    }
    footerTemplate.EndText();

    return footerTemplate;

}

We're using ITextSharp for reasons I do not understand and we dont have the book yet and I have an annoying problem that I'd appreciate help with.

I'm working with a footer and I can not get it to align as I want it.

The function I have takes a list of strings, but it's generally 4 strings I want on a row each. It does not seam like itextsharp can handle strings with linebreaks so that's the reason for the list.

Now this does not position correctly for me, the first string looks ok, but then the second string is a bit longer and it's half outside the document as is the third string and the 4th is not even visible even thou there is 1 cm of space left.

Thanks for help!

public PdfTemplate AddPageText(IList<string> stringList, PdfWriter writer) 
{
    var cb = writer.DirectContent;
    PdfTemplate footerTemplate = cb.CreateTemplate(450, 120); //55);

    footerTemplate.BeginText();
    BaseFont bf2 = BaseFont.CreateFont(BaseFont.TIMES_ITALIC, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED);
    footerTemplate.SetFontAndSize(bf2, 9);
    footerTemplate.SetColorStroke(BaseColor.DARK_GRAY);
    footerTemplate.SetColorFill(BaseColor.GRAY);

    footerTemplate.SetLineWidth(3);
    footerTemplate.LineTo(50, footerTemplate.YTLM);

    int y = 10;
    foreach (string text in stringList)
    {
        float widthoftext = 500.0f - bf2.GetWidthPoint(text, 9);
        footerTemplate.ShowTextAligned(PdfContentByte.ALIGN_RIGHT, text, widthoftext, 50 - y, 0);
        y += y;
    }
    footerTemplate.EndText();

    return footerTemplate;

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

等你爱我 2024-12-18 00:12:02

如果您正在进行字符串放置并使用 DirectContent,那么您应对内容负责。在这种情况下,您将需要计算字符串矩形并相应地换行。

不过,我建议改用带有文本单元格的表格。表格包装文本并处理您正在处理的一些问题。

If you are doing string placement and using DirectContent then you are responsible for the content. In this case you will need to calculate the string rectangles and wrap accordingly.

I would suggest, however, moving to using a table with cells for the text. Tables wrap text and handle some of the issues you are dealing with.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文