#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;
}
}