使用 iTextSharp 将页面添加到 PDF 文档

发布于 2024-10-01 15:44:14 字数 614 浏览 0 评论 0原文

我想向包含简单文本的现有 PDF 文档添加页面。

我已经尝试了在互联网上找到的以下代码,但到目前为止我还没有让它工作:

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();

请让我知道如何正确执行此操作?

I would like to add a page to an existing PDF document containing simple text.

I have tried the following code that I found on the internet, but so far I haven't got it to work:

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();

Please let me know how to do this right?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

无远思近则忧 2024-10-08 15:44:14
    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;
    }
    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;
    }
万劫不复 2024-10-08 15:44:14

尝试此代码:它会添加一个包含现有 pdf 的新页面,并将水印文本添加到最后一页。

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;
        }

Try This code: It adds a new page with existing pdf and add watermark text to that last 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;
        }
轻拂→两袖风尘 2024-10-08 15:44:14

您不能使用 PdfCopy 添加页面。如果您需要这样做,您将需要创建一个新的 pdf 并添加它(PdfCopy 是合并 pdf 的最佳选择)。

我还添加了一个如何添加页脚的示例:

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();

You can't use PdfCopy to add Pages. You will need to create a new pdf and add it If you need to do that (PdfCopy is the best for merging pdf).

I've added an example how to add a footer too:

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();
苏佲洛 2024-10-08 15:44:14

string oldFile = "C:\Hola.pdf";
string newFile = "C:\Hola.pdf";

        // open the reader
        PdfReader reader = new PdfReader(oldFile);
        Rectangle size = reader.GetPageSizeWithRotation(1);
        Document document = new Document(size);

        // open the writer
        FileStream fs = new FileStream(newFile, FileMode.Create, FileAccess.Write);
        PdfWriter writer = PdfWriter.GetInstance(document, fs);
        document.Open();

        // the pdf content
        PdfContentByte cb = writer.DirectContent;

        // select the font properties
        BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
        cb.SetColorFill(BaseColor.DARK_GRAY);
        cb.SetFontAndSize(bf, 8);

        // write the text in the pdf content
        cb.BeginText();
        string text = "Some random blablablabla...";
        // put the alignment and coordinates here
        cb.ShowTextAligned(1, text, 520, 640, 0);
        cb.EndText();
        cb.BeginText();
        text = "Other random blabla...";
        // put the alignment and coordinates here
        cb.ShowTextAligned(2, text, 100, 200, 0);
        cb.EndText();        

        for(int i=1; i<=reader.NumberOfPages; i++)
        {
            // create the new page and add it to the pdf
            PdfImportedPage page = writer.GetImportedPage(reader, i);
            cb.AddTemplate(page, 0, 0);

            if(reader.NumberOfPages > 1)
            {
                document.NewPage();
            }
        }
        
        // close the streams and voilá the file should be changed :)
        document.Close();
        fs.Close();
        writer.Close();
        reader.Close();
    }

string oldFile = "C:\Hola.pdf";
string newFile = "C:\Hola.pdf";

        // open the reader
        PdfReader reader = new PdfReader(oldFile);
        Rectangle size = reader.GetPageSizeWithRotation(1);
        Document document = new Document(size);

        // open the writer
        FileStream fs = new FileStream(newFile, FileMode.Create, FileAccess.Write);
        PdfWriter writer = PdfWriter.GetInstance(document, fs);
        document.Open();

        // the pdf content
        PdfContentByte cb = writer.DirectContent;

        // select the font properties
        BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
        cb.SetColorFill(BaseColor.DARK_GRAY);
        cb.SetFontAndSize(bf, 8);

        // write the text in the pdf content
        cb.BeginText();
        string text = "Some random blablablabla...";
        // put the alignment and coordinates here
        cb.ShowTextAligned(1, text, 520, 640, 0);
        cb.EndText();
        cb.BeginText();
        text = "Other random blabla...";
        // put the alignment and coordinates here
        cb.ShowTextAligned(2, text, 100, 200, 0);
        cb.EndText();        

        for(int i=1; i<=reader.NumberOfPages; i++)
        {
            // create the new page and add it to the pdf
            PdfImportedPage page = writer.GetImportedPage(reader, i);
            cb.AddTemplate(page, 0, 0);

            if(reader.NumberOfPages > 1)
            {
                document.NewPage();
            }
        }
        
        // close the streams and voilá the file should be changed :)
        document.Close();
        fs.Close();
        writer.Close();
        reader.Close();
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文