2016-07-19 34 views
0

私は少しの周りにアンドロイドのための良いPDF APIを見つけるために見て、私はPDFBoxを発見した。私はこの図書館で遊び始めましたが、主に私は特定のPDF形式を操作したいと思っています。pdfbox PDFドキュメントを操作 - android

今こうして私はフィールドに入ると一部を挿入するために開始することができない、私は私の資産フォルダからsuccessfulyファイルをロードしていますが、私は

getAcroForm(); 

を呼び出すしようとすると、それは私にnullオブジェクトをオンデータ。ここで

は、私はpdfファイルを読み込むコードをSDカードにコピーし、あるとPDDocumentオブジェクトにロードします。

package com.silverfix.pdfpractice; 

import android.content.res.AssetManager; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.Toast; 

import org.apache.pdfbox.pdmodel.PDDocument; 
import org.apache.pdfbox.pdmodel.PDDocumentCatalog; 
import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; 
import org.apache.pdfbox.pdmodel.interactive.form.PDFieldTreeNode; 

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.util.List; 

public class MainActivity extends AppCompatActivity{ 

    private final String FORM_NAME = "dgc.pdf"; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     try { 
      AssetManager assetManager = getAssets(); 
      File file = createFileFromInputStream(assetManager.open(FORM_NAME)); 

      PDDocument form = PDDocument.load(file); 
      PDDocumentCatalog catalog = form.getDocumentCatalog(); 
      catalog.getPages().getCount(); 

      Toast.makeText(this, "Loaded! " + catalog.getPages().getCount(), Toast.LENGTH_LONG).show(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      Toast.makeText(this, "Loading has failed", Toast.LENGTH_LONG).show(); 
     } 
    } 

    private File createFileFromInputStream(InputStream inputStream) { 

     try{ 
      OutputStream outputStream = new FileOutputStream("/sdcard/PDFPractice/" + FORM_NAME); 
      byte buffer[] = new byte[1024]; 
      int length = 0; 

      while((length=inputStream.read(buffer)) > 0) { 
       outputStream.write(buffer,0,length); 
      } 

      outputStream.close(); 
      inputStream.close(); 

      File result = new File("/sdcard/PDFPractice/" + FORM_NAME); 
      return result; 
     }catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 
} 

どのように私はacroformせずにPDFファイルを操作することができますか?または、私はこのpdfファイルに数種類のacroformを自分で追加できますか?

+0

同様の質問[ここ](http://stackoverflow.com/questions/16420509/getting-null-when-call- acroform-getfields-using-pdfbox) – Bill

+0

PDFBoxソースコードのダウンロードでCreateSimpleFormの例を見てください。 (これがAndroid用のPDFBoxで動作するかどうかはわかりません)。 –

+0

あなたのpdfに実際にAcroFormフォームが含まれていますか?あるいは、フォームフィールドの図が​​ありますか? – mkl

答えて

0

私は最終的にこの問題を解決しました。 Foxit PhantomPDFをダウンロードしたところ、テキストフィールドを定義してニーズに合わせることができました。私はそれを行う別のソフトウェアがあるかどうかわからないが、これは私のために仕事をした

関連する問題