我有一大堆文本,显然是PDF文件的原始数据,我需要将其重新制作成PDF格式。
目前我正在将字符串读入StringBuffer,但如果我需要,我可以更改它。从那里我已经尝试将其写入文件并更改扩展名(我真的希望它有效,但我知道它不会),我已经尝试将它带到一个字符串然后得到一个字节[]它并将其写入文件或使用DataOutputStream将字节放入文件中。这些似乎都没有效果。
我也尝试过使用iText插件,我尝试将其写成pdf,然后我也尝试将文本作为pdf阅读,然后逐页复制到新的pdf。这些都没有取得很好的效果。
这是周五下午,我被点击,任何建议都将是一个巨大的帮助!
答案 0 :(得分:1)
PDF是二进制对象。您需要将字节直接写入文件。
转入文本可能会破坏它。它是以%%PDF-
开头还是以%%EOF
结尾?
答案 1 :(得分:1)
好的,经过大量研究后我发现要保留字符串中的二进制数据,通常将其转换为Base64编码。完全猜测我用Base64解码了字符串并将字节丢弃到pdf文件中,并且看到我有一个可以打开的pdf!
感谢您的回答,我希望这有助于将来的某个人!
答案 2 :(得分:0)
你是怎么遇到这个字符串的?如果它是原始ASCII字符串,您将缺少嵌入在PDF中的大量二进制数据。
如果您有一个unicode字符串,您可以使用OutputStream直接将其写入文件(而不是Writer,因为您实际上并不想写字符数据)。
答案 3 :(得分: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);
}
}
}