IllegalAccessError

@tahir.manzoor 您好
在使用doc.getMailMerge().setFieldMergingCallback()這個callback方法的時候,會出現IllegalAccessError 的錯誤訊息,但我看fieldMerging已經設定為 public狀態,這會是哪邊的問題呢?IllegalAccessError.7z (8.0 KB)

@lfengh

能否请您将输入的 Word 文档压缩并附在此处进行测试? 我们将调查该问题并为您提供更多相关信息。

@tahir.manzoor
您好,輸入的word文檔壓縮好如附件。askOnForum.7z (17.3 KB)

@lfengh

很遗憾,我们最终无法执行您的代码。 请创建一个简单的 Java 应用程序(没有编译错误的源代码),以帮助我们在我们端重现您的问题并将其附在此处进行测试。

@tahir.manzoor

您好,已修改原始碼並上傳如附件asposeHelp.7z (17.0 KB),另想問doc.getMailMerge().setFieldMergingCallback(…),的參數是要餵一個Java inner class才可以嗎?

@lfengh

我们已经使用最新版本的 Aspose.Words for Java 21.9 测试了该场景,但没有发现共享问题。 所以,请使用 Aspose.Words for Java 21.9

您可以将 Aspose.Words 与 Java API 一起使用。 是的,您可以使用 Java 内部类,如下所示。

doc.getMailMerge().setFieldMergingCallback(new IFieldMergingCallback() {
	 private DocumentBuilder mBuilder;
      public void fieldMerging(FieldMergingArgs e) throws Exception {
          if (mBuilder == null)
              mBuilder = new DocumentBuilder(e.getDocument());
                       if ("Fridge".equals(e.getFieldName())) {
					
                     Row row = (Row)e.getField().getStart().getAncestor(NodeType.ROW);
                   
					    if(row != null)
                     {
                      	
                         mBuilder.moveToMergeField("Fridge");
                         StructuredDocumentTag checkBox = new StructuredDocumentTag(mBuilder.getDocument(), SdtType.CHECKBOX, MarkupLevel.INLINE);
                         StructuredDocumentTag checkBox2 = new StructuredDocumentTag(mBuilder.getDocument(), SdtType.CHECKBOX, MarkupLevel.INLINE);
                      
						   if (e.getFieldValue().equals("Y")){
						   
                         checkBox.setChecked(true);
						
						   checkBox2.setChecked(false);

                         }else if (e.getFieldValue().equals("N")){
						   
                         checkBox.setChecked(false);
						
						   checkBox2.setChecked(true);

                         }
						   
                         mBuilder.insertNode(checkBox);
						   mBuilder.write("是");
                         mBuilder.insertNode(checkBox2);
						   mBuilder.write("否");	   
                    }
                 }
				   
				   if ("Freezer".equals(e.getFieldName())) {
					
                     Row row = (Row)e.getField().getStart().getAncestor(NodeType.ROW);
                   
					    if(row != null)
                     {
                      	
                         mBuilder.moveToMergeField("Freezer");
                         StructuredDocumentTag checkBox = new StructuredDocumentTag(mBuilder.getDocument(), SdtType.CHECKBOX, MarkupLevel.INLINE);
                         StructuredDocumentTag checkBox2 = new StructuredDocumentTag(mBuilder.getDocument(), SdtType.CHECKBOX, MarkupLevel.INLINE);
                      
						   if (e.getFieldValue().equals("Y")){
						   
                         checkBox.setChecked(true);
						
						   checkBox2.setChecked(false);

                         }else if (e.getFieldValue().equals("N")){
						   
                         checkBox.setChecked(false);
						
						   checkBox2.setChecked(true);

                         }
						   
                         mBuilder.insertNode(checkBox);
						   mBuilder.write("是");
                         mBuilder.insertNode(checkBox2);
						   mBuilder.write("否");	   
                    }
                 }
	}
@Override
public void imageFieldMerging(ImageFieldMergingArgs arg0) throws Exception {
	// TODO Auto-generated method stub
	
}});