IF 语句给出 Cannot resolve symbol in PDFDocument

IF statements giving Cannot resolve symbol in PDFDocument

所以在我的应用程序中我将图片上传到我公司的服务器

然后使用内置的 PDFdocument 方法将这些图像转换为 PDF,

现在我的问题是我试图通过添加 IF 语句使 PDF 生成动态化。 所以我的图像被加载到一个数组列表中,如果 ArrayList 中的某个位置有一个项目,我调用 PDF 页面创建

 if(list.contains(list.get(0))){
code here

}

但是我得到无法解析下一页代码中的符号。

如果列表在位置 X 包含一个项目,那么它会生成一个页面,所以最终结果是用户选择的每张图片都会创建一个新页面

PDF 创建代码

PdfDocument document=new PdfDocument();

    if(list.contains(list.get(0))) {
        PdfDocument.PageInfo pageInfo=new PdfDocument.PageInfo.Builder(300, 6000, 1).create();
        PdfDocument.Page page=document.startPage(pageInfo);
        Canvas canvas=page.getCanvas();

        Bitmap image=BitmapFactory.decodeFile(list.get(0));
        canvas.setDensity(DENSITY_XHIGH);
        image.setDensity(DENSITY_XHIGH);
        canvas.drawBitmap(image, 1, 1, null);
        document.finishPage(page);
    }

** 我正在获取无法解析页面上的符号,pageInfo,canvas**

if(list.contains(list.get(1))) {
         pageInfo = new PdfDocument.PageInfo.Builder(, 6000, 2).create();
        page = document.startPage(pageInfo);
        canvas = page.getCanvas();

            Bitmap image2=BitmapFactory.decodeFile(list.get(1));
            canvas.setDensity(DENSITY_XHIGH);
            image2.setDensity(DENSITY_XHIGH);
            canvas.drawBitmap(image2, 1, 1, null);
            document.finishPage(page);
}


        String directory_path=Environment.getExternalStorageDirectory().getPath() + "/mypdf/";
        File file=new File(directory_path);
        if (!file.exists()) {
            file.mkdirs();
        }
        String timeStamp = (new SimpleDateFormat("yyyyMMdd_HHmmss")).format(new Date());
        String targetPdf=directory_path + timeStamp +".pdf";
        File filePath=new File(targetPdf);
        try {
            document.writeTo(new FileOutputStream(filePath));
            Toast.makeText(this, "Done", Toast.LENGTH_LONG).show();
        } catch (IOException e) {
            Log.e("main", "error " + e.toString());
            Toast.makeText(this, "Something wrong: " + e.toString(), Toast.LENGTH_LONG).show();
        }
        // close the document
        document.close();

我认为我的问题是我在 m IF 语句的某处有语法错误,但我不确定任何帮助将不胜感激

它与你的 if 语句无关,只与你的代码块的范围有关。

if ( condition ) {
  String t = "yes";
}
System.out.println("myString " + t);

这个简单的代码会导致与您当前代码完全相同的问题。 t 是 if 块中的局部变量。该块完成后,变量将不再存在。

解决这个问题:

String t = "";
if ( condition ) {
  t = "yes";
}
System.out.println("myString " + t);

这样,t 变量在您的 if 块完成后就可以访问了,因为它没有在 if 块中声明,所以它不受其作用域的限制。

重新迭代

在此代码中

if(list.contains(list.get(0))) {
    PdfDocument.PageInfo pageInfo=new PdfDocument.PageInfo.Builder(300, 6000, 1).create();
    PdfDocument.Page page=document.startPage(pageInfo);
    Canvas canvas=page.getCanvas();
    ....
 }

您正在声明变量 pageInfo pagecanvas - 它们的范围仅限于此块,因此对

不可见
if(list.contains(list.get(1))) {
     pageInfo = new PdfDocument.PageInfo.Builder(, 6000, 2).create();
    page = document.startPage(pageInfo);
    canvas = page.getCanvas();
    ....
}

您可以在 first if 块之前将它们声明为

PdfDocument.PageInfo pageInfo = null;
PdfDocument.Page page = null;
Canvas canvas = null;

if(list.contains(list.get(0))) {
     pageInfo = .... // set value
}

if(list.contains(list.get(1))) {
     pageInfo = ....
}