Android iText addTemplate Stamp pdf表单字段超出现有PDF文档

时间:2012-09-12 14:47:42

标签: android itext pdf-manipulation android-droidtext

我正在尝试从Android中的遗留应用程序打开标准PDF表单,使用iText覆盖表单字段并传递到Android上的Adobe Reader以填写表单。

我已经能够手动创建TextFields了,但我更喜欢将pdf文件作为模板来加速处理并更好地控制质量。

这是我到目前为止的代码,它遵循itext示例。

    AssetFileDescriptor descriptor = getAssets().openFd("standardWO_Template_v1_fo.pdf");
            File templateFile = new File(descriptor.getFileDescriptor().toString());
            PdfReader reader = new PdfReader(intent.getData().getPath());
            reader.selectPages("1");
            PdfReader templateReader = new PdfReader(templateFile.getAbsolutePath());
            PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(file));
            // Stamp the template onto the document
            PdfImportedPage page = stamper.getImportedPage(templateReader, 1);
            PdfContentByte cb = stamper.getOverContent(1);
            cb.addTemplate(page, 0, 0);

我遇到的问题是在最后一行。 cb.addTemplate(page,0,0);

Eclipse报告以下错误。无法解析java.awt.geom.AffineTransform类型。它是从所需的.class文件间接引用的

从我能够告诉java.awt.geom.AffineTransform将无法在仅Android的Java中工作。

有没有不同的方法来完成我的任务或让AffineTransform在Android中运行?

1 个答案:

答案 0 :(得分:2)

经过一番搜索,我发现了这种方法。首先,我必须从使用我的android项目中的iText5.3.1库更改为droidText库。

一旦我安装了droidText库就能够使用以下代码。 (以及日食中的ctrl-o)

    File templateFile = new File(dir.getAbsolutePath() + "/templates/standardWO.pdf");
            // Read the incoming file
            PdfReader reader = new PdfReader(intent.getData().getPath());
            // Read the template form information
            PdfReader templateReader = new PdfReader(templateFile.getAbsolutePath());
            // Create the stamper from the incoming file.
            PdfStamper stamper = new PdfStamper(templateReader, new FileOutputStream(file));
            // Import the template information
            PdfImportedPage iPage = stamper.getImportedPage(reader, 1);
            // get the direct content
            PdfContentByte cb = stamper.getUnderContent(1);
            // Add the imported page to the content
            cb.addTemplate(iPage, 0, 0);
            stamper.close();
            Log.v(TAG, "Opening file in adobe reader: " + file.getAbsolutePath());
            loadDocInReader(file);