如何在内存中创建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
@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