0

I know how to list fonts used in an single PDF page and how to identify which tends to output garbled text when text extraction is performed. I'd like to know how to count how many times each font in a single PDF page is used in text. For example, let's suppose PDF page 4 of my_file.pdf uses Arial, TimesNewRoman and MyriadPro-Regular. I'd like to get something like:

Page 4
Arial: 1200 characters
TimesNewRoman: 200 characters
MyriadPro-Regular: 10 characters

This SE question is related, but what I want is count occurrences of thousand chars in multiple pages.

I have tried to convert one PDF page to SVG online (https://cloudconvert.com/pdf-to-svg), keeping font paths, but I got:

<g id="Layer-1" data-name="Artifact">
<clipPath id="cp12">
<path transform="matrix(1,0,0,-1,237.4765,826.6425)" d="M 0 -8 L 120.047 -8 L 120.047 .800049 L 0 .800049 Z "/>
</clipPath>
<g clip-path="url(#cp12)">
<symbol id="font_8_2d">
<path d="M .001302084 .21533203 L .086751308 .22705078 C .089029949 .17236328 .09928385 .13492839 .11751302 .114746097 C .13574219 .094563808 .16097005 .084472659 .19319661 .084472659 C .21695964 .084472659 .23746746 .08984375 .25472007 .10058594 C .27197267 .11165365 .28385417 .12646485 .2903646 .14501953 C .296875 .16389974 .30013023 .19384766 .30013023 .23486328 L .30013023 .72802737 L .39485679 .72802737 L .39485679 .24023438 C .39485679 .18033855 .38753257 .13395183 .37288413 .10107422 C .3585612 .06819662 .33561198 .04313151 .30403648 .025878907 C .27278648 .008626302 .23600261 0 .19368489 0 C .13085938 0 .08268229 .018066407 .04915365 .05419922 C .015950522 .09033203 .00000000062088176 .14404297 .001302084 .21533203 Z "/>
</symbol>
<symbol id="font_8_7b">
<path d="M 0 .2709961 C 0 .36702476 .026692709 .43815104 .080078128 .484375 C .12467448 .52278646 .17903646 .5419922 .24316406 .5419922 C .31445313 .5419922 .37272135 .5185547 .41796876 .4716797 C .46321617 .42513023 .48583985 .3606771 .48583985 .2783203 C .48583985 .21158855 .4757487 .15901692 .4555664 .12060547 C .43570964 .08251953 .40657554 .052897138 .36816407 .03173828 C .33007813 .010579427 .28841148 0 .24316406 0 C .17057292 0 .111816409 .02327474 .06689453 .06982422 C .022298178 .116373699 0 .18343099 0 .2709961 M .09033203 .2709961 C .09033203 .20458985 .10481771 .15478516 .13378906 .12158203 C .16276042 .08870443 .19921875 .072265628 .24316406 .072265628 C .28678385 .072265628 .32307945 .08886719 .35205079 .12207031 C .38102214 .15527344 .3955078 .20589192 .3955078 .27392579 C .3955078 .33805339 .38085938 .386556 .3515625 .4194336 C .32259117 .45263673 .28645835 .46923829 .24316406 .46923829 C .19921875 .46923829 .16276042 .45279948 .13378906 .41992188 C .10481771 .38704429 .09033203 .33740235 .09033203 .2709961 M .24414063 .6777344 L .18896485 .59472659 L .088378909 .59472659 L .19384766 .7314453 L .28759767 .7314453 L .39746095 .59472659 L .29785157 .59472659 L .24414063 .6777344 Z "/>
</symbol>
<symbol id="font_8_4d">
<path d="M .111328128 .82421877 L .111328128 .92626956 L .19921875 .92626956 L .19921875 .82421877 L .111328128 .82421877 M 0 .009277344 L .016601563 .083984378 C .034179689 .079427089 .048014326 .07714844 .05810547 .07714844 C .07600912 .07714844 .08935547 .08317057 .09814453 .095214847 C .106933597 .106933597 .111328128 .13655599 .111328128 .18408203 L .111328128 .7290039 L .19921875 .7290039 L .19921875 .1821289 C .19921875 .11832682 .19091797 .07389323 .1743164 .048828126 C .15315755 .016276041 .118001308 0 .068847659 0 C .045084638 0 .022135416 .003092448 0 .009277344 Z "/>
</symbol>
<symbol id="font_8_11">
<path d="M 0 0 L 0 .100097659 L .100097659 .100097659 L .100097659 0 L 0 0 Z "/>
</symbol>
<use xlink:href="#font_8_27" transform="matrix(8,0,0,-8,238.09369,832.9585)" fill="#0000ff"/>
<use xlink:href="#font_8_2d" transform="matrix(8,0,0,-8,243.47255,833.05618)" fill="#0000ff"/>
<use xlink:href="#font_8_3" transform="matrix(8,0,0,-8,247.2525,832.9585)" fill="#0000ff"/>
<use xlink:href="#font_8_28" transform="matrix(8,0,0,-8,250.10932,832.9585)" fill="#0000ff"/>
<use xlink:href="#font_8_4f" transform="matrix(8,0,0,-8,255.32422,832.9585)" fill="#0000ff"/>
<use xlink:href="#font_8_48" transform="matrix(8,0,0,-8,256.88148,833.05227)" fill="#0000ff"/>
<use xlink:href="#font_8_57" transform="matrix(8,0,0,-8,261.17713,833.0132)" fill="#0000ff"/>
<use xlink:href="#font_8_55" transform="matrix(8,0,0,-8,263.78004,832.9585)" fill="#0000ff"/>
<use xlink:href="#font_8_7b" transform="matrix(8,0,0,-8,266.19013,833.05227)" fill="#0000ff"/>
<use xlink:href="#font_8_51" transform="matrix(8,0,0,-8,270.89985,832.9585)" fill="#0000ff"/>
<use xlink:href="#font_8_4c" transform="matrix(8,0,0,-8,275.35176,832.9585)" fill="#0000ff"/>
<use xlink:href="#font_8_46" transform="matrix(8,0,0,-8,276.909,833.05227)" fill="#0000ff"/>
<use xlink:href="#font_8_52" transform="matrix(8,0,0,-8,280.86213,833.05227)" fill="#0000ff"/>
<use xlink:href="#font_8_3" transform="matrix(8,0,0,-8,285.0445,832.9585)" fill="#0000ff"/>
<use xlink:href="#font_8_10" transform="matrix(8,0,0,-8,287.5274,831.23977)" fill="#0000ff"/>
<use xlink:href="#font_8_3" transform="matrix(8,0,0,-8,289.9375,832.9585)" fill="#0000ff"/>
<use xlink:href="#font_8_24" transform="matrix(8,0,0,-8,292.14878,832.9585)" fill="#0000ff"/>
<use xlink:href="#font_8_46" transform="matrix(8,0,0,-8,297.80903,833.05227)" fill="#0000ff"/>
<use xlink:href="#font_8_48" transform="matrix(8,0,0,-8,301.7895,833.05227)" fill="#0000ff"/>
<use xlink:href="#font_8_56" transform="matrix(8,0,0,-8,306.1906,833.05227)" fill="#0000ff"/>
<use xlink:href="#font_8_56" transform="matrix(8,0,0,-8,310.1906,833.05227)" fill="#0000ff"/>
<use xlink:href="#font_8_48" transform="matrix(8,0,0,-8,314.2375,833.05227)" fill="#0000ff"/>
<use xlink:href="#font_8_1d" transform="matrix(8,0,0,-8,319.11518,832.9585)" fill="#0000ff"/>
<use xlink:href="#font_8_3" transform="matrix(8,0,0,-8,320.61653,832.9585)" fill="#0000ff"/>
<use xlink:href="#font_8_57" transform="matrix(8,0,0,-8,322.98014,833.0132)" fill="#0000ff"/>
<use xlink:href="#font_8_4d" transform="matrix(8,0,0,-8,324.69633,834.6421)" fill="#0000ff"/>
<use xlink:href="#font_8_4a" transform="matrix(8,0,0,-8,327.09733,834.6421)" fill="#0000ff"/>
<use xlink:href="#font_8_52" transform="matrix(8,0,0,-8,331.55314,833.05227)" fill="#0000ff"/>
<use xlink:href="#font_8_11" transform="matrix(8,0,0,-8,336.46208,832.9585)" fill="#0000ff"/>
<use xlink:href="#font_8_4d" transform="matrix(8,0,0,-8,337.59233,834.6421)" fill="#0000ff"/>
<use xlink:href="#font_8_58" transform="matrix(8,0,0,-8,340.24723,833.05227)" fill="#0000ff"/>
<use xlink:href="#font_8_56" transform="matrix(8,0,0,-8,344.4296,833.05227)" fill="#0000ff"/>
<use xlink:href="#font_8_11" transform="matrix(8,0,0,-8,348.91007,832.9585)" fill="#0000ff"/>
<use xlink:href="#font_8_45" transform="matrix(8,0,0,-8,350.93095,833.05227)" fill="#0000ff"/>
<use xlink:href="#font_8_55" transform="matrix(8,0,0,-8,355.37504,832.9585)" fill="#0000ff"/>
</g>
</g>

The content above is part of the SVG file generated. I don't know how to interpret it, maybe I can get font frequency here, but I think it's not possible to link, for example, "Arial" to its font notation in this SVG file.

4
  • 1
    Why convert to SVG? You can simply uncompress a PDF file using e.g. pdftk: pdftk doc.pdf output doc.unc.pdf uncompress then the PDF file is also readable as text.
    – Robert
    Jul 14, 2021 at 13:13
  • Right, I'm used to pdftk. I'm not interested in the textual content itself. I just need to know how many times each font is used by page. It could be in absolute terms or through percentage. SVG conversion was just a try to achieve that Jul 14, 2021 at 15:39
  • I wonder if it matters (in your question or in the garbled text problem) that whether or not the font is embedded (or subset) in the PDF file.
    – Tom Yan
    Jul 14, 2021 at 18:24
  • I think it does not matter, but not sure if it should Jul 15, 2021 at 12:59

0

You must log in to answer this question.

Browse other questions tagged .