android 应用 pdf,如何在Android应用中创建PDF?

在Android中找到使用非英文字母将任意HTML转换为PDF的问题的完整解决方案并不容易。我测试它为俄罗斯unicode字母。

我们使用三个库:

(1)Jsoup(jsoup-1.7.3.jar)用于从HTML转换为XHTML,

(2)iTextPDF(itextpdf-5.5.0.jar),

(3)XMLWorker(xmlworker-5.5.1.jar)。

public boolean createPDF(String rawHTML, String fileName, ContextWrapper context){

final String APPLICATION_PACKAGE_NAME = context.getBaseContext().getPackageName();

File path = new File( Environment.getExternalStorageDirectory(), APPLICATION_PACKAGE_NAME );

if ( !path.exists() ){ path.mkdir(); }

File file = new File(path, fileName);

try{

Document document = new Document();

PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));

document.open();

// Подготавливаем HTML

String htmlText = Jsoup.clean( rawHTML, Whitelist.relaxed() );

InputStream inputStream = new ByteArrayInputStream( htmlText.getBytes() );

// Печатаем документ PDF

XMLWorkerHelper.getInstance().parseXHtml(writer, document,

inputStream, null, Charset.defaultCharset(), new MyFont());

document.close();

return true;

} catch (FileNotFoundException e) {

e.printStackTrace();

return false;

} catch (DocumentException e) {

e.printStackTrace();

return false;

} catch (IOException e) {

e.printStackTrace();

return false;

}

难题是使用iTextPDF XMLWorker库以PDF格式显示俄语字母。为此,我们应该创建自己的FontProvider接口实现:

public class MyFont implements FontProvider{

private static final String FONT_PATH = "/system/fonts/DroidSans.ttf";

private static final String FONT_ALIAS = "my_font";

public MyFont(){ FontFactory.register(FONT_PATH, FONT_ALIAS); }

@Override

public Font getFont(String fontname, String encoding, boolean embedded,

float size, int style, BaseColor color){

return FontFactory.getFont(FONT_ALIAS, BaseFont.IDENTITY_H,

BaseFont.EMBEDDED, size, style, color);

}

@Override

public boolean isRegistered(String name) { return name.equals( FONT_ALIAS ); }

}

这里我们使用标准的Android字体Droid Sans,它位于系统文件夹中:

private static final String FONT_PATH = "/system/fonts/DroidSans.ttf";

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值