2012-01-19 6 views
1

テキストと画像がハイライトテキスト(U)ツールでハイライト表示されたpdfファイルがあります。強調表示されたすべてのコンテンツを別々のイメージとして自動的に抽出してフォルダに保存する方法はありますか?私は読みやすいテキストがほしくない。私はちょうどイメージとしてすべての強調表示されたコンテンツが欲しい。ありがとうpdfのハイライトされた内容を画像として自動的に抽出する

答えて

0

各テキストを別々のハイライトまたはすべてのハイライトとして個別のペインに表示しますか?

+0

強調表示された各コンテンツを別々の画像として欲しいです。 – thesensemakers

1

PDFライブラリを使用してすべてのアノテーションオブジェクトとそのプロパティを繰り返して、ハイライト注釈を使用しているものを確認する必要があります。ハイライトアノテーションを見つけたら、アノテーションの位置とサイズ(バウンディングボックス)を抽出できます。

アノテーションバウンディングボックスのリストを取得したら、PDFファイルをPNG/JPEG/TIFFなどのイメージフォーマットにレンダリングして、必要な注釈テキストのレンダリングされたイメージを抽出/クリップできるようにする必要があります。あなたは

http://www.quickpdflibrary.com(私はQuickPDFのために相談する)または http://www.itextpdf.com

含めてこれを行うことができ、さまざまなPDFライブラリがここにありますGDI +またはlibtiffの

のようなものを使用することができ、クイックPDFライブラリに基づいてC#関数でありますそれはあなたが必要とするものです。

private void ExtractAnnots_Click(object sender, EventArgs e) 
    { 
     int dpi = 300; 
     Rectangle r; 
     List<Rectangle> annotList = new List<Rectangle>(); 

     QP.LoadFromFile("samplefile.pdf", ""); 

     for (int p = 1; p <= QP.PageCount(); p++) 
     { 
      QP.SelectPage(p); // Select the current page. 
      QP.SetOrigin(1); // Set origin to top left. 

      annotList.Clear(); 

      for (int i = 1; i <= QP.AnnotationCount(); i++) 
      { 
       if (QP.GetAnnotStrProperty(i, 101) == "Highlight") 
       { 
        r = new Rectangle((int)(QP.GetAnnotDblProperty(i, 105) * dpi/72.0), // x 
             (int)(QP.GetAnnotDblProperty(i, 106) * dpi/72.0), // y 
             (int)(QP.GetAnnotDblProperty(i, 107) * dpi/72.0), // w 
             (int)(QP.GetAnnotDblProperty(i, 108) * dpi/72.0)); // h 

        annotList.Add(r); // Add the bounding box to the annotation list for this page. 

        string s = String.Format("page={0}: x={1} y={2} w={3} h={4}\n", p, r.X, r.Y, r.Width, r.Height); 
        OutputTxt.AppendText(s); 
       } 
      } 

      // Now we have a list of annotations for the current page. 
      // Delete the annotations from the PDF in memory so we don't render them. 

      for (int i = QP.AnnotationCount(); i >= 0; i--) 
       QP.DeleteAnnotation(i); 

      QP.RenderPageToFile(dpi, p, 0, "page.bmp"); // 300 dpi, 0=bmp 
      Bitmap bmp = Image.FromFile("page.bmp") as Bitmap; 

      for (int i=0;i<annotList.Count;i++) 
      { 
       Bitmap cropped = bmp.Clone(annotList[i], bmp.PixelFormat); 

       string filename = String.Format("annot_p{0}_{1}.bmp", p, i+1); 
       cropped.Save(filename); 
      } 

      bmp.Dispose(); 
     } 

     QP.RemoveDocument(QP.SelectedDocument()); 
    } 
+0

こんにちはAndrew、コードを教えてくれますか?私はquickpdflibraryかitextpdfのどちらかと一緒に行きたいです。 – thesensemakers

+0

ここで私はサンプルファイルを添付しています。http://www.sendspace.com/file/hejhkp – thesensemakers

+0

Quick Post Libraryを使ってC#でうまくいくいくつかのコードで元の投稿を更新しました。 –

関連する問題