Поиск






Суббота, 27.04.2024, 03:19

| RSS

ОТДЕЛ
ИНФОРМАЦИОННЫХ
ТЕХНОЛОГИЙ
 
Каталог статей


Главная » Статьи » Мои статьи

Java. Заготовка для информирования пользователя об ошибках отчета.

Сегодня провел день без работы над проектом, так как день сегодня выходной. Поэтому всех подробностей использования ниже приведенного кода в проекте еще нет, да и в этой статье они будут лишними деталями.

Итак представим - на странице есть объект <af:fileDownloadActionListener>. В его свойстве method записан вызов метода managed bean'а формирования отчета BI (Business Intelligence). Некоторые возможные ошибки формирования в методе отлавливаются и как текст(StringBuilder) записываются в формируемый файл отчета. С целью проинформировать пользователя о том, что отчет не сформирован и показать в отчете ошибки, которые пользователь может отправить разработчику. Идея может быть и хорошая, но получается картина - пользователь в браузере видит загруженный сформированный отчет, а в случае ошибки формирования отчета это текстовый файл с расширением pdf. Не каждый пользователь сможет его открыть, что не хорошо, но уже почти каждый сможет его послать к разработчикам.

Казалось бы все, так тому и быть, но тут свое веское слово сказал выходной день и идея окончательно оформилась - "Необходимо перед записью преобразовать строку к pdf формату данных и записать в отчет их!". Тема для меня пока новая, но возможно полезная и перспективная.  Далее приведу код-заготовку для включения в проект и найденную полезную информацию на просторах интернетов при решении этой задачи.

package view;

import com.itextpdf.text.Document;  
import com.itextpdf.text.Font;  
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import java.text.SimpleDateFormat;

import java.util.Date;
import java.util.Locale;

import org.apache.commons.io.IOUtils;

public class myRunReport {

    public static final String FONT = "/home/soft/WORK/pdf/DejaVuSerif.ttf";
    
    public myRunReport() {
        super();
    }

    public static void main(String[] args) {
        //myRunReport myRunReport = new myRunReport();
        stPdfTo("/home/soft/WORK/pdf/report.pdf");
    }
    public static void stPdfTo(String imfile) {
        //код вызова отчета и
        //где возможно добавить анализ параметров формирования отчета и из try-catch вызова отчета сохранить ошибку
        //...            
        //моделирую ситуацию формирования ошибки отчета
        boolean flerr = true;

        if (flerr) {
            try {
                Document document = new Document();
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                PdfWriter.getInstance(document, baos);
                document.open();
                BaseFont bf;
                bf = BaseFont.createFont(FONT, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
                Font myfont = new Font(bf);  
                myfont.setStyle(Font.NORMAL);  
                myfont.setSize(10);              
                document.add(new Paragraph("Ошибка формирования отчета.", myfont));
                document.add(new Paragraph(new Date().toString(),myfont));
                SimpleDateFormat formatRu = new SimpleDateFormat("EEEE MMMM dd yyyy HH:mm:ss", new Locale("ru"));
                String stDt = formatRu.format(new Date());
                document.add(new Paragraph(stDt,myfont));
                document.add(new Paragraph("Текст ошибки ...", myfont));
        
                document.close();
                
                OutputStream file = new FileOutputStream(new File(imfile));
                //если брать из String stout = new String( baos.toByteArray());
                //то тогда pdf сформируется, но в просмотре будет пустой.
                //InputStream datafile = new ByteArrayInputStream(stout.getBytes(StandardCharsets.UTF_8));
                InputStream datafile = new ByteArrayInputStream(baos.toByteArray());
                //в заготовке для вызова отчета вместо возврата из метода данных в формате pdf, сформирую файл 
                IOUtils.copy(datafile, file);
    
                baos.close();
                datafile.close();
                file.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }    
    
}

Исходный код

iTexthttp://itextpdf.com/, документация - http://itextpdf.com/book/chapter.php?id=1, обязательно download our free ebook,

загрузка - http://sourceforge.net/projects/itext/?source=typ_redirect.

Полезные ссылки :

20 Very Useful Java Code Snippets For Java Developers - http://viralpatel.net/blogs/20-useful-java-code-snippets-for-java-developers/.

PDF Generation In Java Using IText JAR - http://viralpatel.net/blogs/generate-pdf-file-in-java-using-itext-jar/

Форматирование даты в Java - http://www.seostella.com/ru/article/2012/02/05/formatirovanie-daty-v-java.html.

 

 

Категория: Мои статьи | Добавил: sashacd (29.03.2015)
Просмотров: 1707 | Теги: String to pdf | Рейтинг: 0.0/0 |
Всего комментариев: 0
Имя *:
Email *:
Код *:

Copyright ООО "Отдел Информационных Технологий" © 2024