我有一个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);
此方法调用后失败。
答案 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
并删除@
。您应该能够看到出了什么问题。