java - 如何在 Android 中将所选图像从 Image Switcher 转换为 PDF?
问题描述
我正在从图库中选择多个图像并将其显示在图像切换器中。我想将图像切换器中显示的所有这些图像转换为 PDF。我正在使用android.graphics.pdf.PdfDocument
,但我不知道如何正确使用它将多个图像转换为 PDF。如何将多个图像转换为 PDF?我尝试过的代码示例:
我的 Android Studio IDE 中的 IMG2PDF.java:
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));
}
}
});
}
}
解决方案
推荐阅读
- python - 我不能让标签交互变化
- python - 如何在不单击展开按钮的情况下抓取页面的源代码?
- r - R - 通过循环更新列
- clojure - Clojure - 迭代惰性集合时出现 StackOverflowError
- dart - 如何在 Dart 中修复未定义的 File() 类及其方法?
- python - 需要帮助来理解一段 while 循环代码吗?
- python - 为什么 shell 输出到 stderr?
- reactjs - 将我的站点部署到 Github 页面后,URL 出现严重问题我不知道如何修复
- json - 如何修复'AttributeError:'dict'对象没有属性......'python断言中的错误
- python - 如何在python中对二进制图像进行组件标记