2017-08-04 8 views
3

入力ファイル用のリーダーとマークアップファイル用のリーダーを作成しました。注釈をループして出力に1つずつ追加するか、マークアップファイルからすべての注釈を取得してx、z座標を保持する入力ファイルに追加する方法があるかどうかはわかりません。別のpdfのすべてのページで1つのPDFから注釈のグループを追加して新しい出力を作成する

私は以下のコードを持っていますが、私はコメントのセクションで何をすべきか分かりません。 AddAnnotationメソッドは入力としてPdfAnnotationを取るだけですが、PdfDictionaryをPdfAnnotaitonに変換する方法がわかりません。

class Program 
{ 
    public static string inputFile = @"E:\pdf-sample.pdf"; 
    public static string markupFile = @"E:\StampPdf.pdf"; 
    public static string outputFile = @"E:\pdf.pdf"; 

    public static PdfReader inputReader = new PdfReader(inputFile); 
    public static PdfReader markupReader = new PdfReader(markupFile); 

    static void Main(string[] args) 
    { 
     PdfDocument inputDoc = new PdfDocument(inputReader, new PdfWriter(outputFile)); 

     PdfDocument markupDoc = new PdfDocument(markupReader); 

     int n = inputDoc.GetNumberOfPages(); 
     for (int i = 1; i <= n; i++) 
     { 
      PdfPage page = inputDoc.GetPage(i); 

      PdfDictionary markupPage = markupDoc.GetFirstPage().GetPdfObject(); 
      PdfArray annots = markupPage.GetAsArray(PdfName.Annots); 

      if(annots != null) 
      { 
       for(int j=0; j < annots.Size(); j++) 
       { 
        PdfDictionary annotItem = annots.GetAsDictionary(i); 
        //****** 
        //page.AddAnnotation(?); 
        //****** 
       } 
      } 
     } 
     inputDoc.Close(); 
    } 
} 

私はiText7で新しいGetAnnotationsメソッドを見つけた後、別のバリエーションを試しました。ここでコードは正常に実行されますが、私はO/Pファイルを開くことができず、ファイルが壊れているというエラーが発生します。また、最後の行の代わりにinputDoc.Close()を実行したときに、「Pdf間接オブジェクトが他のPDFドキュメントに属しています。現在のPDFドキュメントにオブジェクトをコピーする「

 PdfReader ireader = new PdfReader(inputFile); 
     PdfDocument inputDoc = new PdfDocument(ireader, new PdfWriter(outputFile)); 
     PdfReader mreader = new PdfReader(markupFile); 
     PdfDocument markupDoc = new PdfDocument(mreader); 
     var annots = markupDoc.GetFirstPage().GetAnnotations(); 
     if (annots != null) 
     { 
      for (int j = 0; j < annots.Count(); j++) 
      { 
       inputDoc.GetFirstPage().AddAnnotation(annots[j]); 
      } 
     } 
     ireader.Close(); 
     mreader.Close(); 
     markupDoc.Close(); 
     inputDoc.SetCloseWriter(true); 
+0

pdfを読むためにどのライブラリを使用していますか? – Piotr

+0

@Piotr - 私はiText7を使用しています –

答えて

1

は多分これを試してみてください。それが動作しない場合

if (annots != null) 
    { 
     for (int j = 0; j < annots.Size(); j++) 
     { 
      PdfDictionary annotItem = annots.GetAsDictionary(i); 
      PdfLineAnnotation lineAnnotation = new PdfLineAnnotation(annotItem); 
      page.AddAnnotation(lineAnnotation); 
     } 
    } 

は、ここに

http://developers.itextpdf.com/examples/actions-and-annotations/clone-creating-and-adding-annotations

(残念ながらJavaで)いくつかのドキュメントです

注釈付きのPdfをコピーしてコピーしたい場合は、おそらく私はデバッグして何かを試すことができます。

+0

@ Piotr - 入力とマークアップのpdfファイルのイメージを追加できました。参照できるので、注釈の行がたくさんあります。または、私はあなたのメールidを送信することができますsoiは、PDFファイルを郵送することができます。 –

+0

アップロードして、私たちにリンクを付けてください(例:https://wetransfer.com/) - 私だけでなく、誰もがそれを手伝うチャンスがあります) – Piotr

+0

https://wetransfer.com/downloads/ fb37905d3501892ff4808e487452928220170804122229/97c1b7 –

関連する問題