Добавить таблицу в существующий PDF в нижней части страницы - PullRequest
1 голос
/ 21 января 2020

Я работаю над процессом утверждения, когда некоторые утверждающие утверждают документ. Количество утверждающих лиц варьируется в каждом запросе на утверждение.

Я хочу поместить таблицу в утверждаемый документ. В таблице должны быть столбцы с изображениями подписей каждого утверждающего.

Я успешно отредактировал документ с использованием ItextSharp и добавил текст Water Mark, как описано в this . Сейчас я пытаюсь поместить таблицу в PDF-документ с помощью PDFStamper, но таблица не отображается при печати документа.

Вот мой код:

protected void btn_Print_Click(object sender, EventArgs e)
        {

            DataTable dt_comments = obj_comments.GetRequestComments(ViewState["DocumentNumber"].ToString());                  
            SPFile pdfOriginalFile = obj_RequestDocuments.GetFile(ViewState["DocumentNumber"].ToString());   

        //get byte[] of uploaded file
        byte[] contentPdfOriginalFile = pdfOriginalFile.OpenBinary();

        //Initialize PdfReader
        var reader = new PdfReader(new RandomAccessFileOrArray(contentPdfOriginalFile), null);

        //We will write output file into memory. You can use temp file of course.
        var ms = new MemoryStream();

        //Initialize PdfStamper
        var stamper = new PdfStamper(reader, ms);

        //Tell stamper not to close stream when stamper itself is being closed
        stamper.Writer.CloseStream = false;

        // Getting total number of pages of the Existing Document
            int pageCount = reader.NumberOfPages;

            // Create New Layer for Watermark
            PdfLayer layer = new PdfLayer("WatermarkLayer", stamper.Writer);
            //************CREATE TABLE START***********************
            PdfPTable table=new PdfPTable(dt_comments.Rows.Count);   

                    table.WidthPercentage = 100;
                    table.HorizontalAlignment = Element.ALIGN_LEFT;
                    table.SetTotalWidth(ColumnWidths(dt_comments.Rows.Count,200f));

                    for (var i = 0; i < dt_comments.Rows.Count; i++)
                    {

                        var image = dt_comments.Rows[i];
                        try
                        {
                            PdfPCell cell = new PdfPCell();
                            cell.BorderWidth = 15;
                            cell.FixedHeight = 15;
                            cell.VerticalAlignment = Element.ALIGN_MIDDLE;                                  
                            Paragraph p = new Paragraph();

                            float offset = 0;


                            StringBuilder sb = new StringBuilder();
                            sb.Append(dt_comments.Rows[i]["Action"] + " By:");
                            sb.Append(dt_comments.Rows[i]["CommentBy"].ToString());
                            sb.Append(" On " + dt_comments.Rows[i]["Created"].ToString());
                            p.Add(new Chunk(sb.ToString()));
                            cell.AddElement(p);
                            table.AddCell(cell);
                        }
                        catch (Exception ex)
                        {
                            //Ignore
                        } 
                    }

            //**************CREATE TABLE ENDED************************
            // Loop through each Page
            for (int i = 1; i <= pageCount; i++)
            {
                // Getting the Page Size
                Rectangle rect = reader.GetPageSize(i);

                // Get the ContentByte object
                PdfContentByte cb = stamper.GetOverContent(i);

                // Tell the cb that the next commands should be "bound" to this new layer
                cb.BeginLayer(layer);
                cb.SetFontAndSize(BaseFont.CreateFont(
                  BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED), 8);

                PdfGState gState = new PdfGState();

                gState.FillOpacity = 0.3f;
                cb.SetGState(gState);

                cb.SetColorFill(BaseColor.BLACK);
                cb.BeginText();
                 float width = rect.Width;
                float height = rect.Height;


                float HorizontalValue =width/6 ;
                float verticalValue =height/6;


                //for (int j = 0; j < dt_comments.Rows.Count; j++)
                //{
                //    StringBuilder sb = new StringBuilder();
                //    sb.Append(dt_comments.Rows[j]["Action"] + " By:");
                //    sb.Append(dt_comments.Rows[j]["CommentBy"].ToString());
                //    sb.Append(" On " + dt_comments.Rows[j]["Created"].ToString());

                //    cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, sb.ToString(), HorizontalValue, verticalValue, 0f);
                //    verticalValue = verticalValue - 10;//to change the line come down
                //} 
                //cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "Confidential", rect.Width / 2, rect.Height / 2, 45f);

                PdfTemplate tableTemplate = cb.CreateTemplate(1500, 1300);
                table.WriteSelectedRows(0, table.Rows.Count, 400, 400, tableTemplate);


                cb.EndText();

                // Close the layer
                cb.EndLayer();


            }



        //Close stamper, readed
        stamper.Close();
        reader.Close();
        //obj_RequestDocuments.UploadFile(pdfOriginalFile.Name, ms.ToArray(), "1234");
        string[] stringParts = pdfOriginalFile.Name.Split(new char[] { '.' });
        string strType = stringParts[1];
        Page.Response.Clear();
        Page.Response.ClearContent();
        Page.Response.ClearHeaders();
        Page.Response.AddHeader("content-disposition", "attachment; filename=" + pdfOriginalFile.Name);
        //Set the content type as file extension type
        Page.Response.ContentType = strType;
        //Write the file content
        Page.Response.BinaryWrite(ms.ToArray());
        Page.Response.End();

        //Flush memory stream and set it position to start
        ms.Flush();
        ms.Position = 0;

        }

Обратите внимание, что в настоящее время я я пытаюсь просто добавить имя утверждающего в каждый столбец, следующим шагом будет добавление изображения подписи утверждающего в каждом столбце

Когда я добавлял простой текст в документ, это было успешно, но я не могу добавить Таблица в документе и озадачен фиксированием ширины. Вопросы высоты, так как размер документа может быть А3 или А4. В настоящее время я тестирую его на A3

Я прошел this

ОБНОВЛЕНИЕ:

Я изменил следующий метод вызовите, теперь таблица видна, но в заливке черного цвета, ничего не видно:

table.WriteSelectedRows(0, table.Rows.Count, 400, 400, cb);

Я также поместил белый вместо черного в следующей строке:

cb.SetColorFill(BaseColor.WHITE);

Кроме того, при открытии файла PDF, созданного из кода выше, возникает ошибка:

Ниже приведен снимок экрана:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...