Free Support Forum - aspose.com

通过word模版添加图片、文字的问题


#1
com.aspose.words.License license = new com.aspose.words.License();
        license.setLicense(getAssets().open("Aspose.Total.Product.Family.lic"));
        if(license.isLicensed()){
            Log.i(TAG,"License is available");
            Document doc = new Document(getAssets().open("form_templete_1.docx"));
            doc.getMailMerge().setFieldMergingCallback(new HandleMergeImageField());
            doc.getMailMerge().execute(new String[]{"Title","Enterprise","MyImage"},new Object[]{"My title","My enterprise name",getImageBtyes()});
            doc.save(Environment.getExternalStorageDirectory().getPath()+"/out.docx");
            FileInputStream fis = new FileInputStream(Environment.getExternalStorageDirectory().getPath()+"/out.docx");
            Document doc1 = new Document(fis);
            doc1.save(Environment.getExternalStorageDirectory().getPath()+"/out.pdf");
        }else{
            Log.i(TAG,"License is no available");
        }

上面这段代码可以插入图片,但是文字没有被替换(基于Android4.0.3开发的)
库文件:aspose-words-18.3-android.via.java.jar
一共存在两个问题
1、文字未被替换
2、图片没有指定大小,比如刚好填充占位符所在的表格空间
package.zip (56.2 KB)

所有相关文件在附件中


#2

@DobbinY,

请同时压缩并附上您在此处显示正确行为的预期文档,以供我们参考。 您可以使用MS Word创建预期文档。

其次,缺少HandleMergeImageField的代码。 还请提供完整的源代码,没有编译错误,这有助于我们在最终重现同样的问题。
谢谢你的合作。


#3

package.zip (70.1 KB)
你好,我重新打包了,麻烦你在看一下,我这里没有编译错误


#4

@DobbinY,

我们正在检查这个场景,很快就会回复你。


#5

@DobbinY,

首先,我修复了你的模板文档。 请看这个新文件:
form_templete-modified.zip (11.9 KB)

其次,请尝试使用以下代码:

static class HandleMergeImageField implements IFieldMergingCallback {
    @Override
    public void fieldMerging(FieldMergingArgs fieldMergingArgs) throws Exception {
        DocumentBuilder builder = new DocumentBuilder(fieldMergingArgs.getDocument());
        builder.moveToMergeField(fieldMergingArgs.getFieldName());
        builder.write(fieldMergingArgs.getFieldValue().toString());
    }

    @Override
    public void imageFieldMerging(ImageFieldMergingArgs imageFieldMergingArgs) {
        FieldMergeField mf = imageFieldMergingArgs.getField();
        Cell parentCell = (Cell) mf.getStart().getAncestor(NodeType.CELL);
        if (parentCell != null) {
            double width = parentCell.getCellFormat().getWidth() - parentCell.getCellFormat().getLeftPadding() - parentCell.getCellFormat().getRightPadding();
            double height = parentCell.getParentRow().getRowFormat().getHeight();

            imageFieldMergingArgs.setImageWidth(new MergeFieldImageDimension(width));
            imageFieldMergingArgs.setImageHeight(new MergeFieldImageDimension(height));
        }

        InputStream sbs = new ByteArrayInputStream((byte[]) imageFieldMergingArgs.getFieldValue());
        imageFieldMergingArgs.setImageStream(sbs);
    }
}

希望,这有帮助。


#6

谢谢,已经运行正常了,但是我不知道你修复了模板文档哪里的问题呢,因为后期我们需要自己制作模版文档


#7

@DobbinY,

请检查我们用于修改模板文档的以下屏幕截图中的步骤。


#8

感谢,按照截图步聚操作,已经可以了


#9

@DobbinY,

如果您有进一步的询问或需要任何帮助,请告诉我们。 我们很乐意为您提供帮助。