0

我有一大串文本,显然是 PDF 文件的原始数据,我需要将其重新转换为 PDF。

目前我正在将字符串读入 StringBuffer 但如果需要我可以更改它。从那里我尝试将它写到一个文件并更改扩展名(我真的希望这有效,但我有点知道它不会),我尝试将它带到一个字符串然后得到一个字节 []它并将其写入文件或使用 DataOutputStream 将字节放入文件中。这些似乎都不起作用。

我也尝试过使用 iText 插件,我尝试通过它将其写入 pdf,我还尝试将文本作为 pdf 阅读,然后逐页将其复制到新的 pdf 中。这些都没有返回非常好的结果。

今天是星期五下午,我被轻拍了,任何建议都会有很大帮助!

4

4 回答 4

2

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);
    }
  }
}
于 2011-01-15T03:30:34.213 回答
1

PDF 是二进制对象。您需要将字节直接写入文件。

变成文本可能会破坏它。它是否以 开头%%PDF-和结尾%%EOF

于 2011-01-14T22:17:18.457 回答
1

好的,经过大量研究后,我发现要保留字符串中的二进制数据,通常将其转换为 Base64 编码。在一个完整的猜测中,我从 Base64 中解码了字符串并将字节放入 pdf 文件中,你瞧,我有一个可以打开的 pdf 文件!

感谢您的回答,我希望这对未来的人有所帮助!

于 2011-01-17T15:22:00.903 回答
0

你是怎么遇到这个字符串的?如果它是原始 ASCII 字符串,您将丢失大量嵌入在 PDF 中的二进制数据。

如果您有一个 unicode 字符串,您可以直接使用 OutputStream 将其写入文件(而不是 Writer,因为您实际上并不想写入字符数据)。

于 2011-01-15T00:42:27.937 回答