2016-04-25 8 views
0

私はpdfのすべてのページを別々のpdfファイルに変換しようとしています。私は6つのPDFファイルを作成するために6の範囲を与えました。PDFの各ページをC#で複数のpdfファイルに分割する方法(iTextSharpを使用)?

using System; 
using iTextSharp.text; 
using iTextSharp.text.pdf; 
using System.Windows.Forms; 
using System.IO; 

namespace Learning.SpitPdfApp { 
    public partial class MainForm : Form { 
     public MainForm() { 
      InitializeComponent(); 
     } 

     private void SplitPdfButton_Click(object sender, EventArgs e) { 
      MainForm objMainForm = new MainForm(); 
      objMainForm.ExtractPage(SourceTextBox.Text, DestinationTextBox.Text); 
     } 

     public void ExtractPage(string sourcePath, string outputPath) { 
      int startPage = 1; 
      PdfReader objReader = new PdfReader(sourcePath+".pdf"); 
      int endPage = 6; 
      Document objDocument = new Document(objReader.GetPageSizeWithRotation(startPage)); 

      objDocument.Open(); 

      for (int index = startPage; index <= endPage; index++) { 
       PdfCopy pdfCopyProvider = new PdfCopy(objDocument, new FileStream(outputPath+""+index+".pdf", FileMode.Create)); 
       PdfImportedPage importedPage = pdfCopyProvider.GetImportedPage(objReader, index); 
       pdfCopyProvider.AddPage(importedPage); 
      } 
      objDocument.Close(); 
      objReader.Close(); 
      MessageBox.Show(@"Splitting successful!"); 
     } 
    } 
} 

しかし、それはnull参照ポインタ例外を投げています。私は、私が引き起こした問題を理解することができません。

ご協力いただければ幸いです。 ありがとうございます。

+0

? – petric

答えて

0

これは例外なくページを抽出します。

public void ExtractPage(string sourcePdfPath, string outputPdfPath, int pageNumber) 
      { 
       PdfReader reader = null; 
       Document document = null; 
       PdfCopy pdfCopyProvider = null; 
       PdfImportedPage importedPage = null; 

       try 
       { 
        // Intialize a new PdfReader instance with the contents of the source Pdf file: 
        reader = new PdfReader(sourcePdfPath); 

        // Capture the correct size and orientation for the page: 
        document = new Document(reader.GetPageSizeWithRotation(pageNumber)); 

        // Initialize an instance of the PdfCopyClass with the source 
        // document and an output file stream: 
        pdfCopyProvider = new PdfCopy(document, 
         new System.IO.FileStream(outputPdfPath, System.IO.FileMode.Create)); 

        document.Open(); 

        // Extract the desired page number: 
        importedPage = pdfCopyProvider.GetImportedPage(reader, pageNumber); 
        pdfCopyProvider.AddPage(importedPage); 
        document.Close(); 
        reader.Close(); 
       } 
       catch (Exception ex) 
       { 
        throw ex; 
       } 
      } 
0

なぜExtractPageメソッドを呼び出すために同じフォームのインスタンスを作成していますか?新しいインスタンスを作成せずに呼び出すことができますか?ここで

はあなたのコードの修正です:例外がスローされますどのような行で

private void SplitPdfButton_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       ExtractPage(SourceTextBox.Text, DestinationTextBox.Text); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 
     public void ExtractPage(string sourcePath, string outputPath) 
     { 
      int startPage = 1; 
      int endPage = 6; 

       for (int index = startPage; index <= endPage; index++) 
       { 

        PdfReader objReader = new PdfReader(sourcePath + ".pdf"); 
        Document objDocument = new Document(objReader.GetPageSizeWithRotation(startPage)); 

        string destination = Path.Combine(outputPath, index + ".pdf"); 
        PdfCopy pdfCopyProvider = new PdfCopy(objDocument, new FileStream(destination, FileMode.Create)); 
        objDocument.Open(); 

        PdfImportedPage importedPage = pdfCopyProvider.GetImportedPage(objReader, index); 
        pdfCopyProvider.AddPage(importedPage); 
        objDocument.Close(); 
        objReader.Close(); 
       } 

      MessageBox.Show(@"Splitting successful!"); 
     } 
関連する問題