int main(int argc, char * argv[]) { FILE* ifp; const char *name; /* malloc'ed */ struct cmdline_info cmdline; pnm_init( &argc, argv ); parseCommandLine(argc, argv, &cmdline); verbose = cmdline.verbose; ifp = pm_openr(cmdline.input_filespec); if (strcmp(cmdline.input_filespec, "-") == 0 ) name = strdup("noname"); else name = basebasename(cmdline.input_filespec); { int eof; /* There are no more images in the input file */ unsigned int image_seq; /* I don't know if this works at all for multi-image PNM input. Before July 2000, it ignored everything after the first image, so this probably is at least as good -- it should be identical for a single-image file, which is the only kind which was legal before July 2000. Maybe there needs to be some per-file header and trailers stuff in the Postscript program, with some per-page header and trailer stuff inside. I don't know Postscript. - Bryan 2000.06.19. */ eof = FALSE; /* There is always at least one image */ for (image_seq = 0; !eof; image_seq++) { convertPage(ifp, cmdline.mustturn, cmdline.canturn, cmdline.psfilter, cmdline.rle, cmdline.flate, cmdline.ascii85, cmdline.setpage, cmdline.showpage, cmdline.center, cmdline.scale, cmdline.dpiX, cmdline.dpiY, cmdline.width, cmdline.height, cmdline.imagewidth, cmdline.imageheight, cmdline.equalpixels, name, cmdline.dict, cmdline.vmreclaim, cmdline.levelSpec, cmdline.level); pnm_nextimage(ifp, &eof); } } strfree(name); pm_close(ifp); return 0; }
int main(int argn, char *args[]) { // Poppler stuff PopplerDocument *pdffile; PopplerPage *page; // Initialise the GType library g_type_init (); // Get command line arguments if ((argn < 3)||(argn > 4)) { printf("Usage: pdf2svg <in file.pdf> <out file.svg> [<page no>]\n"); return -2; } gchar *absoluteFileName = getAbsoluteFileName(args[1]); gchar *filename_uri = g_filename_to_uri(absoluteFileName, NULL, NULL); gchar *pageLabel = NULL; char* svgFilename = args[2]; g_free(absoluteFileName); if (argn == 4) { // Get page number pageLabel = g_strdup(args[3]); } // Open the PDF file pdffile = poppler_document_new_from_file(filename_uri, NULL, NULL); g_free(filename_uri); if (pdffile == NULL) { fprintf(stderr, "Unable to open file\n"); return -3; } int conversionErrors = 0; // Get the page if(pageLabel == NULL) { page = poppler_document_get_page(pdffile, 0); conversionErrors = convertPage(page, svgFilename); } else { if(strcmp(pageLabel, "all") == 0) { int curError; int pageCount = poppler_document_get_n_pages(pdffile); if(pageCount > 9999999) { fprintf(stderr, "Too many pages (>9,999,999)\n"); return -5; } size_t svgFilenameBufLen = strlen(svgFilename) + 1; char *svgFilenameBuffer = (char*)malloc(svgFilenameBufLen); assert(svgFilenameBuffer != NULL); int pageInd; for(pageInd = 0; pageInd < pageCount; pageInd++) { while (1) { size_t _wr_len = snprintf(svgFilenameBuffer, svgFilenameBufLen, svgFilename, pageInd + 1); if (_wr_len >= svgFilenameBufLen) { svgFilenameBufLen = _wr_len + 1; svgFilenameBuffer = (char*)realloc(svgFilenameBuffer, svgFilenameBufLen); assert(svgFilenameBuffer != NULL); continue; } break; } page = poppler_document_get_page(pdffile, pageInd); curError = convertPage(page, svgFilenameBuffer); if(curError != 0) conversionErrors = -1; } free(svgFilenameBuffer); } else { page = poppler_document_get_page_by_label(pdffile, pageLabel); conversionErrors = convertPage(page, svgFilename); g_free(pageLabel); } } g_object_unref(pdffile); if(conversionErrors != 0) { return -4; } else { return 0; } }