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

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

请让我知道如何做到这一点?

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

尝试此代码:它添加一个包含现有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; } 

您无法使用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();