• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

печать поля rich text с колонтитулом

k85

Lotus Team
11.10.2011
260
1
BIT
0
надо все данные из одного поля rich text отправить на печать, но при этом добавить сразу нижний колонтитул, который состоит из текста + номер страницы .
возможно ли это ? и как проще подойти к этому?
у меня вариант из поля rich text выгрузить в word, но как-то добавить колонтитул надо?!, а потом отправить на печать
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 949
609
BIT
257
надо все данные из одного поля rich text отправить на печать, но при этом добавить сразу нижний колонтитул, который состоит из текста + номер страницы .
возможно ли это ? и как проще подойти к этому?
у меня вариант из поля rich text выгрузить в word, но как-то добавить колонтитул надо?!, а потом отправить на печать
в 11-ой ЕМНИП есть как ПДФ...
если говорить о гибкости подхода - есть POI и Aspose, там поиск и замена и т.п.
у POI не помню - у Aspose поиск и замена работает везде (и колонтитулах в тч)
Aspose может сразу и в ПДФ (через ворд), простенькие сервлеты для томката набаянил lmike-mnc/AsposeDocxProcess
работает и без домины (жсон принимает)
Остаётся задача выгрузки форматированного текста в "ворд" из РТ (ну вот здесь придется заморочится)
 

k85

Lotus Team
11.10.2011
260
1
BIT
0
в 11-ой ЕМНИП есть как ПДФ...
если говорить о гибкости подхода - есть POI и Aspose, там поиск и замена и т.п.
у POI не помню - у Aspose поиск и замена работает везде (и колонтитулах в тч)
Aspose может сразу и в ПДФ (через ворд), простенькие сервлеты для томката набаянил lmike-mnc/AsposeDocxProcess
работает и без домины (жсон принимает)
Остаётся задача выгрузки форматированного текста в "ворд" из РТ (ну вот здесь придется заморочится)
у меня сейчас с подформы просто system actions Print печатает , все супер выводит с поля Body, но без колонтитула
то есть все-таки через ворд искать возможность выгрузки поля и потом колонтитул?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 949
609
BIT
257
у меня сейчас с подформы просто system actions Print печатает , все супер выводит с поля Body, но без колонтитула
то есть все-таки через ворд искать возможность выгрузки поля и потом колонтитул?
основная "проблема" в РТ - нет контроля разбиения на страницы, т.к. зависит от контекста вывода (а в ЛС его нет)
то получаем - нужна система, где этот контроль есть
НО само форматирование РТ будет под вопросом (отступы/шрифты/таблицы/картинки...) если это "неважно" - выводить во внешнюю систему
ворд только как один из форматов (docx если конкретно), я говорю о системах которые работают я этим форматом
этим системам можно подсовывать шаблоны (наполняемые содержимым)
я не знаю - что там у вас в РТ
использовать сам МСворд для этого я смысла не вижу (лишние заботы об МСО и морочиться с его "особенностями")
описанная выше схема - позволяет подставлять текст, заменяя его в шаблоне, я вызываю её через NotesHttpRequest
 

k85

Lotus Team
11.10.2011
260
1
BIT
0
основная "проблема" в РТ - нет контроля разбиения на страницы, т.к. зависит от контекста вывода (а в ЛС его нет)
то получаем - нужна система, где этот контроль есть
НО само форматирование РТ будет под вопросом (отступы/шрифты/таблицы/картинки...) если это "неважно" - выводить во внешнюю систему
ворд только как один из форматов (docx если конкретно), я говорю о системах которые работают я этим форматом
этим системам можно подсовывать шаблоны (наполняемые содержимым)
я не знаю - что там у вас в РТ
использовать сам МСворд для этого я смысла не вижу (лишние заботы об МСО и морочиться с его "особенностями")
в поле текст, таблица, вычисляемы текст + картинка
 

k85

Lotus Team
11.10.2011
260
1
BIT
0
если наборы эти конечны - можно создать шаблон docx а вычисляемый текст подставлять в него
да, это определенное количество строк в таблице и определенный текст. то есть все уже в подформе определенное только вычисляемые данные туда подставляются
сейчас поищу информацию про "можно создать шаблон docx"
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 949
609
BIT
257
да, это определенное количество строк в таблице и определенный текст. то есть все уже в подформе определенное только вычисляемые данные туда подставляются
сейчас поищу информацию про "можно создать шаблон docx"
выше ссылка на проект ГХ - там уже все сделано, описан шаблон
ток ограничение - Aspose (он платный)
теоретически можно сделать и на POI , но тогда не будет получения "произвольного" вывода (в аспоз возможны многие форматы на выход)
томкат можно разворачивать локально (я так и делаю)
"поля" задаются как <field name> (в описании проекта видно)
поля могут присутствовать в любых колонтитулах (хидеры/футеры)
 
Последнее редактирование:

k85

Lotus Team
11.10.2011
260
1
BIT
0
выше ссылка на проект ГХ - там уже все сделано, описан шаблон
ток ограничение - Aspose (он платный)
теоретически можно сделать и на POI , но тогда не будет получения "произвольного" вывода (в аспоз возможны многие форматы на выход)
томкат можно разворачивать локально (я так и делаю)
"поля" задаются как <field name> (в описании проекта видно)
поля могут присутствовать в любых колонтитулах (хидеры/футеры)
вижу , что платное...
попробую другие варианты искать с бесплатным решением
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 949
609
BIT
257
вижу , что платное...
попробую другие варианты искать с бесплатным решением
POI, но я не писал для него такой сервис, из-за ограничения по форматам вывода
есть либы java
Java:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
//http://stackoverflow.com/questions/22268898/replacing-a-text-in-apache-poi-xwpf
public class XWPFUtils {
    public static final Map<String,String> map=new HashMap<String, String>();
    public static final List<String> tags=new ArrayList<String>();
    public String[] getStringArray(int cnt) {
        List<String> arr= new ArrayList<String>(Collections.nCopies(cnt, ""));
        return (String[]) arr.toArray(new String[] {});
//        return new String[cnt];
    }
    public static void clear() {
        map.clear();
    }
    public static String add(String key, String value) {
        return map.put(key,value);
    }
    public String[] getTags(String fnameIN, String ptn) {
        XWPFDocument doc=null;
        FileInputStream fis=null;
        tags.clear();
        Pattern pattern=Pattern.compile(ptn);
        try {
            fis=new FileInputStream(fnameIN);
            doc = new XWPFDocument(OPCPackage.open(fis));
        } catch (InvalidFormatException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        for (XWPFParagraph p : doc.getParagraphs()) {
            List<XWPFRun> runs = p.getRuns();
            if (runs != null) {
                for (XWPFRun r : runs) {
                    String s=paragraphMatch(r,pattern);
                    if (s!=null) {tags.add(s);}
                }
            }
            for (XWPFTable tbl : doc.getTables()) {
                for (XWPFTableRow row : tbl.getRows()) {
                    for (XWPFTableCell cell : row.getTableCells()) {
                        for (XWPFParagraph p1 : cell.getParagraphs()) {
                            for (XWPFRun r : p1.getRuns()) {
                                String s=paragraphMatch(r,pattern);
                                if (s!=null) {tags.add(s);}
                            }
                        }
                    }
                }
            }
        }
        try {
            System.out.println("Closing input doc and stream...");
            if (fis!= null)fis.close();
            
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return tags.toArray(new String[tags.size()]);
    }
    /**
     * @param fnameIN: file name for source Word doc
     * @param fnameOUT: file name for result Word doc
     * uses map for word replacing
     */
    public void replaceFromArray(String fnameIN, String fnameOUT) {
        XWPFDocument doc=null;
        FileInputStream fis=null;
        try {
            fis=new FileInputStream(fnameIN);
            doc = new XWPFDocument(OPCPackage.open(fis));
        } catch (InvalidFormatException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        for (XWPFParagraph p : doc.getParagraphs()) {
            List<XWPFRun> runs = p.getRuns();
            if (runs != null) {
                for (XWPFRun r : runs) {
                    paragraphReplace(r);
                }
            }
            for (XWPFTable tbl : doc.getTables()) {
                for (XWPFTableRow row : tbl.getRows()) {
                    for (XWPFTableCell cell : row.getTableCells()) {
                        for (XWPFParagraph p1 : cell.getParagraphs()) {
                            for (XWPFRun r : p1.getRuns()) {
                                paragraphReplace(r);
                            }
                        }
                    }
                }
            }
        }
        try {
            doc.write(new FileOutputStream(fnameOUT));
            System.out.println("Done");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally {
            try {
                System.out.println("Closing input doc and stream...");
                //if (doc!=null)doc.close();
                if (fis!= null)fis.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    public void replaceFromArray(String []arrFrom, String[] arrTo, String fnameIN, String fnameOUT) {
        XWPFDocument doc=null;
        FileInputStream fis=null;
        try {
            fis=new FileInputStream(fnameIN);
            doc = new XWPFDocument(OPCPackage.open(fis));
        } catch (InvalidFormatException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        for (XWPFParagraph p : doc.getParagraphs()) {
            List<XWPFRun> runs = p.getRuns();
            if (runs != null) {
                for (XWPFRun r : runs) {
                    paragraphReplace(arrFrom,arrTo,r);
                }
            }
            for (XWPFTable tbl : doc.getTables()) {
                for (XWPFTableRow row : tbl.getRows()) {
                    for (XWPFTableCell cell : row.getTableCells()) {
                        for (XWPFParagraph p1 : cell.getParagraphs()) {
                            for (XWPFRun r : p1.getRuns()) {
                                paragraphReplace(arrFrom,arrTo,r);
                            }
                        }
                    }
                }
            }
        }
        try {
            doc.write(new FileOutputStream(fnameOUT));
            System.out.println("Done");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally {
            try {
                System.out.println("Closing input doc and stream...");
                //if (doc!=null)doc.close();
                if (fis!= null)fis.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            /*                if (pkg!=null)
                try {
                    pkg.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
             */            }

    }
    private String paragraphMatch(XWPFRun r, Pattern pattern) {
        String text = r.getText(0);
        if (text != null) {
            //Pattern ptn = Pattern.compile(pattern);
            Matcher matcher = pattern.matcher(text);
            if (matcher.find()) {
                System.out.println(matcher.group(0));
                return matcher.group(0);
            }
        }
        return null;
    }

    private void paragraphReplace( String[] arrFrom, String[] arrTo, XWPFRun r) {
        String text = r.getText(0);
        if (text != null) {
            for(int i=0; i<arrFrom.length;i++) {
                if (arrFrom[i].length()>0) {
                    if (text.contains(arrFrom[i])) {
                        text = text.replace(arrFrom[i], arrTo[i]);
                        System.out.println("Replacement:"+arrFrom[i]+"|"+arrTo[i]);
                        r.setText(text, 0);
                    }
                }
            }
        }
    }
    private void paragraphReplace(XWPFRun r) {
        String text = r.getText(0);
        if (text != null) {
            for(Map.Entry<String, String> entry : map.entrySet()) {
                if(entry.getKey().length()>0) {
                    if (text.contains(entry.getKey())) {
                        text=text.replace(entry.getKey(), entry.getValue());
                        System.out.println("Replacement:"+entry.getKey()+"|"+entry.getValue());
                        //r.setBold(true);
                        r.setText(text, 0);
                    }
                }
            }
        }
    }
}
Java:
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.util.List; 
 
import org.apache.poi.xwpf.usermodel.XWPFDocument; 
import org.apache.poi.xwpf.usermodel.XWPFParagraph; 
import org.apache.poi.xwpf.usermodel.XWPFTable; 
import org.apache.poi.xwpf.usermodel.XWPFTableCell; 
import org.apache.poi.xwpf.usermodel.XWPFTableRow; 
 
public class XWPFTables { 
 
    public static void main(String[] args)throws IOException { 
        String fileName = args[0]; 
        InputStream fis = new FileInputStream(fileName); 
        XWPFDocument document = new XWPFDocument(fis); 
        List<XWPFParagraph> paragraphs = document.getParagraphs(); 
 
/*        for (int x=0; x<paragraphs.size();x++) 
        { 
            XWPFParagraph paragraph = paragraphs.get(x); 
            System.out.println(paragraph.getParagraphText()); 
        } 
*/        List<XWPFTable> tables = document.getTables(); 
        for (int x=0; x<tables.size();x++) 
        { 
            XWPFTable table = tables.get(x); 
            List<XWPFTableRow> tableRows = table.getRows(); 
            //tableRows.remove(x); 
            for (int r=0; r<tableRows.size();r++) 
            { 
                System.out.println("Row "+ (r+1)+ ":"); 
                XWPFTableRow tableRow = tableRows.get(r); 
                List<XWPFTableCell> tableCells = tableRow.getTableCells(); 
                for (int c=0; c<tableCells.size();c++) 
                { 
                    System.out.print("Column "+ (c+1)+ ": "); 
                    XWPFTableCell tableCell = tableCells.get(c); 
                    //tableCell.setText("TAE"); 
                    String tableCellVal = tableCell.getText(); 
                    if ((c+1)==2){ 
                        if (tableCellVal!=null){ 
                            if (tableCellVal.length()>0){ 
                                 char c1 = tableCellVal.charAt(0); 
                                 String s2 = "-TEST"; 
                                 char c2 = s2.charAt(0); 
                                 String test = tableCell.getText().replace(tableCellVal,s2); 
                                 tableCell.setText(test); 
                            }else{ 
                                //tableCell.setText("NULL"); 
                            } 
                        } 
                    } 
                    System.out.println("tableCell.getText(" + (c) + "):" + tableCellVal); 
                } 
            } 
            System.out.println("\n"); 
        } 
        OutputStream out = new FileOutputStream(fileName); 
        document.write(out); 
        out.close(); 
    } 
}
 
Последнее редактирование:
  • Нравится
Реакции: k85

k85

Lotus Team
11.10.2011
260
1
BIT
0
POI, но я не писал для него такой сервис, из-за ограничения по форматам вывода
есть либы java
Java:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
//http://stackoverflow.com/questions/22268898/replacing-a-text-in-apache-poi-xwpf
public class XWPFUtils {
    public static final Map<String,String> map=new HashMap<String, String>();
    public static final List<String> tags=new ArrayList<String>();
    public String[] getStringArray(int cnt) {
        List<String> arr= new ArrayList<String>(Collections.nCopies(cnt, ""));
        return (String[]) arr.toArray(new String[] {});
//        return new String[cnt];
    }
    public static void clear() {
        map.clear();
    }
    public static String add(String key, String value) {
        return map.put(key,value);
    }
    public String[] getTags(String fnameIN, String ptn) {
        XWPFDocument doc=null;
        FileInputStream fis=null;
        tags.clear();
        Pattern pattern=Pattern.compile(ptn);
        try {
            fis=new FileInputStream(fnameIN);
            doc = new XWPFDocument(OPCPackage.open(fis));
        } catch (InvalidFormatException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        for (XWPFParagraph p : doc.getParagraphs()) {
            List<XWPFRun> runs = p.getRuns();
            if (runs != null) {
                for (XWPFRun r : runs) {
                    String s=paragraphMatch(r,pattern);
                    if (s!=null) {tags.add(s);}
                }
            }
            for (XWPFTable tbl : doc.getTables()) {
                for (XWPFTableRow row : tbl.getRows()) {
                    for (XWPFTableCell cell : row.getTableCells()) {
                        for (XWPFParagraph p1 : cell.getParagraphs()) {
                            for (XWPFRun r : p1.getRuns()) {
                                String s=paragraphMatch(r,pattern);
                                if (s!=null) {tags.add(s);}
                            }
                        }
                    }
                }
            }
        }
        try {
            System.out.println("Closing input doc and stream...");
            if (fis!= null)fis.close();
           
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return tags.toArray(new String[tags.size()]);
    }
    /**
     * @param fnameIN: file name for source Word doc
     * @param fnameOUT: file name for result Word doc
     * uses map for word replacing
     */
    public void replaceFromArray(String fnameIN, String fnameOUT) {
        XWPFDocument doc=null;
        FileInputStream fis=null;
        try {
            fis=new FileInputStream(fnameIN);
            doc = new XWPFDocument(OPCPackage.open(fis));
        } catch (InvalidFormatException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        for (XWPFParagraph p : doc.getParagraphs()) {
            List<XWPFRun> runs = p.getRuns();
            if (runs != null) {
                for (XWPFRun r : runs) {
                    paragraphReplace(r);
                }
            }
            for (XWPFTable tbl : doc.getTables()) {
                for (XWPFTableRow row : tbl.getRows()) {
                    for (XWPFTableCell cell : row.getTableCells()) {
                        for (XWPFParagraph p1 : cell.getParagraphs()) {
                            for (XWPFRun r : p1.getRuns()) {
                                paragraphReplace(r);
                            }
                        }
                    }
                }
            }
        }
        try {
            doc.write(new FileOutputStream(fnameOUT));
            System.out.println("Done");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally {
            try {
                System.out.println("Closing input doc and stream...");
                //if (doc!=null)doc.close();
                if (fis!= null)fis.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    public void replaceFromArray(String []arrFrom, String[] arrTo, String fnameIN, String fnameOUT) {
        XWPFDocument doc=null;
        FileInputStream fis=null;
        try {
            fis=new FileInputStream(fnameIN);
            doc = new XWPFDocument(OPCPackage.open(fis));
        } catch (InvalidFormatException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        for (XWPFParagraph p : doc.getParagraphs()) {
            List<XWPFRun> runs = p.getRuns();
            if (runs != null) {
                for (XWPFRun r : runs) {
                    paragraphReplace(arrFrom,arrTo,r);
                }
            }
            for (XWPFTable tbl : doc.getTables()) {
                for (XWPFTableRow row : tbl.getRows()) {
                    for (XWPFTableCell cell : row.getTableCells()) {
                        for (XWPFParagraph p1 : cell.getParagraphs()) {
                            for (XWPFRun r : p1.getRuns()) {
                                paragraphReplace(arrFrom,arrTo,r);
                            }
                        }
                    }
                }
            }
        }
        try {
            doc.write(new FileOutputStream(fnameOUT));
            System.out.println("Done");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally {
            try {
                System.out.println("Closing input doc and stream...");
                //if (doc!=null)doc.close();
                if (fis!= null)fis.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            /*                if (pkg!=null)
                try {
                    pkg.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
             */            }

    }
    private String paragraphMatch(XWPFRun r, Pattern pattern) {
        String text = r.getText(0);
        if (text != null) {
            //Pattern ptn = Pattern.compile(pattern);
            Matcher matcher = pattern.matcher(text);
            if (matcher.find()) {
                System.out.println(matcher.group(0));
                return matcher.group(0);
            }
        }
        return null;
    }

    private void paragraphReplace( String[] arrFrom, String[] arrTo, XWPFRun r) {
        String text = r.getText(0);
        if (text != null) {
            for(int i=0; i<arrFrom.length;i++) {
                if (arrFrom[i].length()>0) {
                    if (text.contains(arrFrom[i])) {
                        text = text.replace(arrFrom[i], arrTo[i]);
                        System.out.println("Replacement:"+arrFrom[i]+"|"+arrTo[i]);
                        r.setText(text, 0);
                    }
                }
            }
        }
    }
    private void paragraphReplace(XWPFRun r) {
        String text = r.getText(0);
        if (text != null) {
            for(Map.Entry<String, String> entry : map.entrySet()) {
                if(entry.getKey().length()>0) {
                    if (text.contains(entry.getKey())) {
                        text=text.replace(entry.getKey(), entry.getValue());
                        System.out.println("Replacement:"+entry.getKey()+"|"+entry.getValue());
                        //r.setBold(true);
                        r.setText(text, 0);
                    }
                }
            }
        }
    }
}
Java:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;

public class XWPFTables {

    public static void main(String[] args)throws IOException {
        String fileName = args[0];
        InputStream fis = new FileInputStream(fileName);
        XWPFDocument document = new XWPFDocument(fis);
        List<XWPFParagraph> paragraphs = document.getParagraphs();

/*        for (int x=0; x<paragraphs.size();x++)
        {
            XWPFParagraph paragraph = paragraphs.get(x);
            System.out.println(paragraph.getParagraphText());
        }
*/        List<XWPFTable> tables = document.getTables();
        for (int x=0; x<tables.size();x++)
        {
            XWPFTable table = tables.get(x);
            List<XWPFTableRow> tableRows = table.getRows();
            //tableRows.remove(x);
            for (int r=0; r<tableRows.size();r++)
            {
                System.out.println("Row "+ (r+1)+ ":");
                XWPFTableRow tableRow = tableRows.get(r);
                List<XWPFTableCell> tableCells = tableRow.getTableCells();
                for (int c=0; c<tableCells.size();c++)
                {
                    System.out.print("Column "+ (c+1)+ ": ");
                    XWPFTableCell tableCell = tableCells.get(c);
                    //tableCell.setText("TAE");
                    String tableCellVal = tableCell.getText();
                    if ((c+1)==2){
                        if (tableCellVal!=null){
                            if (tableCellVal.length()>0){
                                 char c1 = tableCellVal.charAt(0);
                                 String s2 = "-TEST";
                                 char c2 = s2.charAt(0);
                                 String test = tableCell.getText().replace(tableCellVal,s2);
                                 tableCell.setText(test);
                            }else{
                                //tableCell.setText("NULL");
                            }
                        }
                    }
                    System.out.println("tableCell.getText(" + (c) + "):" + tableCellVal);
                }
            }
            System.out.println("\n");
        }
        OutputStream out = new FileOutputStream(fileName);
        document.write(out);
        out.close();
    }
}
как оказалось , колонтитул фиксированный, поэтому попробовал проще :
беру из шаблона word документ (уже есть колонтитулы в нем), копирую все из rich text field и вставляю в word
все добавляется отлично, но также добавляются и те поля , которые в поле скрыты . у этих поле есть условия, например скрывать если поле A ="ноль". но в word они все попадают
простым вариантом нельзя как-то их отсекать?
Код:
    Call uidoc.GotoField("мое поле")
    Call uidoc.Selectall
    Call uidoc.Copy
    
    Set doc=db.GetProfileDocument("беру из формы шаблон")
        
    '******
    
    Set MsWord = CreateObject("Word.Application")
    Set docWord = MsWord.Documents.Open(<мой шаблон>)
    MsWord.Visible = True
    ' вставляю данные в word
    Dim mainStory As Variant
    Set mainStory = docWord.StoryRanges(1)
    mainstory.paste
End Sub
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 949
609
BIT
257
поэтому попробовал проще
опять кома... - это не проще - нужен сам ворд... со всеми вытекающими
простым вариантом нельзя как-то их отсекать?
есть NotesRichTextNavigator (та ещё штучка), не сильно простой вариант...
вариант экспорта в РТ файл, а далее в docx
оригинал конвертации был на ебиэм его переложение (не лучшее) здесь
оттуда ток кусок нужен
Visual Basic:
Declare Function MailGetMessageBodyComposite Lib APIModule Alias "MailGetMessageBodyComposite" ( ByVal hNT As Long, ByVal N As String, ByVal D As String, nD As Long) As Integer

Declare Function ExportRTF Lib "nxrtf" Alias "ExportRTF" (ByVal sTempFile As String, ByVal flags As Long, hmod As Long, ByVal altlibrary As String, ByVal sRTFFile As String) As Integer

%REM
  Function ConvertItemToRtfFile
  Description: Converts an NotesRichTextItem to an RTF-Document and saves it under the filePath
  Generates and removes a temporary File while Working
%END REM
Public Sub ConvertItemToRtfFile(item As NotesRichTextItem, filePath As String)
  On Error GoTo ErrorHandler

  Dim fileSize As Long
  Dim doc As NotesDocument
  Set doc = item.Parent
  Call MailGetMessageBodyComposite(doc.handle , "Body", filePath & ".cd", fileSize)
  Call ExportRTF(filePath & ".cd", 0, 0, "", filePath)

  Kill filePath & ".cd"
  Exit Sub
ErrorHandler:
  Call LogErrorEx("Error in: ConvertItemToRtfFile", SEVERITY_MEDIUM, doc)
  Error Err, Error$
End Sub
 
  • Нравится
Реакции: k85
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!