79 const char *debugfile)
85 return ERROR_INT(
"dirname not defined", __func__, 1);
86 if (nparts < 0 || nparts > 10)
87 return ERROR_INT(
"nparts not in [1 ... 10]", __func__, 1);
88 if (!outroot || outroot[0] ==
'\n')
89 return ERROR_INT(
"outroot undefined or empty", __func__, 1);
91 pixadb = (debugfile) ? pixaCreate(0) : NULL;
92 pixac = pixacompCreateFromFiles(dirname, substr, IFF_PNG);
95 L_INFO(
"writing debug output to %s\n", __func__, debugfile);
97 "Partify Debug", debugfile);
99 pixacompDestroy(&pixac);
100 pixaDestroy(&pixadb);
127l_int32 i, j, pageno, res, npage, nbox, icount, line;
131BOXA *boxa1, *boxa2, *boxa3;
132PIX *pix1, *pix2, *pix3, *pix4, *pix5;
136 return ERROR_INT(
"pixac not defined", __func__, 1);
137 if ((npage = pixacompGetCount(pixac)) == 0)
138 return ERROR_INT(
"pixac is empty", __func__, 1);
139 if (nparts < 1 || nparts > 10)
140 return ERROR_INT(
"nparts not in [1 ... 10]", __func__, 1);
141 if (!outroot || outroot[0] ==
'\n')
142 return ERROR_INT(
"outroot undefined or empty", __func__, 1);
145 pixaca = (
PIXAC **)LEPT_CALLOC(nparts,
sizeof(
PIXAC *));
146 for (i = 0; i < nparts; i++)
147 pixaca[i] = pixacompCreate(0);
151 bmf = bmfCreate(NULL, 10);
152 for (pageno = 0; pageno < npage; pageno++) {
153 if ((pix1 = pixacompGetPix(pixac, pageno)) == NULL) {
154 L_ERROR(
"pix for page %d not found\n", __func__, pageno);
159 res = pixGetXRes(pix1);
160 if (res == 0 || res == 300 || res > 600) {
161 pix2 = pixClone(pix1);
163 factor = 300.0f / (l_float32)res;
165 L_WARNING(
"resolution is very low\n", __func__);
166 pix2 = pixScale(pix1, factor, factor);
168 pix3 = pixConvertTo1Adaptive(pix2);
169 pix4 = pixDeskew(pix3, 0);
174 L_ERROR(
"pix for page %d not deskewed\n", __func__, pageno);
177 pix1 = pixClone(pix4);
181 boxa1 = pixLocateStaveSets(pix1, pageno, pixadb);
191 nbox = boxaGetCount(boxa1);
192 lept_stderr(
"number of boxes in page %d: %d\n", pageno, nbox);
193 for (i = 0; i < nbox; i++, line++) {
194 snprintf(buf,
sizeof(buf),
"%d", line);
195 box1 = boxaGetBox(boxa1, i,
L_COPY);
196 pix2 = pixClipRectangle(pix1, box1, NULL);
197 pix3 = pixMorphSequence(pix2,
"d1.20 + o50.1 + o1.30", 0);
198 boxa2 = pixConnCompBB(pix3, 8);
200 boxaRemoveVGaps(boxa3);
201 icount = boxaGetCount(boxa3);
203 L_WARNING(
"nparts requested = %d, but only found %d\n",
204 __func__, nparts, icount);
205 for (j = 0; j < icount && j < nparts; j++) {
206 box2 = boxaGetBox(boxa3, j,
L_COPY);
208 boxSetSideLocations(box2, -1, -1, -1,
209 pixGetHeight(pix1) - 1);
210 pix4 = pixClipRectangle(pix2, box2, NULL);
211 pix5 = pixAddTextlines(pix4, bmf, buf, 1,
L_ADD_LEFT);
212 pixacompAddPix(pixaca[j], pix5, IFF_TIFF_G4);
228 for (i = 0; i < nparts; i++) {
229 snprintf(buf,
sizeof(buf),
"%s-%d.pdf", outroot, i);
230 L_INFO(
"writing part %d: %s\n", __func__, i, buf);
231 pixacompConvertToPdf(pixaca[i], 300, 1.0,
L_G4_ENCODE, 0, NULL, buf);
232 pixacompDestroy(&pixaca[i]);
302l_int32 nbox, i, y1, h1, y2, h2, delta;
309 boxaGetBoxGeometry(boxa, i, NULL, &y1, NULL, &h1);
310 boxaGetBoxGeometry(boxa, i + 1, NULL, &y2, NULL, &h2);
313 boxaAdjustBoxSides(boxa, i + 1, 0, 0, -delta, 0);
315 boxaAdjustBoxSides(boxa, nbox - 1, 0, 0, 0, delta);