#include #include "ppapi.h" #include "util/utiliof.h" static const char * sizenum (size_t s) { static char buffer[32]; if (s < 1000) sprintf(buffer, "%uB", (unsigned)s); else if (s < 1000000) sprintf(buffer, "%.2fkB", (double)(s) / 1000); else sprintf(buffer, "%.2fMB", (double)(s) / 1000000); return buffer; } static const char * crypt_info (ppdoc *pdf) { switch (ppdoc_crypt_status(pdf)) { case PPCRYPT_NONE: return "none"; case PPCRYPT_DONE: return "empty password"; case PPCRYPT_PASS: return "nonempty password"; default: break; } return "this shouldn't happen"; } static void print_info (ppdoc *pdf) { ppdict *info; ppstring *creator, *producer; size_t memused, memwaste; if ((info = ppdoc_info(pdf)) != NULL) { if ((creator = ppdict_rget_string(info, "Creator")) != NULL) printf(" creator: %s\n", ppstring_decoded_data(creator)); if ((producer = ppdict_rget_string(info, "Producer")) != NULL) printf(" producer: %s\n", ppstring_decoded_data(producer)); } printf(" version: %s\n", ppdoc_version_string(pdf)); printf(" protection: %s\n", crypt_info(pdf)); printf(" filesize: %s\n", sizenum(ppdoc_file_size(pdf))); printf(" objects: %lu\n", (unsigned long)ppdoc_objects(pdf)); printf(" pagecount: %lu\n", (unsigned long)ppdoc_page_count(pdf)); memused = ppdoc_memory(pdf, &memwaste); printf(" memused: %s\n", sizenum(memused)); printf(" memwaste: %s\n", sizenum(memwaste)); } static int usage (const char *argv0) { printf("pplib " pplib_version ", " pplib_author "\n"); printf("usage: %s file1.pdf file2.pdf ...\n", argv0); return 0; } int main (int argc, const char **argv) { const char *filepath; int a; ppdoc *pdf; const void *data; size_t size; if (argc < 2) return usage(argv[0]); for (a = 1; a < argc; ++a) { filepath = argv[a]; printf("loading %s... ", filepath); pdf = ppdoc_load(filepath); if (pdf == NULL) { printf("failed\n"); continue; } printf("done.\n"); print_info(pdf); ppdoc_free(pdf); /* now loading from memory buffer */ printf("loading %s from mem buffer... ", filepath); data = iof_copy_file_data(filepath, &size); if (data != NULL) { pdf = ppdoc_mem(data, size); if (pdf == NULL) { printf("failed\n"); continue; } printf("done.\n"); //print_info(pdf); ppdoc_free(pdf); } } return 0; }