我正在尝试使用iText库将.txt文件转换为.pdf文件。 我面临的问题如下:
我在txt文件中有一个清晰的格式,类似于:
TEXT *******************
Other text here * SOME_CODE_HERE_ *
Other text *******************
在输出中,格式化已经消失,看起来像这样:
TEXT ******************
Other text here * SOME_CODE_HERE_ *
Other text ******************
代码如下所示:
public static boolean convertTextToPDF(File file) throws Exception {
BufferedReader br = null;
try {
Document pdfDoc = new Document(PageSize.A4);
String output_file = file.getName().replace(".txt", ".pdf");
System.out.println("## writing to: " + output_file);
PdfWriter.getInstance(pdfDoc, new FileOutputStream(output_file)).setPdfVersion(PdfWriter.VERSION_1_7);;
pdfDoc.open();
Font myfont = new Font();
myfont.setStyle(Font.NORMAL);
myfont.setSize(11);
pdfDoc.add(new Paragraph("\n"));
if (file.exists()) {
br = new BufferedReader(new FileReader(file));
String strLine;
while ((strLine = br.readLine()) != null) {
Paragraph para = new Paragraph(strLine + "\n", myfont);
para.setAlignment(Element.ALIGN_JUSTIFIED);
pdfDoc.add(para);
}
} else {
System.out.println("no such file exists!");
return false;
}
pdfDoc.close();
}
catch (Exception e) {
e.printStackTrace();
} finally {
if (br != null)
br.close();
}
return true;
}
我还尝试使用IDENTITY_H创建一个BaseFont,但它不起作用。 我想这是关于编码或类似的东西。 你怎么看?我的解决方案用完了......
由于
LE: 正如Alan所建议的,以及来自iText页面的教程,我在现有代码中使用了这部分,并且工作正常。
BaseFont courier = BaseFont.createFont(BaseFont.COURIER, BaseFont.CP1252, BaseFont.EMBEDDED);
Font myfont = new Font(courier);
答案 0 :(得分:7)
您需要使用等宽字体,例如快递。
答案 1 :(得分:1)
我知道这很旧,但是我在将文本文件转换为pdf时遇到了同样的问题,并且使用了它(我在vb.net中写了这个):
Dim pdfDoc As Document = New Document(PageSize.A4)
Dim pdfWrite As PdfWriter = PdfWriter.GetInstance(pdfDoc, New FileStream(pdfFoldername & "\" & "name of file", FileMode.Create))
pdfDoc.Open()
Dim courier As BaseFont = BaseFont.CreateFont(BaseFont.COURIER, BaseFont.CP1252, BaseFont.EMBEDDED)
Dim myfont As iTextSharp.text.Font = New iTextSharp.text.Font(courier, 10)
Dim para As Paragraph = New Paragraph(page, myfont)
pdfDoc.Add(para)
与上面的答案和更新的代码的区别是使用“ 10”作为我的字体大小。这使PDF看起来与文本文件的格式相同。