Как экспортировать данные в предыдущий созданный файл PDF, указав страницу для этого?(или создание новой страницы) - PullRequest
1 голос
/ 03 января 2012

У меня есть следующая задача: на основе набора данных я должен заполнить поля формы файла PDF, используя itextsharp, а также экспортировать указанный набор данных в «формат» таблицы, чтобы он мог перейти на вторую страницу указанный файл PDF.

Вот файл PDF с полями формы http://i43.tinypic.com/al4raq.png

Таблица будет идти под заголовком на второй странице, которая ориентирована на ландшафт. Но я также принимаю решение / подсказку, которая включает удаление второй страницы и создание-запись одной стороны кода.

Это, безусловно, работа, которую я сделал

class PDFFormFiller
{
    public void FillForm(UInt32 tipo, string campo, string numeroConsultas, DataSet ds)
    {
        // I use this on another specific case, dont bother with it.
        string data = System.DateTime.Today.ToLongDateString();

        switch (tipo)
        {

        case 1: // Medical report
            {
                // Get the previous created pdf file...
                string pdfTemplate = Application.StartupPath + "\\Templates\\Template Medico.pdf";
                // ...and generate a new one with the filled forms and the table
                string newFile = Application.StartupPath + "\\Relatórios\\Relatório Médico_" + data + ".pdf";

                PdfReader pdfReader = new PdfReader(pdfTemplate);
                PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(newFile, FileMode.Create));

                AcroFields pdfFormFields = pdfStamper.AcroFields;

                // Form fields filling by the arguments up there, dont bother with'em
                pdfFormFields.SetField("data", data);
                pdfFormFields.SetField("medico_nome", campo);
                pdfFormFields.SetField("numero_consultas", numeroConsultas);

                // Table build
                int numColumns = ds.Tables[0].Columns.Count;
                PdfPTable datatable = new PdfPTable(numColumns);
                datatable.DefaultCell.Padding = 0;
                datatable.WidthPercentage = 100; // percentage
                datatable.DefaultCell.HorizontalAlignment = Element.ALIGN_LEFT;
                float[] columnWidths = {20, 20, 20, 20, 40, 20, 20, 20, 20};
                datatable.SetWidths(columnWidths);

                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
                    for (int j = 0; j < ds.Tables[0].Columns.Count; j++)
                    {
                        datatable.DefaultCell.BackgroundColor = iTextSharp.text.BaseColor.WHITE;
                        datatable.DefaultCell.HorizontalAlignment = iTextSharp.text.Element.ALIGN_LEFT;
                        Phrase phrase = new Phrase(ds.Tables[0].Rows[i][j].ToString(), FontFactory.GetFont("Verdana", 9));
                        datatable.AddCell(phrase);
                    }
                }

                // The table code goes here

                // Final Message
                string relatorio = ("Relatório para o médico" + pdfFormFields.GetField("medico_nome") + "gerado com sucesso na pasta Relatórios");
                MessageBox.Show(relatorio);

                // Form flattening set to true to avoid
                // further edition of the form fields on the file created
                pdfStamper.FormFlattening = true;

                // Clode the pdf stamper
                pdfStamper.Close();
                break;
            }

1 Ответ

2 голосов
/ 03 января 2012

Дамм, решено двумя строчками ....

                        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                        {
                            for (int j = 0; j < ds.Tables[0].Columns.Count; j++)
                            {
                                datatable.DefaultCell.BackgroundColor = iTextSharp.text.BaseColor.WHITE;
                                datatable.DefaultCell.HorizontalAlignment = iTextSharp.text.Element.ALIGN_LEFT;
                                Phrase phrase = new Phrase(ds.Tables[0].Rows[i][j].ToString(), FontFactory.GetFont("Verdana", 9));
                                datatable.AddCell(phrase);
                            }
                        }

+                        PdfContentByte content = pdfStamper.GetUnderContent(2);

+                        datatable.WriteSelectedRows(0, -1, 70.0f, 400.0f, content);

Не скажу, что мне пришлось обыскать весь интернет, чтобы разобраться в этом ...

...