我通过电子邮件将图像共享为PDF,但当我以PDF格式分享时,PDF尺寸并未完全显示,只显示了PDF的某些部分。这是我用来分享PDF的代码,请帮助我在这里停留一段时间,我愿意接受立即行动的答案。
private void sharePdf() {
try {
Bitmap bitmap;
View v1;
// File path;
File att = null;
root = new File(Environment.getExternalStorageDirectory(), getString(R.string.app_name));
if (!root.exists())
root.mkdir();
{
menu_layout.setVisibility(View.GONE);
bottom_layout.setVisibility(View.GONE);
menus.setVisibility(View.GONE);
v1 = rl_layout.getRootView();
v1.setDrawingCacheEnabled(true);
bitmap = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, bytes);
time = new SimpleDateFormat("yyyy-MM-dd_HHmmss", Locale.ENGLISH).format(new Date());
path1 = new File(root.getAbsolutePath() + File.separator + time + ".png");
path1.createNewFile();
FileOutputStream fo = new FileOutputStream(path1);
fo.write(bytes.toByteArray());
fo.close();
Bitmap bgBit = null;
try {
Uri uri = Uri.fromFile(new File(custombackground));
if (uri != null && custombackground != null && !custombackground.trim().equalsIgnoreCase("")) {
bgBit = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
}
} catch (Exception ex) {
}
if (bgBit != null) {
bitmap = overlay(bgBit, drawingPanelView.getBitmap());
bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, bytes);
}
att = new File(root.getAbsolutePath() + File.separator
+ "note.png");
if (att.exists()) {
att.delete();
}
att.createNewFile();
FileOutputStream fo_att = new FileOutputStream(att);
fo_att.write(bytes.toByteArray());
fo_att.close();
menu_layout.setVisibility(View.VISIBLE);
bottom_layout.setVisibility(View.VISIBLE);
menus.setVisibility(View.VISIBLE);
}
File pdfFile = new File(root.getAbsolutePath() + File.separator + "share_temp.pdf");
if (!pdfFile.exists()) {
pdfFile.createNewFile();
}
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(pdfFile.getAbsoluteFile()));
document.open();
document.add(new Paragraph(content.getText().toString()));
Image image = Image.getInstance(att.getAbsolutePath());
document.add(image);
for (HashMap<String, String> item : list) {
List<String> vales = new ArrayList<>(item.values());
for (String path : vales) {
File fileIn = new File(path);
if (fileIn.exists()) {
image = Image.getInstance(fileIn.getAbsolutePath());
document.add(image);
}
}
}
document.close();
final Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setType("text/plain");
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, "");
emailIntent.putExtra(android.content.Intent.EXTRA_CC, "");
emailIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.app_name));
emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(pdfFile));
startActivity(Intent.createChooser(emailIntent, "Send mail..."));
} catch (Exception e) {
}
}
答案 0 :(得分:1)
实际上,您必须将图像缩放到文档宽度和高度以适合文档才能执行此操作,只需在代码中添加以下行。
float scaler = ((document.getPageSize().getWidth() - document.leftMargin()
- document.rightMargin() - indentation) / image.getWidth()) * 100;
在添加图片之前,首先缩放图片
image.scalePercent(scaler);
然后将此图像添加到文档
document.add(image);