2016-07-19 18 views
0

Also habe ich mich ein bisschen umgeschaut, um eine gute PDF APIs für Android zu finden und ich habe PDFBox entdeckt. Ich fing an, mit dieser Bibliothek zu spielen und hauptsächlich suche ich nach manipulierenden spezifischen pdf Form.pdfbox manipulieren pdf dokument - android

Jetzt bin Laden ich die Datei successfuly von meinem Vermögen Ordner, aber wenn ich versuche

zu nennen
getAcroForm(); 

Es macht mich ein Null-Objekt, also kann ich nicht in die Felder und beginnen einige einfügen Daten. Hier

ist der Code, wo ich die pdf-Datei zu laden, kopieren Sie sie in die SD-Karte und laden Sie es auf ein PDDocument Objekt:

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; 
    } 
} 

Wie kann ich eine PDF-Datei ohne AcroForm manipulieren? Oder kann ich dieser PDF-Datei selbst einen Teil von Acroform hinzufügen?

+0

ähnliche Frage [hier] (http://stackoverflow.com/questions/16420509/getting-null-when-call- acroform-getfields-using-pdfbox) – Bill

+0

Werfen Sie einen Blick auf das CreateSimpleForm-Beispiel im PDFBox-Quellcode-Download. (Weiß nicht, ob das bei PDFBox für Android funktioniert). –

+0

Enthält Ihr PDF-Dokument tatsächlich ein AcroForm-Formular? Oder gibt es Zeichnungen von Formularfeldern? – mkl

Antwort

0

Ok, also habe ich dieses Problem endlich gelöst. Ich habe Foxit PhantomPDF heruntergeladen und es stellt sich heraus, dass Sie Textfelder definieren und an Ihre Bedürfnisse anpassen können. Ich weiß nicht, ob es eine andere Software gibt, die das tut, aber diese hat die Arbeit für mich erledigt