Hirdetés
- Kicsit visszafogottabban nyávog az Intel Wildcat Lake
- Gyorsabb processzort igen, memóriát alig kapott a Xiaomi új HD tévéokosítója
- Állandó tisztaság a be quiet! Dark Sweeper tápegységgel
- Hivatalosan is elkezd védekezni az Intel csodafegyvere ellen az új Geekbench
- Természetfeletti erő? Acer Nitro V 16 AI notebook Gorgon Pointtal
- Projektor topic
- Vezeték nélküli fejhallgatók
- Fejhallgató erősítő és DAC topik
- Szünetmentes tápegységek (UPS)
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- AMD GPU-k jövője - amit tudni vélünk
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- AMD Navi Radeon™ RX 9xxx sorozat
- OLED TV topic
- Épített vízhűtés (nem kompakt) topic
Új hozzászólás Aktív témák
-
E.Kaufmann
veterán
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égeit
private 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
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- gban: Ingyen kellene, de tegnapra
- Projektor topic
- Elkalapálta a snapdragonos Galaxy S26 az exynososat
- Witcher topik
- Macska topik
- Vezeték nélküli fejhallgatók
- Fejhallgató erősítő és DAC topik
- Autós topik
- Mass Effect pótlék? - Rövid játékmenet videón az EXODUS
- Okos otthon - Home Assistant, openHAB és más nyílt rendszerek
- További aktív témák...
- Asus ProArt P16 4K UHD+ OLED érintő Ryzen AI 9 HX 370 RTX 4070 64GB 2TB NVMe gar
- Dell i7 1355u(12x5Ghz)15,6"FullHD IPS,16/48GB RAM,512GBSSD,világító billentyűzet,Új állapot
- Microsoft Surface Laptop 3 13.5" fekete i5-1035G7 16GB 512GB 1 év garancia
- Asus ROG Strix Scar G634 / 16" Mini LED / i9-14900HX / RTX 4090 16GB 175W / 32GB / 2TB + extrák
- Apple iPhone 13 Mini 128GB Fekete Színben 100% Akkuval 6 Hónap Jótállással
- Apple iPhone 13 128 GB Midnight 100% Akkumulátor 1 év Garancia Beszámítás Házhozszállítás
- szinteÚJ Dell 15 i7 1355U 32GB 1TB 120Hz!!!!!!
- Számlás!Windows 10 Pro 11 Pro,Windows 10 Home 11 Home, Office 2016,2019,2021 ,Vírusirtok,Mac
- 243 - Lenovo Legion Pro 7 (16IAX10H) - Intel Core U9 275HX, RTX 5080 (ELKELT)
- Dell USB-C, Thunderbolt 3, TB3, TB4 dokkolók (K20A) WD19TB / WD19TBS / WD22TB4
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest


