使用iText将TXT文件转换为PDF(保持格式化)

Mar*_*anu 2 java pdf itext

我正在尝试使用iText库将.txt文件转换为.pdf文件.我面临的问题如下:

我在txt文件中有一个清晰的格式,类似于:

TEXT                                   *******************
Other text here                        * SOME_CODE_HERE_ *
Other text                             *******************
Run Code Online (Sandbox Code Playgroud)

在输出中格式化已经消失,看起来像这样:

TEXT           ******************
Other text here         * SOME_CODE_HERE_ *
Other text          ******************
Run Code Online (Sandbox Code Playgroud)

代码如下所示:

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;
}
Run Code Online (Sandbox Code Playgroud)

我还试图用IDENTITY_H创建一个BaseFont,但它不起作用.我想这是关于编码或类似的东西.你怎么看?我用完了解决方案......

谢谢

LE:正如Alan所建议的,以及来自iText页面的教程,我使用了这部分以及我现有的代码,它运行正常.

        BaseFont courier = BaseFont.createFont(BaseFont.COURIER, BaseFont.CP1252, BaseFont.EMBEDDED);
        Font myfont = new Font(courier);
Run Code Online (Sandbox Code Playgroud)

Ala*_*Hay 7

您需要使用Monospaced字体,例如Courier.

http://en.wikipedia.org/wiki/Monospaced_font

http://itextpdf.com/examples/iia.php?id=208

  • @Marius:编码应该没有区别; 它只是从字节值到字符索引的映射.它与这些字符的*width*完全无关. (2认同)