如何在内存中创建pdf文件

时间:2016-08-14 22:40:52

标签: java android android-studio pdf itext

@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 manifest中声明了

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

和build gradle版本是:

compileSdkVersion 24
buildToolsVersion '24.0.0'
minSdkVersion 8
targetSdkVersion 24

应用程序可以正常运行,但无法创建pdf文件,我找不到。

1 个答案:

答案 0 :(得分: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文件而且我无法找到。"这听起来好像你不知道如何在Android上的文件系统中编写PDF。这与您在主题中提到的问题不同。这个问题之前已经回答了很多次: