آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

گرفتن screenshot از یک لایوت و تبدیل آن به PDF (حل شد) فقط یک نکته!؟

123995  9 سال پیش  9 سال پیش
+1 0

بر روز رسانی :

سلام بچه ها من این سوال رو قبلا به شکل دیگه مطرح کردم که دوستان کمی راهنمایی کردن و خودم خیلی تحقیق کردم و اینکه کدهای زیادی رو تست کردم ولی به نتیجه  دلخواه نرسیدم یه بار دیگه توضیح میدم :

من یه لایوت دارم که در دو جهت اسکرول میشه و میخواستم این لایوت رو به pdf تبدیل کنم که به این نتیجه رسیدم که بهتره که اول از صفحه اسکرین شات بگیرم و بعد اونو به pdf تبدیل کنم

باید بگم برای یک لایوت ساده تونستم کد صحیح رو بنویسم ولی برای لایوتی که اسکرول میشه نه !!!

0 0
وقتی میتونید با خود اطلاعاتی که باهاشون لیوت رو پرکردید فایل پی دی اف درست کنید چرا میخواید لایوت رو تبدیل به پی دی اف کنید ؟ اما با این حال میتونید از لیوت یه اسکرین شات بگیرید و با استفاده از کتابخونه itext اون عکس رو به پی دی اف تبدیل کنید . (9 سال پیش)
0 0
سلام منم با این مشکل مواجه بودم ولی با عکس گرفتن از لیوت حلش کردم . ولی نمیدونم چرا فارسی توی pdf ساپورت نمیشد. البته من از فونت یکان استفاده کرده بودم. (9 سال پیش)
0 0
itextبا فارسی مشکل داره ولی میشه درستش کرد (9 سال پیش)
0 0
درسته دوسان منم الان کدی رو نوشتم که بشه باهاش یه فایل pdf رو تولید کرد و تو stack overflow هم به گفته های شما رسیدم و دارم بررسی میکنم که ببینم میشه یا نه ؟! و در صورت رسیدن به نتیجه کد رو هم برای شما میذارم (9 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
123995  9 سال پیش
0 0

سلام دوستان عزیز من بالاخره با کلی داستان این مشکل رو حل کردم و پاسخ رو برای دوستان میذارم

** البته باید خدمت دوستان عرض کنم که تجربه من میگه که پاسخی که من میگم تنها پاسخ و ترجیحا درست ترین نیست و از دوستانی که به غیر این راه حل ، روش دیگه ای رو می دونن بگن تا بقیه هم بتونن استفاده کنن **

در کد زیر فقط یک مشکل به نظر من هست که اونم خیلی نوشته ها و عکس ها بعد اینکه به PDF تبدیل شدند کیفیت بالایی ندارند و شارپ نمیشن اگه کسی از دوستان بتونه واسه این کار هم راهنمایی کنه به نظرم این تایپیک دیگه کامل میشه ، باید بگم من راجع به همین موضوع هم تحقیق کردم و نتایجی مثل استفاده از ItextSharp رسیدم ولی نتونستم تو برنامه استفاده کنم .

Main Activity :


import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import com.itextpdf.text.BadElementException;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.Date;


public class MainActivity extends AppCompatActivity {

ImageView view;
Bitmap screen;
static Image image ;

LayoutInflater inflater;
private static String FILE ; // add permission in your manifest...
Date now = new Date();


static ScrollView iv;
static HorizontalScrollView ih;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

view = (ImageView) findViewById(R.id.imageView);
inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);

iv = (ScrollView) findViewById(R.id.scrollVertical);
ih = (HorizontalScrollView) findViewById(R.id.scrollHorizontal);

android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", now);
FILE = "mnt/sdcard/"+now+".pdf";

}

public void btnSavePDF(View v) {

try {

LinearLayout root = (LinearLayout) inflater.inflate(R.layout.activity_main, null); //RelativeLayout is root view of my UI(xml) file.
root.setDrawingCacheEnabled(true);
screen = getBitmapFromView(this.getWindow().findViewById(R.id.root));

Document document = new Document(PageSize.A4, 0, 0, 0, 0);
PdfWriter.getInstance(document, new FileOutputStream(FILE));
document.open();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
screen.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
addImage(document, byteArray);
document.close();

view.setImageBitmap(screen);
} catch (Throwable e) {
// Several error may come out with file handling or OOM
e.printStackTrace();
}
}

public static Bitmap getBitmapFromView(View view) {
//Define a bitmap with the same size as the view
Bitmap returnedBitmap = Bitmap.createBitmap(ih.getChildAt(0).getWidth(),
iv.getChildAt(0).getHeight(),
Bitmap.Config.ARGB_8888);
//Bind a canvas to it
Canvas canvas = new Canvas(returnedBitmap);
//Get the view's background
Drawable bgDrawable =view.getBackground();
if (bgDrawable!=null)
//has background drawable, then draw it on the canvas
bgDrawable.draw(canvas);
else
//does not have background drawable, then draw white background on the canvas
canvas.drawColor(Color.WHITE);
// draw the view on the canvas
iv.getChildAt(0).draw(canvas);
ih.getChildAt(0).draw(canvas);
//return the bitmap
return returnedBitmap;
}
private static void addImage(Document document, byte[] byteArray)
{
try
{

image = Image.getInstance(byteArray);
}
catch (BadElementException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (MalformedURLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
//image.scaleAbsolute(150f, 150f);

image.scaleToFit(PageSize.A4);
image.setDpi(300,300);

try
{
document.add(image);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .