pdfbox操纵pdf文档 - android

时间:2016-07-19 23:08:48

标签: java android pdf pdfbox

所以我环顾四周为Android找到了一个很好的PDF API,并且我发现了PDFBox。我开始玩这个库,主要是我正在寻找操作特定的pdf格式。

现在我正在从我的资源文件夹中成功加载文件,但是当我尝试调用

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文件?或者,我可以自己为这个pdf文件添加一些acroform吗?

1 个答案:

答案 0 :(得分:0)

好的,所以我终于解决了这个问题。我下载了Foxit PhantomPDF,结果发现你可以定义文本字段并根据需要对齐它们。我不知道是否有其他软件可以做到这一点,但这个人为我做了工作