【问题标题】:Add a page to PDF document using iTextSharp使用 iTextSharp 将页面添加到 PDF 文档
【发布时间】:2011-05-06 15:55:48
【问题描述】:

我想在包含简单文本的现有 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();

请告诉我该怎么做?

【问题讨论】:

    标签: c# pdf pdf-generation itextsharp


    【解决方案1】:

    试试这个代码:它使用现有的 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;
            }
    

    【讨论】:

      【解决方案2】:

      您不能使用 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();
      

      【讨论】:

        【解决方案3】:
            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;
            }
        

        【讨论】:

        • 您好,我正在使用“document.NewPage();”创建新页面的方法,它将与标题重叠我的内容。那么如何在添加新页面时避免与标题重叠?请帮忙。谢谢
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-02
        • 2017-07-21
        • 2015-05-14
        • 1970-01-01
        相关资源
        最近更新 更多