扫描文档中的某些文本,替换某些单词(这些单词应该是变量)并使用Java中的Apache POI保存到新文档中

时间:2018-05-07 09:36:41

标签: java json gson apache-poi

我有json文件,我使用Gson库将json对象解析为java对象。下一步是创建主类,其中在Apache POI的帮助下,读取了准备好的docx文件,在文本中进行了一些更改,并创建了带有更改的新文档。我遇到的问题是应该更改的文本需要是可变的(来自json文件)。我的意思是" name"和" testName"两者都应该是变量或方法,所以我可以从text.contains中调用它们。你能否表明我的错误和正确的方法来完成任务。提前致谢。 这是我的代码`

 public class main {
 public static void gson() {
    Gson gson = new Gson();
    BufferedReader br = null;

    try {
        br = new BufferedReader(new FileReader("jsonn.json"));
        Result result = gson.fromJson(br, Result.class);
        if (result != null) {

            result.getName();
            result.getLastname();
            System.out.println(result.getName());
            System.out.println(result.getLastname());
            for (Phone p : result.getPhones()) {
                p.getType();
                p.getNum();
                System.out.println(p.getType() + ": " + p.getNum());
                // System.out.println(p.getType()+" : "+p.getNum());
            }

        }
    } catch (FileNotFoundException e) {

        e.printStackTrace();
    } finally {
        if (br != null) {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}}


public class Result {
@SerializedName("name")
@Expose
private String name;
@SerializedName("lastname")
@Expose
private String lastname;
@SerializedName("phones")
@Expose
private List<Phone> phones = null;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getLastname() {
    return lastname;
}

public void setLastname(String lastname) {
    this.lastname = lastname;
}

public List<Phone> getPhones() {
    return phones;
}

public void setPhones(List<Phone> phones) {
    this.phones = phones;
}}



public class Phone {
@SerializedName("name")
@Expose
private String name;
@SerializedName("lastName")
@Expose
private String lastName;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

@SerializedName("num")
@Expose
private String num;
@SerializedName("type")
@Expose
private String type;

public String getNum() {
    return num;
}

public void setNum(String num) {
    this.num = num;
}

public String getType() {
    return type;
}

public void setType(String type) {
    this.type = type;
}}



public class Read {
public static void main(String[] args) throws InvalidFormatException, 
IOException {

    main.gson();

    XWPFDocument doc = new XWPFDocument(OPCPackage.open("Шаблон.docx"));
    Result res = new Result();
    String replaceName = res.getName();
    for (XWPFParagraph p : doc.getParagraphs()) {
        List<XWPFRun> runs = p.getRuns();
        if (runs != null) {
            for (XWPFRun r : runs) {
                String text = r.getText(0);
                if (text != null && text.contains("name")) {
                    text = text.replace("name", "Alex");
                    r.setText(text, 0);
                }
            }
        }
    }
    for (XWPFTable tbl : doc.getTables()) {
        for (XWPFTableRow row : tbl.getRows()) {
            for (XWPFTableCell cell : row.getTableCells()) {
                for (XWPFParagraph p : cell.getParagraphs()) {
                    for (XWPFRun r : p.getRuns()) {
                        String text = r.getText(0);
                        if (text != null && text.contains("name")) {
                            text = text.replace("name", "Alex");
                            r.setText(text, 0);
                        }
                    }
                }
            }
        }
    }
    doc.write(new FileOutputStream("Пример.docx"));

}}

`

这是json文件:

{
"name":"testName",
"lastname":"testLastName",
"phones":[
{
  "num":"9000000",
  "type":"mobile"
},
{
  "num":"1000000",
  "type":"home"
} ]}

0 个答案:

没有答案