2016-07-19 2 views
0

Итак, я немного огляделся, чтобы найти хорошие API-интерфейсы PDF для Android, и я обнаружил PDFBox. Я начал играть с этой библиотекой, и в основном я ищу манипулирование конкретной формой PDF.pdfbox манипулировать pdf-документом - андроид

Теперь я загрузив файл успешно из папки моих активов, но когда я пытаюсь вызвать

getAcroForm(); 

Оказывается мне нулевой объект, Таким образом, я не могу попасть в поле и начать, чтобы вставить некоторые данные.

Вот код, где я загрузить файл в формате PDF, скопируйте его в SDCard и загрузить его в объект 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; 
    } 
} 

Как я могу манипулировать PDF-файл без AcroForm? Или, могу ли я добавить somesort acroform в этот файл pdf самостоятельно?

+0

Аналогичный вопрос [здесь] (http://stackoverflow.com/questions/16420509/getting-null-when-call- acroform-getfields-using-pdfbox) – Bill

+0

Посмотрите пример CreateSimpleForm в загрузке исходного кода PDFBox. (Не знаю, будет ли это работать на PDFBox для Android). –

+0

Действительно ли ваш pdf-файл содержит форму AcroForm? Или есть чертежи полей формы? – mkl

ответ

0

Хорошо, поэтому я, наконец, решил эту проблему. Я загрузил Foxit PhantomPDF, и, оказывается, вы можете определить текстовые поля и выровнять их для ваших нужд. Я не знаю, есть ли другое программное обеспечение, которое это делает, но этот сделал для меня работу

Смежные вопросы