2011-01-14 3 views
0

У меня есть огромная строка текста, которая, по-видимому, является необработанными данными для PDF-файла, и мне нужно вернуть ее в PDF-файл.Преобразование текста в PDF

В настоящее время я читаю строку в StringBuffer, но если мне нужно, я могу ее изменить. Оттуда я попытался просто записать его в файл и изменить расширение (я действительно надеялся, что это сработало, но я вроде бы знал, что это не так), я попытался взять его в String, а затем получить байт [] из он и записывает это в файл или с помощью DataOutputStream, чтобы поместить байты в файл. Ни один из них не работал.

Я также попытался использовать плагин iText, я попробовал просто написать его в pdf, и я также пробовал читать текст в формате pdf, а затем копировать его по страницам в новый pdf. Ни один из них не вернул очень хорошие результаты.

Сегодня пятница, я прослушан, любые предложения будут огромной помощью!

ответ

1

Ладно, хорошо, после долгих исследований я обнаружил, что для сохранения двоичных данных в строку, которая, как правило, вы преобразовать его в кодировке Base64. По полной догадки я декодировал строку из Base64 и опустил байты в файл pdf, и вот, у меня появился pdf-файл, который можно было открыть!

Спасибо за ответы, и я надеюсь, что это поможет кому-то в будущем!

1

PDF - это двоичный объект. Вам нужно записать байты непосредственно в файл.

Включение в текст, вероятно, сломает его. Началось ли с %%PDF- и заканчивается %%EOF?

+0

У этого нет этих флагов, это всего лишь текст между XML-тегами. – Shaded

+0

Можете ли вы опубликовать первые несколько строк и последние несколько, чтобы мы могли видеть? –

+0

Как только я расшифровал из Base64 те теги там, спасибо за вашу помощь! – Shaded

0

Как вы столкнулись с этой струной? Если это необработанная строка ASCII, вам не хватит большого количества двоичных данных, встроенных в PDF.

Если у вас есть строка в Юникоде, вы можете записать ее в файл напрямую, используя OutputStream (а не Writer, поскольку вы на самом деле не хотите писать символьные данные).

+0

Это в файле, что моя компания получает от другой компании ... это все, что я могу сказать о том, откуда она взялась. Я попытался использовать базовый DataOutputStream для записи байта [] в pdf, но я думаю, что я попытаюсь обходить строковый буфер, если это сработает. – Shaded

0

Подход iText является правильным. Вы можете сделать что-то вроде этого:

import java.io.*; 

import com.lowagie.text.*; 
import com.lowagie.text.pdf.*; 

public class TextFileToPDF { 

    /* 
    ex. java TextFileToPDF c:\temp\text.txt c:\temp\text.pdf 
    */ 
    public static void main (String [] args){ 
    BufferedReader input = null; 
    Document output = null; 
    System.out.println("Convert text file to pdf"); 
    System.out.println("input : " + args[0]); 
    System.out.println("output : " + args[1]); 
    try { 
     // text file to convert to pdf as args[0] 
     input = 
     new BufferedReader (new FileReader(args[0])); 
     // letter 8.5x11 
     // see com.lowagie.text.PageSize for a complete list of page-size constants. 
     output = new Document(PageSize.LETTER, 40, 40, 40, 40); 
     // pdf file as args[1] 
     PdfWriter.getInstance(output, new FileOutputStream (args[1])); 

     output.open(); 
     output.addAuthor("RealHowTo"); 
     output.addSubject(args[0]); 
     output.addTitle(args[0]); 

     String line = ""; 
     while(null != (line = input.readLine())) { 
     System.out.println(line); 
     Paragraph p = new Paragraph(line); 
     p.setAlignment(Element.ALIGN_JUSTIFIED); 
     output.add(p); 
     } 
     System.out.println("Done."); 
     output.close(); 
     input.close(); 
     System.exit(0); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
     System.exit(1); 
    } 
    } 
} 
+0

, если я не ошибаюсь, не это просто печатает необработанные данные в формате pdf, тем самым давая мне длинную строку jarbled в pdf? – Shaded

+0

Нет, «\ n» обозначает новый абзац, и каждый абзац будет оправдан. – RealHowTo

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