Mixing text and images causes incorrect vertical positioning

夙愿已清 提交于 2019-12-11 20:21:38

问题


Using iTextSharp version 5.5.8 (same bug existed in 5.5.7), there's an unpleasant bug when you add images to Chapters and Sections - the images and the section headings start out OK but quickly become offset relative to each other.

The PDF generated from the following code starts out correctly, it says "Section 1" and below it is the image. The next section ("Section 2") has a little of the image overlapping the section text, the next section is even worse, etc. I think it's the text that's mal-positioned, not the image.

Is this a known iTextSharp bug?

    static Document m_doc = null;
    static BaseFont m_helvetica = null;
    static Font m_font = null;
    static PdfWriter m_writer = null;

    static Image m_image = null;

    static void Main(string[] args)
    {
        m_doc = new Document(PageSize.LETTER);

        m_helvetica = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
        m_font = new Font(m_helvetica, 10.0f);

        m_writer = PdfWriter.GetInstance(m_doc, new FileStream("Output.pdf", FileMode.Create));

        m_writer.StrictImageSequence = true;

        m_doc.Open();

        m_doc.Add(new Chunk("Created by iTextSharp version " + new iTextSharp.text.Version().GetVersion, m_font));

        Chapter chapter = new Chapter("Chapter 1", 1);
        chapter.TriggerNewPage = false;

        if (m_image == null)
        {
            m_image = Image.GetInstance(new Uri("https://pbs.twimg.com/profile_images/2002307628/Captura_de_pantalla_2012-03-17_a_la_s__22.14.48.png"));
            m_image.ScaleAbsolute(100, 100);
        }

        for (int i = 0; i < 5; i++)
        {
            Section section = chapter.AddSection(18, "Section " + (i + 1));
            section.Add(new Chunk("   ", m_font));
            section.Add(m_image);
        }

        m_doc.Add(chapter);

        m_doc.Close();
    }

回答1:


From the documentation for the Java version:

A Section is a part of a Document containing other Sections, Paragraphs, List and/or Tables.

Further looking at the Add() method in the C# source we see:

Adds a Paragraph, List, Table or another Section

Basically, instead of a Chunk use a Paragraph. So instead of this

section.Add(new Chunk("   ", m_font));

Use this:

section.Add(new Paragraph(new Chunk("   ", m_font)));

Or even just this:

section.Add(new Paragraph("   ", m_font));


来源:https://stackoverflow.com/questions/34275946/mixing-text-and-images-causes-incorrect-vertical-positioning

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!