Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>This is how I have done it in the past. You need to use a new stream for the PDF writer, and add your original PDF contents to the new document. This may not be the best or most efficient way of performing this, it's just what I found works.</p> <p>This is working with my original PDF coming from a <code>Stream</code>, and producing the merged output as another <code>Stream</code>, however you should be able to adapt it to your needs.</p> <pre><code>var originalPdfStream = GetOriginalPdfStream(); var pdfDocument = Document(); var finalPdfStream = new MemoryStream(); var pdfWriter = PdfWriter.GetInstance(pdfDocument, finalPdfStream); pdfDocument.Open(); // Add the originalPdfStream into the pdfDocument var originalPdfReader = new PdfReader(originalPdfStream); AddPdf(document, writer, reader); // Code to add other items to the pdfDocument. pdfWriter.CloseStream = false; pdfDocument.Close(); finalPdfStream.Position = 0; return finalPdfStream; </code></pre> <p>The following method then takes your document and writer, and a reader to the document you want to add.</p> <pre><code>/// &lt;summary&gt; /// Merge a PDF file into a PDF document. /// &lt;/summary&gt; /// &lt;param name="document"&gt;The PDF document.&lt;/param&gt; /// &lt;param name="writer"&gt;The PDF writer.&lt;/param&gt; /// &lt;param name="reader"&gt;A PDF reader.&lt;/param&gt; private static void AddPdf(Document document, PdfWriter writer, PdfReader reader) { if (document == null) throw new ArgumentNullException("document"); if (writer == null) throw new ArgumentNullException("writer"); if (reader == null) throw new ArgumentNullException("reader"); var numberOfPages = reader.NumberOfPages; var originalPageSize = document.PageSize; // Iterate through all pages for (var currentPageIndex = 1; currentPageIndex &lt;= numberOfPages; currentPageIndex++) { // Determine page size for the current page document.SetPageSize(reader.GetPageSizeWithRotation(currentPageIndex)); // Create page document.NewPage(); var importedPage = writer.GetImportedPage(reader, currentPageIndex); // Determine page orientation and add page. var pageRotation = reader.GetPageRotation(currentPageIndex); var pageWidth = reader.GetPageSizeWithRotation(currentPageIndex).Width; var pageHeight = reader.GetPageSizeWithRotation(currentPageIndex).Height; switch (pageRotation) { case 0: writer.DirectContent.AddTemplate(importedPage, 1f, 0, 0, 1f, 0, 0); break; case 90: writer.DirectContent.AddTemplate(importedPage, 0, -1f, 1f, 0, 0, pageHeight); break; case 180: writer.DirectContent.AddTemplate( importedPage, -1f, 0, 0, -1f, pageWidth, pageHeight); break; case 270: writer.DirectContent.AddTemplate(importedPage, 0, 1f, -1f, 0, pageWidth, 0); break; default: throw new Exception("Unexpected page rotation: [{0}].", pageRotation); } } document.SetPageSize(originalPageSize); } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload