【问题标题】:Extra space inserted on new pages when creating PDFs with iTextSharp使用 iTextSharp 创建 PDF 时在新页面上插入的额外空间
【发布时间】:2010-12-13 15:17:18
【问题描述】:

我正在使用 iTextSharp 5.0.5 创建动态 PDF (asp.net c#),但在创建新页面时插入了额外的空间时遇到了问题。第一页看起来不错,但在任何其他页面上,额外的空间都会出现在顶部。

我制作了一个迷你示例,它为列表中的每篇文章插入一个带有徽标和标题的新页面。如果我只插入徽标或只插入标题,它可以正常工作,但如果我尝试插入两者,则会有来自某处的额外空间。有人知道我做错了什么吗?

public static void CreatePDF(List<Item> Articles)
{
    Document document = new Document(PageSize.A4, 35, 35, 35, 35);
    MemoryStream memoryStream = new MemoryStream();
    PdfWriter writer = PdfWriter.GetInstance(document, memoryStream);

    document.Open();

    for (int i = 0; i < Articles.Count; i++)
    {
        if (i > 0)
        {
            document.NewPage();
        }

        Image logo = Image.GetInstance(@"C:\logo.gif");
        document.Add(logo);

        Paragraph title = new Paragraph("test title", new Font(Font.FontFamily.HELVETICA, 20, Font.NORMAL, CMYKColor.BLACK));
        document.Add(title);
    }

    document.Close();

    SendPDFResponse(memoryStream, "myfile.pdf");
}

谢谢,

安妮

【问题讨论】:

  • 使用这个库一定很难......我过去也有类似的需求 - 开始考虑 iTextSharp,最终使用了商业的 HTML 到 PDF 工具(因为它更快而且更容易,而且很多都取得了很好的效果)。

标签: c# .net pdf itextsharp


【解决方案1】:

第 1 页后面的页面没有多余的空间。问题是第 1 页的空间较少。 不,这不是玩笑。问题是由“前导”(即:两行之间的空格)引起的。前导的初始值为 0。当您向文档添加内容时,此值会更改为不同于 0 的值。

您在整个文档中使用的前导是什么?您应该使用 PdfWriter 中的 setInitialLeading() 方法将其设置为初始前导。

【讨论】:

  • 我没有设置它,所以它使用字体大小的 150% 的默认值(在上面的例子中是 20,所以前导是 30)。情况可能并非总是如此,但我会将初始前导数设置为 30,并希望它看起来不错! :) 感谢您的帮助。
【解决方案2】:

这听起来像是一个错误。我怀疑布局的一些相对较新的方面没有在页面之间正确重置。

您介意将其交叉发布到itext-questions mailing list吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 2016-05-28
    • 1970-01-01
    相关资源
    最近更新 更多