如何在内存中创建pdf文件

How to create pdf files in memory

@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 清单中声明

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

构建 gradle 版本为:

compileSdkVersion 24
buildToolsVersion '24.0.0'
minSdkVersion 8
targetSdkVersion 24

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

如果我看一下你问题的主题,那么答案很简单。您正在使用 FileOutputStream 在文件系统上创建 PDF。在你问的主题中: "How to create pdf files in memory?" 那很简单。 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。这在我对这个问题的回答中有解释:

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

你的问题在最后改变了主题,你在其中写道:"The application can run normally, but can't create pdf file and I can't find." 这听起来好像你不知道如何将 PDF 写入 Android 上的文件系统。这与您在主题中提到的问题不同。这个问题之前已经回答过很多次了:

  • Creating PDFs in android
  • how to solve read only file system error in android programming with eclipse
  • Not able to run simple program of iText library in android
  • Save iText created PDF to internal memory as MODE_WORLD_READABLE