每个循环之后的结果错误。 JSON格式

时间:2019-07-10 10:28:52

标签: php json pdf

我有一个JSON结果文件,其中包含所有链接,但是在foreach循环之后,我几乎错过了所有数据。

我已经调试了代码,并将爆炸从-更改为_,但这没有帮助。

$pdfs = preg_grep('~\.(pdf)$~', getDirContents($config['directory']));

$result = [];
echo '<pre>';
var_dump($pdfs);

foreach ($pdfs as $doc) {

    var_dump($doc);
    $url = explode("/", $doc);
    $parser = new \Smalot\PdfParser\Parser();
    $pdf = $parser->parseFile($doc);

    $text = $pdf->getText();
    $result[] = [
        'file' => $url[9],
        'text' => $text, 
    ];
}
$fp = fopen('results.json', 'w');
fwrite($fp, json_encode($result));
fclose($fp);

除了我可以拥有JSON文件中包含的所有内容外。

array(27) {
  [0]=>
  string(111) "/home/***/domains/***.com/public_html/doc/documenten/something/247Rostar-QRC-TR-A4-android-DEF.pdf"
  [1]=>
  string(107) "/home/***/domains/***.com/public_html/doc/documenten/something/247Rostar-QRC-TR-A4-iOs-DEF.pdf"
  [2]=>
  string(102) "/home/***/domains/***.com/public_html/doc/documenten/something/Anonimiseren Databases.pdf"
  [3]=>
  string(110) "/home/***/domains/***.com/public_html/doc/documenten/something/Arbeidstijdenwet in CAS.pdf"
  [4]=>
  string(128) "/home/***/domains/***.com/public_html/doc/documenten/something/Configuration Reference Manual - CAS 5,18.pdf"
  [5]=>
  string(128) "/home/***/domains/***.com/public_html/doc/documenten/something/Configuration Reference Manual - CAS 5,19.pdf"
}
string(111) "/home/***/domains/***.com/public_html/doc/documenten/something/247Rostar-QRC-TR-A4-android-DEF.pdf"
string(107) "/home/***/domains/***.com/public_html/doc/documenten/something/247Rostar-QRC-TR-A4-iOs-DEF.pdf"
string(102) "/home/***/domains/***.com/public_html/doc/documenten/something/Anonimiseren Databases.pdf"
string(110) "/home/***/domains/***.com/public_html/doc/documenten/something/Arbeidstijdenwet in CAS.pdf"

在给出答案之前,请先阅读! 第一个数组显示JSON文件中的所有内容,而底部的数组显示每个循环之后的结果。

方法调用后:

$pdf = $parser->parseFile($doc);

此方法调用后失败。

2 个答案:

答案 0 :(得分:0)

尝试一下:

public class JsonToCsv {

public static void main(String args[]) throws JSONException, IOException
{
    List<JSONObject> infoList=new ArrayList<JSONObject>();
    JSONObject info=new JSONObject();
    JSONObject name=new JSONObject();
    name.put("first", "John");
    name.put("last","Doe");
    info.put("name",name );

    List<JSONObject> itemList=new ArrayList<JSONObject>();
    JSONObject item1=new JSONObject();
    JSONObject item2=new JSONObject();
    item1.put("item1", "val1");
    itemList.add(item1);
    item2.put("item2", "val2");
    itemList.add(item2);


    info.put("item", itemList);
    infoList.add(info);

    System.out.println(infoList);
    convertJsonToCsv(infoList);

}

public static void convertJsonToCsv(List<JSONObject> infoList) throws IOException, JSONException {

    FileWriter csvWriter = new FileWriter("InfoFile.csv"); 
    List<String> header= new ArrayList<String>();
    List<String> values = new ArrayList<String>();

    for(int i=0;i<infoList.size();i++) {

        JSONObject info_obj=infoList.get(i);
        Iterator<String> info_keys=info_obj.keys();
        while(info_keys.hasNext()) {
            String key = info_keys.next();

            if (info_obj.get(key) instanceof JSONObject) {

                JSONObject obj=info_obj.getJSONObject(key);
                Iterator<String> obj_keys=obj.keys();
                while(obj_keys.hasNext()) {
                    String k=obj_keys.next();
                    if(i==0)
                        header.add(k);
                    values.add(obj.getString(k));
                }

            }
            if (info_obj.get(key) instanceof JSONArray) {


                JSONArray item_array=info_obj.getJSONArray(key);
                for(int j=0;j<item_array.length();j++) {

                    JSONObject item=item_array.getJSONObject(j);
                    Iterator<String> item_keys=item.keys();
                    while(item_keys.hasNext()) {
                        String k=item_keys.next();
                        if(i==0)
                            header.add(k);
                        values.add(item.getString(k));
                    }
                }

            }

        }


    }

    for(String head : header) {

        csvWriter.append(head);  
        csvWriter.append(","); 
    }
    csvWriter.append("\n");

    for(int m=0;m<values.size();m++) {


        csvWriter.append(values.get(m)); 
        if((m+1)%(header.size())==0) {

            csvWriter.append("\n"); 
        }
        else {
            csvWriter.append(","); 
        }

    }
    csvWriter.flush();


}

它基本上可以做相同的事情,但绒毛较少。 您可能需要调整$ config [“ directory”]以匹配PDF的存储路径。

答案 1 :(得分:0)

Smalot\PdfParser的旧版本中,直到v0.12.0,parseFile()方法使解析PDF内容时发生的错误静音。参见Smalot/PdfParser/Parser.php line 74

此问题为fixed in v0.13.0。确保您至少运行v0.13。


即使在最新版本中,在创建新的@对象时,TCPDF_PARSER运算符仍用于使错误静音。参见line 93

@$parser = new \TCPDF_PARSER(ltrim($content));

任何致命错误也将导致代码退出而没有清晰的错误消息。

如果v0.14仍然存在问题,请编辑Smalot/PdfParser/Parser.php并删除@。您应该能够看到出了什么问题。