Android 上的 PDFBox 无法打开和填写 PDF 表单
PDFBox on Android doesn't open and fill PDF forms
我使用了来自:Tom Roush PDFBox Android 的 PDFBox 并将其导入到 build.gradel:dependencies {compile 'org.apache:pdfbox-android:1.8.9.0'}
但每次我 运行 Activity 只出现 Toast,但找不到填充的 PDF 文件。 PDF 位于 /assets 文件夹中。我在 /app/src/main/assets 中自己创建了这个文件夹。我使用 Android Studio。
Activity:
public class GwmProbenActivity extends AppCompatActivity {
DatabaseHelperAllgemeineDaten myDb;
public String stOrt;
public String stProgramm;
public String stName;
public String stDatum;
File root;
AssetManager assetManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_proben);
Intent intent = getIntent();
stDatum = intent.getStringExtra("datum");
myDb = new DatabaseHelperAllgemeineDaten(this);
PDFBoxResourceLoader.init(getApplicationContext());
root = android.os.Environment.getExternalStorageDirectory();
assetManager = getAssets();
}
public void fillPDF() {
try {
// Load the document and get the AcroForm
PDDocument document = PDDocument.load(assetManager.open("Vorlage_GWM- Protokoll.pdf"));
PDDocumentCatalog docCatalog = document.getDocumentCatalog();
PDAcroForm acroForm = docCatalog.getAcroForm();
// Fill the text field
PDFieldTreeNode field = acroForm.getField("ProbenahmeDatum");
field.setValue(stDatum);
String path = root.getAbsolutePath() + "/Download/Vorlage_GWM-Protokoll1";
Toast.makeText(this,"Saved filled form to " + path,Toast.LENGTH_LONG).show();
document.save(path);
document.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
}
public void speichern (View v) {
fillPDF();
}
}
我添加了“.pdf”并将 Toast 移到了 document.close() 后面。现在 Toast 没有出现,我在 storage/emulated/0/Download.
中找不到文件
自 API 23+ 起,您需要检查 Activity 中的权限。这就是解决方案。
我使用了来自:Tom Roush PDFBox Android 的 PDFBox 并将其导入到 build.gradel:dependencies {compile 'org.apache:pdfbox-android:1.8.9.0'}
但每次我 运行 Activity 只出现 Toast,但找不到填充的 PDF 文件。 PDF 位于 /assets 文件夹中。我在 /app/src/main/assets 中自己创建了这个文件夹。我使用 Android Studio。
Activity:
public class GwmProbenActivity extends AppCompatActivity {
DatabaseHelperAllgemeineDaten myDb;
public String stOrt;
public String stProgramm;
public String stName;
public String stDatum;
File root;
AssetManager assetManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_proben);
Intent intent = getIntent();
stDatum = intent.getStringExtra("datum");
myDb = new DatabaseHelperAllgemeineDaten(this);
PDFBoxResourceLoader.init(getApplicationContext());
root = android.os.Environment.getExternalStorageDirectory();
assetManager = getAssets();
}
public void fillPDF() {
try {
// Load the document and get the AcroForm
PDDocument document = PDDocument.load(assetManager.open("Vorlage_GWM- Protokoll.pdf"));
PDDocumentCatalog docCatalog = document.getDocumentCatalog();
PDAcroForm acroForm = docCatalog.getAcroForm();
// Fill the text field
PDFieldTreeNode field = acroForm.getField("ProbenahmeDatum");
field.setValue(stDatum);
String path = root.getAbsolutePath() + "/Download/Vorlage_GWM-Protokoll1";
Toast.makeText(this,"Saved filled form to " + path,Toast.LENGTH_LONG).show();
document.save(path);
document.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
}
public void speichern (View v) {
fillPDF();
}
}
我添加了“.pdf”并将 Toast 移到了 document.close() 后面。现在 Toast 没有出现,我在 storage/emulated/0/Download.
中找不到文件自 API 23+ 起,您需要检查 Activity 中的权限。这就是解决方案。