質問
PDFファイルの生データであるように見える膨大な一連のテキストがあり、PDFに戻す必要があります。
現在、私は文字列をStringBufferに読んでいますが、必要に応じてそれを変更できます。そこから私はそれをファイルに書き留めて拡張機能を変更しようとしました(本当にうまくいきたいと思っていましたが、そうしないことはわかっていませんでした)それとそれをファイルに書くか、データを使用してファイルにバイトを入れます。これらはどれも機能していないようです。
また、iTextプラグインを使用してみましたが、それを介してPDFに書き込むだけで、テキストをPDFとして読み取り、ページごとに新しいPDFにコピーしてみました。これらのどちらも非常に良い結果を返していません。
金曜日の午後、私はタップされています、どんな提案でも大きな助けになります!
解決
さて、多くの調査の後、私は、通常、それをbase64エンコードに変換する文字列内のバイナリデータを保存するためにあることを知りました。完全な推測で、私はbase64から文字列をデコードし、バイトをPDFファイルにドロップしました。
答えをありがとう、そしてこれが将来誰かを助けることを願っています!
他のヒント
PDFはバイナリオブジェクトです。バイトをファイルに直接書き込む必要があります。
テキストに変わると、おそらくそれが壊れます。それは始まっていますか %%PDF-
で終わります %%EOF
?
どうやってこの文字列に出会ったのですか?生のASCII文字列の場合、PDFに埋め込まれた大量のバイナリデータが欠落します。
Unicode文字列がある場合、outputStreamを使用して直接ファイルに書き込むことができます(実際に文字データを書きたくないので、ライターではありません)。
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);
}
}
}