Java 如何在Android中将选定图像从图像切换器转换为PDF?
我正在从gallery中选择多个图像并将其显示在image switcher中。 我想将图像切换器中显示的所有这些图像转换为PDF格式。 我正在使用android.graphics.pdf.PdfDocument,但我不知道如何正确使用它将多个图像转换为pdf。 如何将多个图像转换为PDF? 我的代码示例: 来自我的Android studio IDE的IMG2PDF.java:Java 如何在Android中将选定图像从图像切换器转换为PDF?,java,android,android-studio,android-bitmap,Java,Android,Android Studio,Android Bitmap,我正在从gallery中选择多个图像并将其显示在image switcher中。 我想将图像切换器中显示的所有这些图像转换为PDF格式。 我正在使用android.graphics.pdf.PdfDocument,但我不知道如何正确使用它将多个图像转换为pdf。 如何将多个图像转换为PDF? 我的代码示例: 来自我的Android studio IDE的IMG2PDF.java: public class IMG2PDF extends AppCompatActivity { Toolb
public class IMG2PDF extends AppCompatActivity {
Toolbar toolbar;
Button selectfilebtn,convert2pdfbtn,nextbtn,prevbtn;
ArrayList<Uri> imageuri =new ArrayList<>();;
ImageSwitcher imageSwitcher;
private static final int PICK_IMAGES=0;
int position=0;
int img;
@Override
public void onCreate( Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_imagetopdfconverter);
selectfilebtn = findViewById(R.id.select_file);
convert2pdfbtn = findViewById(R.id.convert_to_pdf);
nextbtn = findViewById(R.id.next);
prevbtn = findViewById(R.id.prev);
imageSwitcher = findViewById(R.id.imagetoconvert);
imageSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
@Override
public View makeView() {
ImageView imageView = new ImageView(IMG2PDF.this);
return imageView;
}
});
ActivityResultLauncher<Intent> launchactivity = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
Intent data = result.getData();
if (data.getClipData() != null) {
img = data.getClipData().getItemCount();
for (int i = 0; i < img; i++) {
Uri imguri = data.getClipData().getItemAt(i).getUri();
imageuri.add(imguri);
}
imageSwitcher.setImageURI(imageuri.get(0));
position = 0;
}
}
});
selectfilebtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(IMG2PDF.this, "Soon the App will be world best App InShaAllah ta'aala", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
intent.setAction(Intent.ACTION_GET_CONTENT);
launchactivity.launch(Intent.createChooser(intent, "Pictures: "));
}
});
nextbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (position > 0) {
position--;
imageSwitcher.setImageURI(imageuri.get(position));
}
}
});
convert2pdfbtn.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public void onClick(View v) {
//I dont know what to provide in Path
final File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),"MY_PDF"+".pdf");
if(file!=null)
{
try {
FileOutputStream fileOutputStream=new FileOutputStream(file);
PdfDocument pdfDocument=new PdfDocument();
for(int i=0;i<imageuri.size();i++)
{
Bitmap bitmap= BitmapFactory.decodeFile(imageuri.get(i).getPath());
PdfDocument.PageInfo pageInfo=new PdfDocument.PageInfo.Builder(bitmap.getWidth(),bitmap.getHeight(),(i+1)).create();
PdfDocument.Page page=pdfDocument.startPage(pageInfo);
Canvas canvas=page.getCanvas();
Paint paint=new Paint();
paint.setColor(Color.BLUE);
canvas.drawPaint(paint);
canvas.drawBitmap(bitmap,0f,0f,null);
pdfDocument.finishPage(page);
bitmap.recycle();
}
pdfDocument.writeTo(fileOutputStream);
pdfDocument.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
prevbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(IMG2PDF.this, "WORKING", Toast.LENGTH_SHORT).show();
if (position < imageuri.size() - 1) {
position++;
imageSwitcher.setImageURI(imageuri.get(position));
}
}
});
}
}
公共类IMG2PDF扩展了AppCompative活动{
工具栏;
按钮选择FileBTN、convert2pdfbtn、nextbtn、prevbtn;
ArrayList imageuri=新的ArrayList();;
图像切换器;
私有静态最终整型拾取图像=0;
int位置=0;
int img;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u imagetopdfconverter);
selectfilebtn=findviewbyd(R.id.select\u文件);
convert2pdfbtn=findviewbyd(R.id.convert\u to\u pdf);
nextbtn=findviewbyd(R.id.next);
prevbtn=findViewById(R.id.prev);
imageSwitcher=findViewById(R.id.imagetoconvert);
imageSwitcher.setFactory(新的ViewSwitcher.ViewFactory(){
@凌驾
公共视图makeView(){
ImageView ImageView=新的ImageView(IMG2PDF.this);
返回图像视图;
}
});
ActivityResultLauncher launchactivity=registerForActivityResult(新ActivityResultContracts.StartActivityForResult(),新ActivityResultCallback()){
@凌驾
ActivityResult上的公共无效(ActivityResult结果){
Intent data=result.getData();
if(data.getClipData()!=null){
img=data.getClipData().getItemCount();
对于(int i=0;i
0){
位置--;
setImageURI(imageuri.get(position));
}
}
});
convert2pdfbtn.setOnClickListener(新视图.OnClickListener(){
@RequiresApi(api=Build.VERSION\u CODES.KITKAT)
@凌驾
公共void onClick(视图v){
//我不知道在路径中提供什么
最终文件=新文件(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_下载),“MY_PDF”+“.PDF”);
如果(文件!=null)
{
试一试{
FileOutputStream FileOutputStream=新的FileOutputStream(文件);
PdfDocument PdfDocument=新PdfDocument();
对于(int i=0;i