2016-08-14 37 views
0
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_pdftest); 
    Button Btgerar = (Button) findViewById(R.id.gerarpdf); 
    Btgerar.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      CriarPDF(); 
     } 
    }); 
} 
public void CriarPDF() { 
    String FILE = Environment.getExternalStorageDirectory().toString() + "/PDF/" + "Ficha.pdf"; 
    EditText txt = (EditText) findViewById(R.id.editText); 
    // Create New Blank Document 
    Document document = new Document(PageSize.A4); 

    // Create Directory in External Storage 
    String root = Environment.getExternalStorageDirectory().toString(); 
    File myDir = new File(root + "/PDF"); 
    myDir.mkdirs(); 

    // Create Pdf Writer for Writting into New Created Document 
    try { 
     PdfWriter.getInstance(document, new FileOutputStream(FILE)); 

    // Open Document for Writting into document 
     document.open(); 
     document.add(new Paragraph(txt.getText().toString())); 


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

    // Close Document after writting all content 
    document.close(); 
    Toast.makeText(this, "PDF File is Created. Location : " + FILE, 
      Toast.LENGTH_LONG).show(); 

    // Create new Page in PDF 
    document.newPage(); 


} 
} 

我已经在Android清单如何在内存中创建PDF文件

uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE

,并建立gradle这个版本的声明是:

compileSdkVersion 24 
buildToolsVersion '24.0.0' 
minSdkVersion 8 
targetSdkVersion 24 

应用程序可以正常运行,但可以” t创建PDF文件,我找不到。

回答

0

如果我看看你的问题的主题,那么答案很简单。您正在使用FileOutputStream在文件系统上创建PDF。在你问的主题中:“如何在内存中创建pdf文件?”这很简单。 iText接受任何OutputStream,所以答案是:使用ByteArrayOutputStream而不是FileOutputStream

Using iText, generate on memory a PDF that is generated on disk instead

Document document = new Document(); 
ByteArrayOutputStream out = new ByteArrayOutputStream(); 
PdfWriter writer = PdfWriter.getInstance(documento, out); 
(...) 
byte[] pdf = out.getBytes(); 

但是,你为什么要在Android设备上在内存中创建PDF?你打算如何处理这些字节?如果您只有byte[],则无法显示PDF。这是我的回答解释了这个问题:Display PDF document stored in a ByteArrayOutputStream (not in a file)

您还会注意到以下问题仍然没有答案(因为没有答案):How to visualize a ByteArrayOutputStream as PDF on Android?

你的问题的变化接近尾声,在那里你写的主题: “应用程序可以正常运行,但不能创建PDF文件,我找不到。”这听起来好像你不知道如何将PDF写入Android上的文件系统。这是一个与你在主题中提到的不同的问题。

:之前这个问题已经回答了很多次