缺少使用ItextSharp添加到PDF的表

时间:2018-02-01 10:45:20

标签: c# itext

我正在搜索有关ItextSharp的已知问题和答案,并使用此库将表格添加到PDF,但没有人有类似的问题。

这是我的代码:

 foreach (System.Collections.DictionaryEntry item in fields.Fields)
            {
                    AcroFields.Item acroFieldItem = fields.GetFieldItem(FieldName);
                    PdfDictionary formFieldsValues = (PdfDictionary)acroFieldItem.values[0];

                    string defaultFieldValue = "";
                    if (formFieldsValues.Contains(PdfName.DV))
                    {
                        defaultFieldValue = formFieldsValues.Get(PdfName.DV).ToString();
                    }

                    int startIndex = defaultFieldValue.IndexOf("<%", 0);

                    if (startIndex != -1)
                    {

                        string FieldNameValue = TemplatesParser.Parse(defaultFieldValue, fieldDataSet);
                        string tableName = TemplatesParser.GetElementName(defaultFieldValue).Replace(":::", "");

                        if (tableNames.Contains(tableName))
                        {
                            foreach (int i in tableIndexes)
                            {
                                //var dt = new DataTable();
                               var expression = "ShowInTable = '" + tableName +"'";
                               var rows = m_formFieldDataSet.Tables[i].Select(expression);

                                if (rows.Any())
                                {

                                var dt = rows.CopyToDataTable();

                                   var firstParam = fields.GetFieldPositions(FieldName);

                                    var a = (firstParam[3] - firstParam[1]);
                                    Logger.Debug(string.Format("creating table with name {0}, width {1}", tableName, a.ToString("#,#####")));
                                    var table = CreateTable(tableName, dt,(firstParam[3]-firstParam[1]));
                                    Logger.Debug(string.Format("created table with width {0}", table.TotalWidth.ToString("#,#####")));


                                    var canvase = stamper.GetOverContent(Convert.ToInt32(firstParam[0]));
                                    table.WriteSelectedRows(0, -1, firstParam[1], firstParam[4], canvase);
                                    fields.SetField(FieldName, canvase.ToString());
                                }
                            }

                        }
                        else
                        {
                            fields.SetField(FieldName, FieldNameValue);
                        }
                    }
                }

这是填补表格的方法:

    private PdfPTable CreateTable( string tableName, DataTable dataTable, float elementWidth)
    {
        int colno = dataTable.Columns.Count - 1;
        int colNameIndex = dataTable.Columns.IndexOf("ShowInTable");
        int rowNo = dataTable.Rows.Count;
        float singleElementWidth = elementWidth / colno;
        float[] elementsWidths = new float[colno];

        for (var c = 0; c < colno; c++)
        {
            elementsWidths[c] = singleElementWidth;
        }


        PdfPTable table = new PdfPTable(colno);
        table.SetTotalWidth(elementsWidths);
        PdfPCell cell = new PdfPCell(new Phrase(tableName));
        cell.Colspan = colno;
        table.AddCell(cell);

        for (var col = 0; col <= colno; col++)
        {
            if (col != colNameIndex)
            {
                table.AddCell(dataTable.Columns[col].ColumnName);
            }
        }


        for (var r = 0; r <= rowNo -1; r++)
            {
                for (var c =0; c <= colno; c++)
                {
                    if (c != colNameIndex)
                    {
                        table.AddCell(dataTable.Rows[r].ItemArray[c].ToString());
                    }

                }
            }

         return table;
    }

使用此代码进行单元测试时,一切都按预期工作,生成表格并以PDF格式显示。将其用作应用程序的一部分时,表格不可见。

注意,只有一次我设法在应用程序中生成的PDF中创建可见表,但它使用不同的PDF模板和不同的数据源。

我已经尝试过检查那些问题/答案 WriteSelectedRows doesnt show a table on PDF
How do I add table to existing pdf using iTextSharp 和width确实不同于0,并且GetOverContent参数设置为正确的页面。 是否有一些特定的PDF模板设置我需要应用才能正确生成表格?

提前致谢。

0 个答案:

没有答案