如何获得 PDF 格式的完整 Activity
How can I get My Full Activity in PDF
首先,我是法国人,我会尽力用流利的英语解释我的问题。
所以,我想将该屏幕转换为 PDF 格式:listeTrouActivity.java
但是如你所见,有滚动视图,孔列正在下降到 18 个孔。
所以我学习了一些教程:
http://valokafor.com/how-to-convert-android-view-to-pdf/#comment-1018
然后我开始使用库 ITextG
但我的问题是,当我将位图转换为 PDF 时,它会给我一个与我的屏幕大小相同的 PDF。我的activity完全被砍掉了。
所以我希望你们能帮助我,在我的 activity 中有我的代码将我的位图转换为 PDF,名为 ListTrouActivity.java:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
CoursePdf coursePdf = new CoursePdf();
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
if (id == R.id.saveHasPDF) {
View mRootView = findViewById(R.id.RootView);
String state = Environment.getExternalStorageState();
if (!Environment.MEDIA_MOUNTED.equals(state)){
Toast.makeText(ListTrouActivity.this, "OK", Toast.LENGTH_SHORT).show();
}
File pdfDir = new File(DEFAULT_PATH, "MyApp");
if (!pdfDir.exists()){
pdfDir.mkdirs();
}
LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);
LinearLayout root = (LinearLayout) inflater.inflate(R.layout.liste_trou_activity, null); //RelativeLayout is root view of my UI(xml) file.
root.setDrawingCacheEnabled(true);
Bitmap screen = coursePdf.getBitmapFromView2(this.getWindow().findViewById(R.id.RootView));
// here give id of our root layout (here its my RelativeLayout's id)
File pdfFile = new File(pdfDir, "myPdfFile.pdf");
try {
Rectangle pagesize = new Rectangle(1720f, 3200f);
Document document = new Document(pagesize, 36f, 72f, 108f, 180f);
PdfWriter.getInstance(document, new FileOutputStream(pdfFile));
document.open();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
screen.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
coursePdf.addImage(document,byteArray);
document.close();
}
catch (Exception e){
e.printStackTrace();
}
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.fromFile(new File(pdfDir, "myPdfFile.pdf"));
intent.setDataAndType(uri, "application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
}
return super.onOptionsItemSelected(item);
}
CoursePDF.java 中的 getBitmapFromView 代码:
public static Bitmap getBitmapFromView2(View view) {
//Define a bitmap with the same size as the view
Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.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
view.draw(canvas);
//return the bitmap
return returnedBitmap;
}
我的 CoursePDF.java 中的 addImage 代码:
public static void addImage(Document document, byte[] byteArray)
{
Image image = null;
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);
try
{
document.add(image);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
很遗憾,我无法在此处输入 liste_trou_activity.xml 代码,否则我将达到 157 000 个字符。
如果你们真的需要它就问,我会再试一次。
希望大家明白我在问什么,如果不明白,再问我,我会再解释的。
感谢阅读,希望大家多多帮助。
看看我能想到的最好的方法是对完整的可滚动内容进行快照 activity,然后动态地编写一个 pdf 并将其内容作为快照。
对于快照更喜欢 [Taking snapshot of scrollable activity]
然后写动态pdf。你会得到你想要的
首先,我是法国人,我会尽力用流利的英语解释我的问题。
所以,我想将该屏幕转换为 PDF 格式:listeTrouActivity.java
但是如你所见,有滚动视图,孔列正在下降到 18 个孔。
所以我学习了一些教程:
http://valokafor.com/how-to-convert-android-view-to-pdf/#comment-1018
然后我开始使用库 ITextG
但我的问题是,当我将位图转换为 PDF 时,它会给我一个与我的屏幕大小相同的 PDF。我的activity完全被砍掉了。
所以我希望你们能帮助我,在我的 activity 中有我的代码将我的位图转换为 PDF,名为 ListTrouActivity.java:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
CoursePdf coursePdf = new CoursePdf();
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
if (id == R.id.saveHasPDF) {
View mRootView = findViewById(R.id.RootView);
String state = Environment.getExternalStorageState();
if (!Environment.MEDIA_MOUNTED.equals(state)){
Toast.makeText(ListTrouActivity.this, "OK", Toast.LENGTH_SHORT).show();
}
File pdfDir = new File(DEFAULT_PATH, "MyApp");
if (!pdfDir.exists()){
pdfDir.mkdirs();
}
LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);
LinearLayout root = (LinearLayout) inflater.inflate(R.layout.liste_trou_activity, null); //RelativeLayout is root view of my UI(xml) file.
root.setDrawingCacheEnabled(true);
Bitmap screen = coursePdf.getBitmapFromView2(this.getWindow().findViewById(R.id.RootView));
// here give id of our root layout (here its my RelativeLayout's id)
File pdfFile = new File(pdfDir, "myPdfFile.pdf");
try {
Rectangle pagesize = new Rectangle(1720f, 3200f);
Document document = new Document(pagesize, 36f, 72f, 108f, 180f);
PdfWriter.getInstance(document, new FileOutputStream(pdfFile));
document.open();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
screen.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
coursePdf.addImage(document,byteArray);
document.close();
}
catch (Exception e){
e.printStackTrace();
}
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.fromFile(new File(pdfDir, "myPdfFile.pdf"));
intent.setDataAndType(uri, "application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
}
return super.onOptionsItemSelected(item);
}
CoursePDF.java 中的 getBitmapFromView 代码:
public static Bitmap getBitmapFromView2(View view) {
//Define a bitmap with the same size as the view
Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.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
view.draw(canvas);
//return the bitmap
return returnedBitmap;
}
我的 CoursePDF.java 中的 addImage 代码:
public static void addImage(Document document, byte[] byteArray)
{
Image image = null;
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);
try
{
document.add(image);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
很遗憾,我无法在此处输入 liste_trou_activity.xml 代码,否则我将达到 157 000 个字符。
如果你们真的需要它就问,我会再试一次。
希望大家明白我在问什么,如果不明白,再问我,我会再解释的。
感谢阅读,希望大家多多帮助。
看看我能想到的最好的方法是对完整的可滚动内容进行快照 activity,然后动态地编写一个 pdf 并将其内容作为快照。 对于快照更喜欢 [Taking snapshot of scrollable activity]
然后写动态pdf。你会得到你想要的