- Út a Korea turistaparadicsomba, amiről talán még sosem hallottál: Csedzsu-sziget
- Perplexity Pro AI képszerkesztési limit -egy képgenerátor függő tapasztalatai
- Adattár lemez előkészítése távlati Windows telepítéshez
- Jelszóvédett IBM Thinkpad R50e működőképessé tétele.
- ATK Blazing Sky X1 Ultimate Metallic Red gamer egér
- sziku69: Szólánc.
- Luck Dragon: Asszociációs játék. :)
- sziku69: Fűzzük össze a szavakat :)
- Doky586: Adattár lemez előkészítése távlati Windows telepítéshez
- gban: Ingyen kellene, de tegnapra
- sh4d0w: Árnyékos sarok
- GoodSpeed: Bye PET Palack, hello SodaStream
- Brogyi: CTEK akkumulátor töltő és másolatai
- bambano: Bambanő háza tája
- eBay-es kütyük kis pénzért
Új hozzászólás Aktív témák
-
válasz
E.Kaufmann #10526 üzenetére
Ha valakinek kellene DOCX "sablon" (változókkal ellátott DOCX doksi) kitöltése Apache POI-val (és StringUtils-szal), akkor itt az én módszerem.
Két-három StackOverFlow-os példát kicsit össze kellett gyúrni, hogy megtalálja a változókat és sortörést és formázást is jól kezeljen:
A lényeg, hogy a változónevek a docx-ben ${változónév} formában szerepeljenek, valamint a változók és a helyettesítő szövegek egy HashMap<String,String> objektumban vannak, ahol a key a változónév csupaszon, a value meg a helyettesítő érték.
Docx4j így kezelte, és nem akartam mindent újraírni.
Mindenesetre mind az IDE mind a java fellélegzett, hogy kiszedtem a Docx4j-t meg a függőségeitprivate static void removeAllRuns(XWPFParagraph paragraph) {
int size = paragraph.getRuns().size();
for (int i = 0; i < size; i++) {
paragraph.removeRun(0);
}
}
private static void insertReplacementRuns(
XWPFParagraph paragraph, String replacedText,
String fontFamily, int fontSize)
{
String[] replacementTextSplitOnCarriageReturn = StringUtils.split(replacedText, "\n");
XWPFRun newRun = paragraph.insertNewRun(0);
newRun.setFontFamily(fontFamily);
newRun.setFontSize(fontSize);
String part = replacementTextSplitOnCarriageReturn[0];
newRun.setText(part,0);
for (int j = 1; j < replacementTextSplitOnCarriageReturn.length; j++) {
part = replacementTextSplitOnCarriageReturn[j];
newRun.addBreak();
newRun.setText(part);
}
}
public static void poiReplace(java.util.HashMap<String,String> hs, String in, String out) throws Exception
{
XWPFDocument doc = new XWPFDocument(new java.io.FileInputStream(in));
for (XWPFParagraph p : doc.getParagraphs()) {
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;
System.out.println("\nx\n"+p.getText()+"\n"+key+"\n"+hs.get(key));
}
}
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);
}
}
}
for (XWPFTable tbl : doc.getTables()) {
for (XWPFTableRow row : tbl.getRows()) {
for (XWPFTableCell cell : row.getTableCells()) {
for (XWPFParagraph p : cell.getParagraphs()) {
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);
}
}
}
}
}
}
doc.write(new java.io.FileOutputStream(out));
doc.close();
}A poiReplace függvényt kell hívni, a másik kettőt meg a poiReplace hívogatja.
Új hozzászólás Aktív témák
Hirdetés
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- A fociról könnyedén, egy baráti társaságban
- sziku69: Szólánc.
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- Milyen TV-t vegyek?
- PlayStation 1 / 2
- Apple Watch
- HiFi műszaki szemmel - sztereó hangrendszerek
- Ingatlanos topic!
- Milyen videókártyát?
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- További aktív témák...
- Lenovo ThinkPad P15v Tervező Vágó Laptop -65% 15,6" i7-10850H 16/512 QUADRO P620 4GB
- Szép! Lenovo ThinkPad P53s "Kis Tervező Vágó Laptop" -65% 15,6" i7-8665U 32/512 QUADRO P520 2GB FHD
- Zalman ZF9225ATH AMD CPU hűtő
- MSI NX8600GT-E (MS-V091) PCI-E videokártya
- Asus P5QE Retro alaplap, + Xeon X5450 CPU, + hűtő
- HP 150W töltők (19.5V 7.7A) kis kék, kerek, 4.5x3.0mm + tápkábel
- Legjobb kijelzős! ThinkPad T14s Gen 2 i5-1135G7 16GB 512GB FHD - 400nit! magyarbill 1 év garancia
- ÁRGARANCIA!Épített KomPhone i5 13400F 16/32/64GB RAM RTX 5060 Ti 8GB GAMER PC termékbeszámítással
- GYÖNYÖRŰ iPhone 12 Pro 128GB Graphite - 1 ÉV GARANCIA - Kártyafüggetlen, MS3258,100% Akkumulátor
- PS Plus előfizetések kedvező áron
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest