#include "versatile_pdf.h" #include "bloputils.h" namespace blop { void versatile_pdf::assemble_pages(const std::vector<std::string> &filenames) { std::string cmd = "pdftk "; for(unsigned int i=0; i<filenames.size(); ++i) cmd += filenames[i] + " "; cmd += "cat output " + outfilename_; if(system(cmd) != 0) { warning::print("Failed to assemble versatile_pdf: " + outfilename_, "versatile_pdf::assemble_pages(...)"); } } versatile_pdf::~versatile_pdf() { if(needs_flush_) assemble_pages(page_filenames_); } void versatile_pdf::include(const var &fn) { string filename(fn); ifstream test(filename.c_str()); if(!test.good()) { warning::print("File does not exist: " & filename, "versatile_pdf::include_pdf(filename)"); return; } if(filename.rfind(".pdf") == filename.size()-4 || filename.rfind(".PDF") == filename.size()-4) { ++pagecounter_; page_filenames_.push_back(filename); } else { char tmpfilename[200]; sprintf(tmpfilename,"%s/page_%i.pdf",tmpdir_.c_str(),pagecounter_++); string cmd = string("convert ") + filename + " " + tmpfilename; cerr<<cmd<<endl; if(system(cmd)==0) { page_filenames_.push_back(tmpfilename); } else { warning::print("Conversion failed: " + cmd, "versatile_pdf::include(\"" + filename + "\")"); } } if(pagecounter_%flush_frequency_==0) { assemble_pages(page_filenames_); needs_flush_ = false; } else needs_flush_ = true; } }