Új hozzászólás Aktív témák

  • E.Kaufmann

    veterán

    válasz E.Kaufmann #10544 üzenetére

    Tegnap picit még püföltem a kódon:
    - kettévettem a poireplace függvényt,
    - megcsináltam, hogy elvileg működjön fejléccel és lábléccel is, de ez nem lett alaposabban tesztelve
    - néha írt hibaüzeneteket a Word, hogy a fájl meg van már nyitva, így bezártam az input és output állományt is a függvény végén
    - kicsit sztrímesítettem, ha valakinek gondja lenne vele, távolítsa el a kódból elsőnek a .parallel() részeket:
    private static void paragReplace(XWPFParagraph p,java.util.HashMap<String,String> hs){
    String text = p.getText();

    boolean change=false;
    for ( String key : hs.keySet() ) {
    if (text != null && text.contains("${"+key+"}")) {
    text = text.replace("${"+key+"}", hs.get(key));
    change=true;
    }
    }

    if(change){
    List<XWPFRun> runs = p.getRuns();

    if (runs != null) {
    String ff=runs.get(0).getFontFamily();
    int fs=runs.get(0).getFontSize();
    removeAllRuns(p);
    insertReplacementRuns(p,text,ff,fs);
    }
    }
    }

    public static void poiReplace(java.util.HashMap<String,String> hs, String in, String out) throws Exception
    {
    //Bekezdések
    java.io.FileInputStream ins=new java.io.FileInputStream(in);
    XWPFDocument doc = new XWPFDocument(ins);
    doc.getParagraphs().stream().parallel()
    .forEach((p) -> {
    paragReplace(p,hs);
    }
    );

    //Táblázatok
    doc.getTables().stream().parallel()
    .forEach((tbl) -> {tbl.getRows().stream()
    .forEach((row) -> {row.getTableCells().stream()
    .forEach((cell) -> {cell.getParagraphs().stream()
    .forEach((p) -> {
    paragReplace(p,hs);
    });
    });
    });
    }
    );

    //Fejléc bekezdések és táblázatok
    doc.getHeaderList().stream().forEach( (hdr) ->
    {

    hdr.getParagraphs().stream().parallel()
    .forEach((p) -> {
    paragReplace(p,hs);
    });

    hdr.getTables().stream().parallel()
    .forEach((tbl) -> {tbl.getRows().stream()
    .forEach((row) -> {row.getTableCells().stream()
    .forEach((cell) -> {cell.getParagraphs().stream()
    .forEach((p) -> {
    paragReplace(p,hs);
    });
    });
    });
    });

    }
    );

    //Lábléc bekezdések és táblázatok
    doc.getFooterList().stream().forEach( (ftr) ->
    {

    ftr.getParagraphs().stream().parallel()
    .forEach((p) -> {
    paragReplace(p,hs);
    });

    ftr.getTables().stream().parallel()
    .forEach((tbl) -> {tbl.getRows().stream()
    .forEach((row) -> {row.getTableCells().stream()
    .forEach((cell) -> {cell.getParagraphs().stream()
    .forEach((p) -> {
    paragReplace(p,hs);
    });
    });
    });
    });

    }
    );

    doc.write(new java.io.FileOutputStream(out));
    doc.close();
    ins.close();
    }

Új hozzászólás Aktív témák