web-dev-qa-db-fra.com

Ajouter une page à PDF utilisant iTextSharp

Je voudrais ajouter une page à un document PDF PDF contenant du texte simple.

J'ai essayé le code suivant que j'ai trouvé sur Internet, mais pour l'instant je ne l'ai pas fait fonctionner:

PdfReader reader = new PdfReader("1.pdf");
Document document = new Document(reader.GetPageSize(1));
PdfCopy copier = new PdfCopy(doc, new FileStream("2.pdf", FileMode.Create));

for (int pageCounter = 1; pageCounter < reader.NumberOfPages + 1; pageCounter++)
{
    //byte[] page = reader.GetPageContent(pageCounter);
    copier.AddPage(copier.GetImportedPage(reader, pageCounter));
}

copier.NewPage();
copier.Add(new Paragraph("This is added text"));

document.Close();
reader.Close();

S'il vous plaît, faites-moi savoir comment procéder correctement?

13
Ahmad Hajou
    private static string AddCommentsToFile(string fileName, string userComments)
    {
        string outputFileName = Path.GetTempFileName();
        //Step 1: Create a Docuement-Object
        Document document = new Document();
        try
        {
            //Step 2: we create a writer that listens to the document
            PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outputFileName, FileMode.Create));

            //Step 3: Open the document
            document.Open();

            PdfContentByte cb = writer.DirectContent;

            //The current file path
            string filename = fileName;

            // we create a reader for the document
            PdfReader reader = new PdfReader(filename);

            for (int pageNumber = 1; pageNumber < reader.NumberOfPages + 1; pageNumber++)
            {
                document.SetPageSize(reader.GetPageSizeWithRotation(1));
                document.NewPage();

                //Insert to Destination on the first page
                if (pageNumber == 1)
                {
                    Chunk fileRef = new Chunk(" ");
                    fileRef.SetLocalDestination(filename);
                    document.Add(fileRef);
                }

                PdfImportedPage page = writer.GetImportedPage(reader, pageNumber);
                int rotation = reader.GetPageRotation(pageNumber);
                if (rotation == 90 || rotation == 270)
                {
                    cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(pageNumber).Height);
                }
                else
                {
                    cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                }
            }

            // Add a new page to the pdf file
            document.NewPage();

            Paragraph paragraph = new Paragraph();
            Font titleFont = new Font(iTextSharp.text.Font.FontFamily.HELVETICA
                                      , 15
                                      , iTextSharp.text.Font.BOLD
                                      , BaseColor.BLACK
                );
            Chunk titleChunk = new Chunk("Comments", titleFont);
            paragraph.Add(titleChunk);
            document.Add(paragraph);

            paragraph = new Paragraph();
            Font textFont = new Font(iTextSharp.text.Font.FontFamily.HELVETICA
                                     , 12
                                     , iTextSharp.text.Font.NORMAL
                                     , BaseColor.BLACK
                );
            Chunk textChunk = new Chunk(userComments, textFont);
            paragraph.Add(textChunk);

            document.Add(paragraph);
        }
        catch (Exception e)
        {
            throw e;
        }
        finally
        {
            document.Close();
        }
        return outputFileName;
    }
22
Ahmad Hajou

Essayez ce code: il ajoute une nouvelle page avec le pdf existant et ajoute du texte en filigrane à cette dernière page.

private string AddWaterMarkPageToFile(string fileName, string userComments)
        {
            string outputFileName = Path.GetTempFileName() + ".pdf";
            //Step 1: Create a Docuement-Object
            Document document = new Document();
            try
            {
                //Step 2: we create a writer that listens to the document
                PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outputFileName, FileMode.Create));

                //Step 3: Open the document
                document.Open();

                PdfContentByte cb = writer.DirectContent;

                //The current file path
                string filename = fileName;

                // we create a reader for the document
                PdfReader reader = new PdfReader(filename);

                for (int pageNumber = 1; pageNumber < reader.NumberOfPages + 1; pageNumber++)
                {
                    document.SetPageSize(reader.GetPageSizeWithRotation(1));
                    document.NewPage();

                    //Insert to Destination on the first page
                    if (pageNumber == 1)
                    {
                        Chunk fileRef = new Chunk(" ");
                        fileRef.SetLocalDestination(filename);
                        document.Add(fileRef);
                    }

                    PdfImportedPage page = writer.GetImportedPage(reader, pageNumber);
                    int rotation = reader.GetPageRotation(pageNumber);
                    if (rotation == 90 || rotation == 270)
                    {
                        cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(pageNumber).Height);
                    }
                    else
                    {
                        cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                    }
                }

                // Add a new page to the pdf file
                document.NewPage();

                float fontSize = 80;
                float xPosition = iTextSharp.text.PageSize.A4.Width / 2;
                float yPosition = (iTextSharp.text.PageSize.A4.Height - 140f) / 2;
                float angle = 45;

                PdfContentByte under = writer.DirectContentUnder;
                BaseFont baseFont = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED);
                under.BeginText();
                under.SetColorFill(BaseColor.LIGHT_GRAY);
                under.SetFontAndSize(baseFont, fontSize);
                under.ShowTextAligned(PdfContentByte.ALIGN_CENTER, userComments, xPosition, yPosition, angle);
                under.EndText();

            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                document.Close();
            }
            return outputFileName;
        }
4
Nalan Madheswaran

Vous ne pouvez pas utiliser PdfCopy pour ajouter des pages. Vous devrez créer un nouveau pdf et l'ajouter si vous devez le faire (PdfCopy est le meilleur pour fusionner le pdf).

J'ai également ajouté un exemple pour ajouter un pied de page:

PdfReader reader = new PdfReader("1.pdf");
Document document = new Document(reader.GetPageSize(1));
PdfCopy copier = new PdfCopy(doc, new FileStream("2.pdf", FileMode.Create));

for (int pageCounter = 1; pageCounter < reader.NumberOfPages + 1; pageCounter++)
{
    // get page
    PdfImportedPage page = copier.GetImportedPage(reader, pageCounter)
    // add content to imported page
    PageStamp ps = pdfCopy.CreatePageStamp(page);
    PdfContentByte cb = ps.GetOverContent();
    // set color
    cb.SetColorFill(BaseColor.BLACK);
    // get font
    BaseFont baseFont = BaseFont.CreateFont(string.Format("{0}\\Fonts\\arialuni.ttf", Environment.GetEnvironmentVariable("windir"), BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
    cb.SetFontAndSize(baseFont, 12);
    cb.BeginText();
    cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, printLangString, 100f, 40f, 0f);
    cb.EndText();
    // Accept changes                    
    ps.AlterContents();
    // add page
    copier.AddPage(page);
}

using (var ms = new MemoryStream())
{
    Document doc = new Document(PageSize.A4);
    PdfWriter writer = PdfWriter.GetInstance(doc, ms);
    writer.CloseStream = false;
    doc.Open();
    doc.NewPage();
    doc.Add(new Paragraph(error, fontRed));
    doc.Close();
    writer.Close();
    ms.Seek(0, SeekOrigin.Begin);
    PdfReader rd = new PdfReader(ms);
    for (int pageCounter = 1; pageCounter < reader.NumberOfPages + 1; pageCounter++)
    {
        copier.AddPage(copier.GetImportedPage(rd, pageCounter));
    }
    rd.Close();
}

document.Close();
reader.Close();
2
Andreas Rehm