2017-01-19 5 views
0

Я пытаюсь объединить документы PDF и добавить дополнительные страницы в некоторые из них. Часть слияния работает нормально, и теперь я пытаюсь выяснить, как добавить дополнительную страницу, передав ссылку на ранее существовавшую страницу PDF. Как передать ссылку на страницу PDF на targetDoc.AddPage (LINK)?Добавить дополнительную страницу в PDF-документ, используя библиотеку PDFsharp

public static void MergePDFs(string targetPath, DataTable pdfs) 
    { 
     try 
     { 
      using (PdfSharp.Pdf.PdfDocument targetDoc = new PdfSharp.Pdf.PdfDocument()) 
      { 
       foreach (DataRow pdf in pdfs.Rows) 
       { 
        using (PdfSharp.Pdf.PdfDocument pdfDoc = PdfSharp.Pdf.IO.PdfReader.Open(pdf["link"].ToString(), PdfDocumentOpenMode.Import)) 
        { 
         for (int i = 0; i < pdfDoc.PageCount; i++) 
         { 
          targetDoc.AddPage(pdfDoc.Pages[i]); 
         } 
        } 
       } 
       targetDoc.Save(targetPath); 
      } 
     } 
     catch(Exception ex) 
     { 
      Console.Write(ex); 
     } 
    } 

Штамповка методу

using (Stream pdfStream = new FileStream(sourceFileName, FileMode.Open)) 
{ 
using (Stream newpdfStream = new FileStream(newFileNameWithPath, FileMode.Create, FileAccess.ReadWrite)) 
{ 
    iTextSharp.text.pdf.PdfReader pdfReader = new iTextSharp.text.pdf.PdfReader(pdfStream); 
    PdfStamper pdfStamper = new PdfStamper(pdfReader, newpdfStream); 
    PdfContentByte pdfContentByte = pdfStamper.GetOverContent(pageNumber); 
    BaseFont baseFont = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1250, BaseFont.NOT_EMBEDDED); 
    pdfContentByte.SetColorFill(BaseColor.RED); 
    pdfContentByte.SetFontAndSize(baseFont, 12); 
    pdfContentByte.BeginText(); 
    pdfContentByte.ShowTextAligned(PdfContentByte.ALIGN_CENTER, inputText, Convert.ToInt32(xCoordinate), Convert.ToInt32(yCoordinate), 0); 
    pdfContentByte.EndText(); 
    pdfStamper.Close(); 
} 

}

+0

Я не уверен, если мой ответ то, что вы ищете. Если вы объясните, что означает «передача ссылки на предыдущую страницу pdf», мне, возможно, придется обновить свой ответ. –

+0

Спасибо. Я пытаюсь передать страницу pdf на мой метод штамповки и добавить его обратно после штамповки. Я добавил мой метод штамповки выше – user6934713

+0

. Шаблон использует iTextSharp. Вы можете использовать iTextSharp для сохранения штампованной страницы в поток, открыть ее с помощью PDFsharp и использовать штампованную страницу, как и любую другую страницу. Кажется, что ваш код уже сохраняет PDF с печатью в потоке 'newpdfStream', и вам остается только открыть, что PdfReader.Open() - работает с файлами и потоками. –

ответ

2

Чтобы создать новую, пустую страницу вызова AddPage() без параметров.

targetDoc.AddPage(); 

Вам может понадобиться Clone() создать несколько копий существующего импортированной страницы (добавить (PdfPage)):

targetDoc.AddPage((PdfPage)pdfDoc.Pages[i].Clone());