2014-07-02 3 views
1

Я работал над экспортом содержимого html (table) для Excel с использованием идентификатора таблицы. Я использовал тип контента, такой какЭкспорт содержимого в pdf без использования iText

response.getWriter().write(datatoexport); 
response.setHeader("Content-Type", "application/vnd.ms-excel"); 
response.setHeader("Content-Disposition", "attachment; filename=test_file.xls"); 
response.getWriter().flush(); 
response.getWriter().close(); 

Здесь datatoexport - это идентификатор таблицы.

Он отлично работает с Excel.

Но, если я использую тип контента в формате PDF, как

response.setHeader("Content-Type", "application/pdf"); 
response.setHeader("Content-Disposition", "attachment; filename=test_file.pdf"); 

Но я получаю PDF файл поврежден. Любая помощь? Без использования iText или других фляг, как я могу это достичь? Особенно в IE 8

+2

Вы можете установить тип содержимого как 'pdf', но фактическое содержание' pdf' –

+1

установки типа контента в формате PDF не делает свой вывод как реальный файл в формате PDF тип контента просто?. флаг, но не прямой порядок r сервер. –

+0

Нет. Я пишу содержимое таблицы в формате pdf так же, как и Excel. Но я получаю поврежденный файл pdf. Любая помощь? –

ответ

3

Перед отправкой файла pdf на выходе вам необходимо сгенерировать его на стороне сервера.

Чтобы преобразовать файл в PDF, я рекомендую использовать OpenOffice в режиме безглавых и JODConverter.

Для запуска OpenOffice в обезглавленный режиме (в Windows) выполнить команду (предположим, что у вас есть OpenOfficePortable, установленный в C:\Apps:

"C:\Apps\OpenOfficePortable\OpenOfficePortable.exe" -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard 

Как вы OpenOffice начали в обезглавленный режиме, запустить простой рабочий прототип, используя JODConverter библиотека:

import com.artofsolving.jodconverter.DocumentConverter; 
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection; 
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection; 
import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter; 
import java.io.File; 
import java.net.ConnectException; 

public class JODConv { 
    public static void main(String[] args) throws ConnectException { 

     if (args.length!=2) { 
      System.out.println("Usage:\nJODConv <file-to-convert> <pdf-file>"); 
      System.exit(0); 
     } 

     String sourceFilePath = args[0]; 
     String destFilePath = args[1]; 


     File inputFile = new File(sourceFilePath); 
     File outputFile = new File(destFilePath); 

     // connect to an OpenOffice.org instance running on port 8100 
     OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100); 
     connection.connect(); 

     // convert 
     DocumentConverter converter = new OpenOfficeDocumentConverter(connection); 
     converter.convert(inputFile, outputFile); 

     // close the connection 
     connection.disconnect(); 
    }  
} 
+0

Мне нужно сделать это на стороне сервера. Не в локальном хосте. И без использования какой-либо внешней библиотеки. Мне нужно использовать его как личность. –

+0

Когда вы используете открытый офис и код конверсии на том же сервере, то localhost является приемлемым. Если код конверсии и открытый офис работают на разных серверах, укажите ip-адрес сервера openoffice, а не localhost. –

+0

И если вы хотите избежать использования каких-либо библиотек free/opensource, затем установите флажок [Спецификация формата PDF] (http://www.adobe.com/devnet/pdf/pdf_reference.html) и создайте собственные методы конверсии. –

Смежные вопросы