iTextSharp: Flattening a field in table cell shifts text upward

醉酒当歌 提交于 2019-12-11 09:31:19

问题


I'm having an issue with flattening fields that were generated in a table cell. I've created a sample project to illustrate the issue.

private static void dummyFunction2()
    {
        // Create a PDF with a TextBox in a table cell
        //Get the font ready
        BaseFont bfHelvetica = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1250, false);
        var helvetica12 = new Font(bfHelvetica, 12, Font.NORMAL, BaseColor.BLACK);

        //Create the document and filestream
        var doc = new Document(PageSize.LETTER, 18f, 18f, 18f, 18f);
        var fs = new FileStream("TextBoxInTableCell.pdf", FileMode.Create);
        PdfWriter writer = PdfWriter.GetInstance(doc, fs);

        //Create the table
        doc.Open();
        var myTable = new PdfPTable(1);
        myTable.TotalWidth = 568f;
        myTable.LockedWidth = true;
        myTable.HorizontalAlignment = 0;

        //Create the textfield that will sit on a cell in the table
        var tf = new TextField(writer, new Rectangle(67, 585, 140, 800), "cellTextBox");
        tf.Text = "test";
        //Create the table cell
        var tbCell = new PdfPCell(new Phrase(" ", helvetica12));
        //Use fieldpositioningevents to make the field appear on top of the cell
        var events =
            new FieldPositioningEvents(writer, tf.GetTextField());
        tbCell.CellEvent = events;
        //Add the cell to the table
        myTable.AddCell(tbCell);
        PdfContentByte cb = writer.DirectContent;
        //Write out the table to the middle of the document
        myTable.WriteSelectedRows(0, -1, 0, -1, 0, 400, cb);
        doc.Close();
        fs.Close();

        //Open back up the document so that we can set GenerateAppearances to false.
        //This solution proposed and accepted at https://stackoverflow.com/questions/25169342/itextsharp-fields-generated-in-a-table-not-shown-in-adobe-reader
        var reader2 = new PdfReader("TextBoxInTableCell.pdf");
        var stamper2 = new PdfStamper(reader2, new FileStream("tempdoc.pdf", FileMode.Create));
        stamper2.AcroFields.GenerateAppearances = false;
        stamper2.Close();
        reader2.Close();
        Process.Start("tempdoc.pdf");

        //Open the pdf back up
        var reader = new PdfReader("tempdoc.pdf");
        var stamper = new PdfStamper(reader, new FileStream("tempdoc.pdf" + "1.pdf", FileMode.Create));

        //Flatten the form
        stamper.FormFlattening = true;

        //Close everything
        stamper.Close();
        reader.Close();
        Process.Start("tempdoc.pdf" + "1.pdf");
    }

This unflattened pdf that is generated looks like

. As you can see, the field is where it should be. The flattened pdf, however, looks like

. The field's text has been shifted a noticeable amount.

I've posted the flattened pdf so that someone can check out the pdf language if needed.

I know this is sort of a niche issue but hopefully someone can help me out.

EDIT1: In response to Bruno's comment, I'm using iTextsharp 5.5.2 downloaded from Nuget and the unflattened pdf can be found here.

EDIT2: Updated SO link to point to the correct question. For reference here are my two previous questions that relate to this problem: First, Second


回答1:


Java version of iText does not contain this problem. It's a Java -> C# porting issue. We'll take care of that.



来源:https://stackoverflow.com/questions/25394687/itextsharp-flattening-a-field-in-table-cell-shifts-text-upward

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