使用iText 5.5.5

时间:2015-04-27 08:52:19

标签: android fonts

有人可以在android Project中推荐html文件到pdf文件的最佳方法。

我使用iText 5.5.5同时生成包含波斯语和英语字符的PDF文件。所以,我使用了以下代码:

 private void createPDF (File file){

        //path for the PDF file to be generated
        PdfWriter pdfWriter = null;

        //create a new document
        Document document = new Document();

        try {

            //get Instance of the PDFWriter
            pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(file));

            //document header attributes
            document.addAuthor("betterThanZero");
            document.addCreationDate();
            document.addProducer();
            document.addCreator("MySampleCode.com");
            document.addTitle("Demo for iText XMLWorker");
            document.setPageSize(PageSize.A4);

            //open document
            document.open();

            //To convert a HTML file from the filesystem
            //String File_To_Convert = "docs/SamplePDF.html";
            //FileInputStream fis = new FileInputStream(File_To_Convert);

            //URL for HTML page
            AssetManager am = getAssets();
            Tidy tidy=new Tidy();
            File path = new File( Environment.getExternalStorageDirectory(), getPackageName() );
            if ( !path.exists() ){ path.mkdir(); }
            File filefff = new File(path, "test.xhtml");
            FileOutputStream fileOutputStream = new FileOutputStream(filefff);
            tidy.parse(am.open("test.html"), fileOutputStream);



            FileInputStream fileInputStream = new FileInputStream(filefff);



            InputStreamReader fis = new InputStreamReader(fileInputStream);

            //get the XMLWorkerHelper Instance
            XMLWorkerHelper worker = XMLWorkerHelper.getInstance();
            //convert to PDF
            worker.parseXHtml(pdfWriter, document, fis);

            //close the document
            document.close();
            //close the writer
            pdfWriter.close();

        }

        catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        }

    }

输出:

1 - Ø ̄٠ست اÙÙ Ø ̈Ø±Ø§Û Ú ̄Ø±Ù Ú©Ø±Ø ̄٠٠آÙØ§Ø ̄Ù Ø³Ø§Ø²Û ÙÙاØμÙ Ù
عضÙات Ø ̈Ø±Ø§Û ÛÚ© تÙرÛ٠سÙÚ ̄Û٠اÙجا٠ÙÛØ ́ÙÙØ ̄Ø ÙØ ̈اÛØ ̄ از
ÙزÙÙ ÙØ§Û Ø³ÙÚ ̄ÛÙ Ø ̈Ø±Ø§Û Ø§ÛÙ Ø ̄٠ست استÙØ§Ø ̄Ù Ú©Ø±Ø ̄.
2 - ÛÚ© ست ÙÙ Ù¾Ø ́ت Ø ̈از٠پرس سÛÙÙ Ø§Û Ø ̈Ø±Ø§Û Ø¢Ø ́ÙاÛÛ ÙÙاØμÙ
Ø ̈Ø±Ø§Û ÙسÛر Ø-رکت Ø ̄Ù٠سÙپر ست اجرا ÙÛØ ́ÙØ ̄.
3 - Ø§Ø¬Ø±Ø§Û Ø-رکت سÛÙ Ú©Ø ́ ÙØ ̈٠از پرس سÛÙÙ Ø ̄ست جÙعØ
Ù¾Ø ̄ÛØ ̄ Ø¢ÙرÙØ ̄٠سÛست٠پÛØ ́ Ø®Ø³ØªÚ ̄Û Ø ̄ر اÛ٠سÙپر ست استØ
Ø ̈Ø ̄Û٠ترتÛØ ̈ Ú©ÙØ Ø ̄ر Ø-رکت اÙÙ ÙÙØ· عضÙÙ Ù¾Ø ́ت Ø ̈از٠ÙعاÙ
است Ù Ø ̄ر Ø-رکت Ø ̄ÙÙØ Ø³Ø±Ø ́اÙ٠٠سÛÙÙ ÙÛز Ø ̈Ù Ú©ÙÚ© Ù¾Ø ́ت
Ø ̈از٠ÙÛ Ø¢ÛÙØ ̄ Ù Ø ̈Ù ÙØ±Ø²Ø ́کار اجار٠ÙÛØ ̄ÙÙØ ̄Ø ØªØ±Ø§Ûسپس
Ø®ÙØ ̄ را Ø ̈ÛØ ́ از Ù¾ÛØ ́ تØ-ت ÙØ ́ار Ùرار Ø ̄ÙØ ̄.
ازطرÙÛ Ø§Ø¬Ø±Ø§Û Ø-رکت اÙÙ Ø ̈ا سÛست٠کÙتر٠٠تÙرکز
ØμÙرت ÙÛÚ ̄ÛØ±Ø ̄Ø ÛعÙÛ ÙØ±Ø²Ø ́کار Ø§Ø ̈ØªØ ̄ا Ø ̄٠تکرار Ù¾Ø ́ت
Ø ̈از٠سÛÙ Ú©Ø ́ را Ø ̈ا Ú©Ùتر٠کاÙ٠اÙØ¬Ø§Ù Ø ̄Ø§Ø ̄٠٠سپس
Ø ̈Ø ̄ÙÙ ÙÚ©Ø« Ø-رکت Ù¾Ø ́ت Ø ̈از٠پرس سÛÙ٠را Ø ̄ر Ø ̄Ù
تکرار Ø ̄ÛÚ ̄ر Ø ̄ÙØ ̈ا٠ÙÛÚ©ÙØ ̄. Ø ̈Ø±Ø§Û ÚØ§Ø ́ÙÛ Ú©Ø§Ø± ÙÛتÙاÙ
Ø ̄٠تکرار Ú©ÙÚ©Û Ø ̄ÛÚ ̄ر ÙÛز Ø ̄ر اÛÙ Ø-رکت اخÛر اجرا
Ú©Ø±Ø ̄.
Ø ̄٠ست Ø ̈ا استÙØ§Ø ̄٠از اÛÙ Ú©ÙکسÛÙ٠سÛست٠ÙØ§Û Ø-رÙ٠اÛ
Ø ̄ر اÛÙ Ø-رکت کاÙÛ Ø§Ø³ØªØ ØªØ§ تراÛسپس ÚØ§Ø±Ù Ø§Û Ø¬Ø²
Ø±Ø ́Ø ̄ Ú©Ø±Ø ̄Ù ÙØ ̄Ø§Ø ́ØªÙ Ø ̈Ø§Ø ́Ø ̄.
4 - Ø ̄ر اÛÙ Ø ̄٠سÙپر ست ÙÛز ÙجÙØ ̄ Ù¾Ø ́ت Ø ̈از٠ÙاÙتر
Ø®ÙØ§Ø ̈ÛØ ̄Ù ÙØ ̈٠از پاراÙÙ Ø³Ø ̈Ø ̈ اÛØ¬Ø§Ø ̄ سÛست٠پÛØ ́
Ø®Ø³ØªÚ ̄Û ÙÛØ ́ÙØ ̄. Ø ̄Ùت Ø ̈Ù ÙاØμÙ٠استاÙØ ̄Ø§Ø±Ø ̄ Ø ̄ستÙا Ø ̄ر
Ø-رکت ÙاÙتر Ø®ÙØ§Ø ̈ÛØ ̄٠از اÙÙÛت زÛØ§Ø ̄Û Ø ̈رخÙØ±Ø ̄ار
Ø§Ø³ØªØ ÚÙÙ Ú©Ù Ø ̈ÙØ ̄٠اÛÙ ÙاØμÙÙ ÙÛتÙاÙØ ̄ ÙÙجر Ø ̈Ù Ø ̄Ø±Ø ̄ÙاÛ
Ø ́Ø ̄ÛØ ̄ Ø ̄ر ÙÙØμÙ ÙÚ Ù Ø¢Ø³ÛØ ̈ Ø ̄ÛØ ̄Ú ̄Û Ø¢Ù Ø ́ÙØ ̄. Ø ̈Ø¹Ø ̄ از Ø ̄Ù
ØªÚ©Ø±Ø§Ø±Ø ÙØ±Ø²Ø ́کار Ø ̈٠سرعت سراغ پاراÙ٠رÙØªÙ Ù Ø ̄Ù
تکرار Ø ̄ÛÚ ̄ر ÙÛز Ø ̄ر اÛÙجا اÙجا٠ÙÛØ ̄ÙØ ̄. Ø ̄٠ست اÙÙ
Ø ̈Ø±Ø§Û Ú ̄Ø±Ù Ú©Ø±Ø ̄٠٠آÙØ§Ø ̄Ù Ø³Ø§Ø²Û ÙÙاØμ٠است Ù
Ø ̄رØμÙرتÛÚ©Ù ÙØ ̄رت Ø ̈Ø ̄ÙÛ Ø§Ø¬Ø§Ø²Ù Ø§Ø³ØªÙØ§Ø ̄٠از ÙزÙÙ ÙاÛ
Ø ̈ÛØ ́ØªØ±Û Ø±Ø§ ÙÛØ ̄ÙØ ̄Ø ÙÛتÙا٠از ÙزÙ٠اضاÙÛ Ø§Ø³ØªÙØ§Ø ̄Ù
Ú©Ø±Ø ̄. Ø ̈Ø±Ø§Û Ø§Û٠کار Ø ̈ا ÙÙØ§Ø ̈ Ú©Ø±Ø ̄٠پاÙا Ø ̄ر ÛÚ©Ø ̄ÛÚ ̄ر
ÛÚ© Ø ̄ÙØ ̈٠را Ø ̄ر ÙÛا٠آÙÙا Ùرار Ø ̄Ø§Ø ̄Ù Ûا ÙÛتÙا٠از
Ú©ÙØ±Ø ̈ÙØ ̄ ÙØ®ØμÙØμ ÙزÙ٠اضاÙÛ Ø§Ø³ØªÙØ§Ø ̄Ù Ú©Ø±Ø ̄.
Ùرجع : Ú©ØªØ§Ø ̈ Ø-رÙÙ Ø§Û Ø ̈Ø§Ø ́

问题出在哪里?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我用Pdfwriter用古吉拉特语写文件。要使用英语以外的其他语言书写,我们需要创建Basefont,如以下代码所示:

Font font=null;
try {
    BaseFont bf = BaseFont.createFont("assets/xxx.ttf",BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);                   
    font = new Font(bf, 12);
}
catch (Exception e){
    e.printStackTrace();
    Toast.makeText(ListActivity.this,""+e,Toast.LENGTH_LONG).show();
    Log.e("ListActivity","fontException"+e);
} 

注意:将波斯语.ttf文件保存在资产文件夹中。用ttf文件名替换xxx.ttf。 然后,在写入pdf文件时传递此字体。就像我的情况一样:

table.addCell((new PdfPCell(new Phrase(user.getSurname(),font))));
table.addCell((new PdfPCell(new Phrase(user.getName(),font))));

希望您可以与此相关,答案会有所帮助。