Split PDF into multiple PDFs using iTextsharp

34,684

Solution 1

You're looping through the pdf and creating a new document every time you advance a page. You'll need to keep track of your pages so that you perform split only every 50 pages. Personally I would put that in a separate method and call it from your loop. Something like this:

private void ExtractPages(string sourcePDFpath, string outputPDFpath, int startpage,  int endpage)
{
    PdfReader reader = null;
    Document sourceDocument = null;
    PdfCopy pdfCopyProvider = null;
    PdfImportedPage importedPage = null;

    reader = new PdfReader(sourcePDFpath);
    sourceDocument = new Document(reader.GetPageSizeWithRotation(startpage));
    pdfCopyProvider = new PdfCopy(sourceDocument, new System.IO.FileStream(outputPDFpath, System.IO.FileMode.Create));

    sourceDocument.Open();

    for (int i = startpage; i <= endpage; i++)
    {
        importedPage = pdfCopyProvider.GetImportedPage(reader, i);
        pdfCopyProvider.AddPage(importedPage);
    }
    sourceDocument.Close();
    reader.Close();
}

So in your original code loop through your pdf and every 50 pages call the above method. You'll just need to add variables in your block to keep track of the start/end pages.

Solution 2

this will be of use. very much matches your requirement

http://www.codeproject.com/Articles/559380/SplittingplusandplusMergingplusPdfplusFilesplusinp

Solution 3

Here is a shorter solution. Haven't tested which method has the better performance.

private void ExtractPages(string sourcePDFpath, string outputPDFpath, int startpage, int endpage)
{
  var pdfReader = new PdfReader(sourcePDFpath);
  try
  {
    pdfReader.SelectPages($"{startpage}-{endpage}");
    using (var fs = new FileStream(outputPDFpath, FileMode.Create, FileAccess.Write))
    {
      PdfStamper stamper = null;
      try
      {
        stamper = new PdfStamper(pdfReader, fs);
      }
      finally
      {
        stamper?.Close();
      }
    }
  }
  finally
  {
    pdfReader.Close();
  }
}
Share:
34,684

Related videos on Youtube

Billy
Author by

Billy

Updated on July 09, 2022

Comments

  • Billy
    Billy almost 2 years
    public int SplitAndSave(string inputPath, string outputPath)
        {
            FileInfo file = new FileInfo(inputPath);
            string name = file.Name.Substring(0, file.Name.LastIndexOf("."));
    
            using (PdfReader reader = new PdfReader(inputPath))
            {
    
                for (int pagenumber = 1; pagenumber <= reader.NumberOfPages; pagenumber++)
                {
                    string filename = pagenumber.ToString() + ".pdf";
    
                    Document document = new Document();
                    PdfCopy copy = new PdfCopy(document, new FileStream(outputPath + "\\" + filename, FileMode.Create));
    
                    document.Open();
    
                    copy.AddPage(copy.GetImportedPage(reader, pagenumber));
    
                    document.Close();
                }
                return reader.NumberOfPages;
            }
    
        }
    

    I want to split the Pdf in to multiple PDFs with 50 pages interval.(Suppoose If there are 400 pages PDF, I want 8 pdfs). The above code is splitting every page into a pdf. Please help me...I'm using asp.net with iTextSharp.

    • Can Sahin
      Can Sahin about 9 years
      Hint: If you only want a new document every 50 pages, why do you create a new document during every single loop iteration?
  • Billy
    Billy over 10 years
    I've used the above codeproject code and I'm getting error :"Access to the path denied";
  • RohitWagh
    RohitWagh over 10 years
    this means u do not have rights to write to the folder you are writing the pdf at.
  • mkl
    mkl over 5 years
    The most relevant advantage of your solution is that it keeps document level data (meta data, document level attachments,...), it being shorter merely is a nice side effect.
  • blaze_125
    blaze_125 about 3 years
    @mkl I have found PDFCopy to be better at keeping XmpMetadata and everything else intact.
  • mkl
    mkl about 3 years
    PdfCopy better than PdfStamper? That sounds implausible. Only possible in cases where PdfCopy by chance repairs some issue while PdfStamper keeps the issue as is. Unless i overlooked something... ;)