2011-02-22 5 views
1

Мне нужно создать файл в формате PDF с использованием IText, вот кодява поколение PDF в IText

public static String generatePdfReport(){ 
try {  

    Document document = new Document(); 
    PdfWriter.getInstance(document,new FileOutputStream("SimplePDFTableColspan.pdf")); 
    document.open(); 

    PdfPTable table = new PdfPTable(2); 
    PdfPCell cell = new PdfPCell(new Paragraph("column span 2")); 
    cell.setColspan(2); 
    table.addCell(cell); 

    table.addCell("1"); 
    table.addCell("2"); 

    table.addCell("3"); 
    table.addCell("4"); 

    table.addCell("5"); 
    table.addCell("6");  

    document.add(table);   
    document.close(); 
    return document.toString(); 

    } catch (Exception exe) { 
     exe.printStackTrace(); 
         } 
} 

Проблема тип возвращаемого значения метода является строка, но в IText я получаю документ, поэтому я я получаю исключение SAX:

Содержимое не допускается в прологе.

+1

Исключение, вероятно, не имеет ничего общего с кодом, вы дали нам, что не делает никакой обработки XML/SAX. Покажите нам трассировку стека исключений и часть кода, которая на самом деле генерирует исключение (которое находится в верхней части трассировки стека). –

+0

PDF - это двоичный формат, который, как оказалось, содержит некоторые удобочитаемые строки. Это не XML-схема, а не текст. Его PDF. Что именно вы хотели от 'document.toString()' –

ответ

0

Я буду считать, что это статический метод с пустым списком параметров. Если это так, пожалуйста, исправьте свой код.

Считаете ли вы разумным иметь пустой блок catch? Ваш код проглотит любое исключение, которое будет выброшено, и вы не будете более мудрым. Распечатайте трассировку стека.

-1

Метод toString() класса Документ кажется унаследованным от класса Object и, вероятно, не будет делать то, что вы намереваетесь (он, конечно же, не будет экспортировать документ в виде строки XML ...).

Вместо FileOutputStream можно использовать ByteArrayOutputStream, а затем выполнить преобразование строк по этим данным.

Document document = new Document(); 
ByteArrayOutputStream output = new ByteArrayOutputStream(); 
PdfWriter.getInstance(document, output); 
document.open(); 
... 
document.close(); 
.... 
return output.toString(); 

С уважением,
Гийом

+1

'ByteArrayOutputStream.toString()' конечно же не будет делать то, что он хочет (он использует стандартную кодировку платформы для декодирования того, что является в основном случайными двоичными данными). Фактически, возвращение «String», когда он хочет вернуть PDF-файл, не является тем, что он хочет сделать в первую очередь! –

+0

@Joachim. Ты прав. В основном я думал, что PDF-файл является текстовым файлом, и что bytearray будет содержать контент. Проверка с помощью текстового редактора удалила эту возможность. Это подразумевает, что вы также правы в том, что получение PDF в виде строки - не очень хорошая идея. С уважением –