2016-07-19 104 views
0

因此,我環顧一下爲Android找到一個很好的PDF API,並且我發現了PDFBox。我開始玩這個圖書館,主要是我正在尋找操縱特定的PDF格式。pdfbox操縱PDF文檔 - android

現在我successfuly從我的資產文件夾中加載文件,但是當我嘗試調用

getAcroForm(); 

原來我一個空的對象,因此,我不能進入的領域,並開始插入一些數據。

這裏就是我加載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文件?或者,我可以自己添加一些acroform到這個pdf文件嗎?

+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,事實證明,您可以定義文本字段並根據需要對齊它們。我不知道是否有另一個軟件可以做到這一點,但這一個做了我的工作