Java PDF大小未显示100%

Java PDF大小未显示100%,java,android,pdf,bitmap,itext,Java,Android,Pdf,Bitmap,Itext,我通过电子邮件以PDF格式共享图像,但当我以PDF格式共享图像时,PDF大小并没有完全显示出来,只有部分PDF显示出来。这是我用来分享的PDF格式的代码,请帮助我已经在这里停留了一段时间,我愿意接受立即生效的答案 private void sharePdf() { try { Bitmap bitmap; View v1; // File path; File att = null; root = new F

我通过电子邮件以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) {
    }

}
private void sharedpdf(){
试一试{
位图;
视图v1;
//文件路径;
文件att=null;
root=新文件(Environment.getExternalStorageDirectory(),getString(R.string.app_name));
如果(!root.exists())
root.mkdir();
{
菜单_布局.设置可见性(视图.消失);
底部布局。设置可见性(视图。消失);
菜单.setVisibility(View.GONE);
v1=rl_布局。getRootView();
v1.setDrawingCacheEnabled(真);
bitmap=bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(假);
ByteArrayOutputStream字节=新建ByteArrayOutputStream();
compress(bitmap.CompressFormat.PNG,100,字节);
时间=新的SimpleDateFormat(“yyyy-MM-dd_HHmmss”,Locale.ENGLISH)。格式(new Date());
path1=新文件(root.getAbsolutePath()+File.separator+time+“.png”);
path1.createNewFile();
FileOutputStream fo=新的FileOutputStream(路径1);
fo.write(bytes.toByteArray());
fo.close();
位图bgBit=null;
试一试{
Uri=Uri.fromFile(新文件(custombackground));
if(uri!=null&&custombackground!=null&&custombackground.trim().equalsIgnoreCase(“”){
bgBit=MediaStore.Images.Media.getBitmap(getContentResolver(),uri);
}
}捕获(例外情况除外){
}
如果(bgBit!=null){
位图=覆盖(bgBit,drawingPanelView.getBitmap());
字节=新的ByteArrayOutputStream();
compress(bitmap.CompressFormat.PNG,100,字节);
}
att=新文件(root.getAbsolutePath()+File.separator
+“注:png”);
如果(附件存在()){
附件删除();
}
att.createNewFile();
FileOutputStream fo_att=新的FileOutputStream(att);
fo_att.write(bytes.toByteArray());
fo_att.close();
菜单\布局设置可见性(视图可见);
底部布局。设置可见性(视图。可见);
菜单.setVisibility(View.VISIBLE);
}
File pdfFile=新文件(root.getAbsolutePath()+File.separator+“share_temp.pdf”);
如果(!pdfFile.exists()){
pdfFile.createNewFile();
}
文档=新文档();
getInstance(文档,新文件输出流(pdfFile.getAbsoluteFile());
document.open();
添加(新段落(content.getText().toString());
Image=Image.getInstance(att.getAbsolutePath());
文件。添加(图像);
用于(HashMap项:列表){
List vales=newarraylist(item.values());
for(字符串路径:vales){
File fileIn=新文件(路径);
if(fileIn.exists()){
image=image.getInstance(fileIn.getAbsolutePath());
文件。添加(图像);
}
}
}
document.close();
最终意图emailIntent=新意图(Intent.ACTION\u SEND);
emailIntent.setType(“文本/普通”);
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,“”);
emailIntent.putExtra(android.content.Intent.EXTRA_CC,”);
emailIntent.putExtra(Intent.EXTRA_主题,getString(R.string.app_名称));
emailIntent.putExtra(Intent.EXTRA_流,Uri.fromFile(pdfFile));
startActivity(Intent.createChooser(emailIntent,“发送邮件…”);
}捕获(例外e){
}
}

实际上,您必须根据文档的宽度和高度缩放图像,以适应文档。要做到这一点,只需在代码中添加以下行即可

  float scaler = ((document.getPageSize().getWidth() - document.leftMargin()
               - document.rightMargin() - indentation) / image.getWidth()) * 100;
在添加图像之前,首先缩放该图像

image.scalePercent(scaler);
然后将此图像添加到文档中

document.add(image);

您不需要
ByteArrayOutputStream
路径1.createNewFile()呼叫。直接压缩到
FileOutputStream
@EJP。你可以通过编辑代码来回答问题,这样我就可以接受答案了。谢谢如果我认为这是一个答案,我会把它作为一个答案发布,不,我不会编辑你的代码。变化是微不足道的。@rekesh,你太棒了!!你是上帝派来的