2013-05-10 114 views
1

我有一份表格,当前填写的内容会在提交时发送到专门的电子邮件地址。我想有机会提供其他选择。就像将其保存为PDF文件一样。该表单在main.xml布局中完成。是否有可能将XML布局转换为PDF?如果有的话可以有人指向我的一个很好的例子方向。Android如何将XML布局转换为PDF?

非常感谢

+0

应该有对谷歌的教程。 – alicanbatur 2013-05-10 09:42:09

+0

我看起来只能找到那些从活动而不是布局创建的人。 – PaulH 2013-05-10 09:44:00

+0

我不知道这个,但你有没有通过这个链接http://stackoverflow.com/questions/7806847/converting-xml-to-pdf-using-styles-from-xsl它可能会帮助你,也http: //stackoverflow.com/questions/212577/how-do-you-create-a-pdf-from-xml-in-java?rq=1 – surhidamatya 2013-05-10 09:45:40

回答

3

你可以把这个链接看看:

https://github.com/HendrixString/Android-PdfMyXml

说明

  1. 创建XML布局

首先创建XML布局。根据比例1:1.41,按照像素(以及所有它的子视图)给出尺寸,并根据横向或纵向比例给出尺寸。

page1.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="2115px" 
      android:layout_height="1500px" 
      android:background="@color/white"> 
<TextView android:id="@+id/tv_hello" 
      android:textColor="@color/black" 
      android:textSize="27px" 
      android:textStyle="bold" 
      android:padding="6px"/> 

</RelativeLayout> 

您可以创建多达页/模板,因为你需要。

  • 实现一个视图渲染
  • 通过延伸AbstractViewRenderer或通过匿名实例化并注入布局ID实施你的视图渲染器。 initView(View视图)会自动为您提供一个充气View。还有其他选择,但我现在不会覆盖它。

    AbstractViewRenderer page = new AbstractViewRenderer(context, R.layout.page1) { 
    private String _text; 
    
    public void setText(String text) { 
        _text = text; 
    } 
    
    @Override 
    protected void initView(View view) { 
        TextView tv_hello = (TextView)view.findViewById(R.id.tv_hello); 
        tv_hello.setText(_text); 
    } 
    }; 
    
    // you can reuse the bitmap if you want 
    page.setReuseBitmap(true); 
    
  • 构建PDF文档
  • 使用PdfDocument或PdfDocument.Builder添加页面和渲染,并在背景进度条跑这一切。

    PdfDocument doc   = new PdfDocument(ctx); 
    
    // add as many pages as you have 
    doc.addPage(page); 
    
    doc.setRenderWidth(2115); 
    doc.setRenderHeight(1500); 
    doc.setOrientation(PdfDocument.A4_MODE.LANDSCAPE); 
    doc.setProgressTitle(R.string.gen_please_wait); 
    doc.setProgressMessage(R.string.gen_pdf_file); 
    doc.setFileName("test"); 
    doc.setInflateOnMainThread(false); 
    doc.setListener(new PdfDocument.Callback() { 
        @Override 
        public void onComplete(File file) { 
         Log.i(PdfDocument.TAG_PDF_MY_XML, "Complete"); 
        } 
    
        @Override 
        public void onError(Exception e) { 
         Log.i(PdfDocument.TAG_PDF_MY_XML, "Error"); 
        } 
    }); 
    
    doc.createPdf(ctx); 
    

    或使用PdfDocument.Builder

    new PdfDocument.Builder(ctx).addPage(page).filename("test").orientation(PdfDocument.A4_MODE.LANDSCAPE) 
             .progressMessage(R.string.gen_pdf_file).progressTitle(R.string.gen_please_wait).renderWidth(2115).renderHeight(1500) 
             .listener(new PdfDocument.Callback() { 
              @Override 
              public void onComplete(File file) { 
               Log.i(PdfDocument.TAG_PDF_MY_XML, "Complete"); 
              } 
    
              @Override 
              public void onError(Exception e) { 
               Log.i(PdfDocument.TAG_PDF_MY_XML, "Error"); 
              } 
             }).create().createPdf(this);