mirror of
https://github.com/pdf2htmlEX/pdf2htmlEX.git
synced 2024-12-22 13:00:08 +00:00
new option for fixing glyph width
This commit is contained in:
parent
dafc4b86dd
commit
c8133d64e3
@ -35,7 +35,7 @@ Specify owner password
|
|||||||
.B -u, --user-password <password>
|
.B -u, --user-password <password>
|
||||||
Specify user password
|
Specify user password
|
||||||
.TP
|
.TP
|
||||||
.B --dest-dir <dir> (Default: ".")
|
.B --dest-dir <dir> (Default: .)
|
||||||
Specify destination folder
|
Specify destination folder
|
||||||
.TP
|
.TP
|
||||||
.B --data-dir <dir> (Default: @CMAKE_INSTALL_PREFIX@/share/pdf2htmlEX)
|
.B --data-dir <dir> (Default: @CMAKE_INSTALL_PREFIX@/share/pdf2htmlEX)
|
||||||
@ -117,15 +117,21 @@ Treat space characters as offsets, which may increase the size of the output.
|
|||||||
|
|
||||||
Turn it on if space characters are not displayed correctly, or you want to remove positional spaces.
|
Turn it on if space characters are not displayed correctly, or you want to remove positional spaces.
|
||||||
.TP
|
.TP
|
||||||
.B --css-filename <filename> (Default: "")
|
.B --stretch-narrow-glyph <0|1> (Default: 0)
|
||||||
|
If set to 1, glyphs narrower than described in PDF will be strecth; otherwise space will be padded to the right of the glyphs
|
||||||
|
.TP
|
||||||
|
.B --squeeze_wide_glyph <0|1> (Default: 0)
|
||||||
|
If set to 1, glyphs wider than described in PDF will be squeezed; otherwise it will be truncated.
|
||||||
|
.TP
|
||||||
|
.B --css-filename <filename> (Default: <none>)
|
||||||
Specify the filename of the generated css file, if not embedded.
|
Specify the filename of the generated css file, if not embedded.
|
||||||
|
|
||||||
If it's empty, the file name will be determined automatically.
|
If it's empty, the file name will be determined automatically.
|
||||||
.TP
|
.TP
|
||||||
.B --font-suffix <suffix> (Default: ".ttf"), --font-format <format> (Default: "truetype")
|
.B --font-suffix <suffix> (Default: .ttf), --font-format <format> (Default: truetype)
|
||||||
Specify the suffix and format of fonts extracted from the PDF file. They should be consistent.
|
Specify the suffix and format of fonts extracted from the PDF file. They should be consistent.
|
||||||
.TP
|
.TP
|
||||||
.B --external-hint-tool <tool> (Default: "")
|
.B --external-hint-tool <tool> (Default: <none>)
|
||||||
If specified, the tool will be called in order to enhanced hinting for fonts, this will precede --auto-hint.
|
If specified, the tool will be called in order to enhanced hinting for fonts, this will precede --auto-hint.
|
||||||
|
|
||||||
The tool will be called as '<tool> <in.suffix> <out.suffix>', where suffix will be the same as specified for --font-suffix.
|
The tool will be called as '<tool> <in.suffix> <out.suffix>', where suffix will be the same as specified for --font-suffix.
|
||||||
@ -141,10 +147,10 @@ If switched off, intermediate files won't be cleaned in the end.
|
|||||||
.B pdf2htmlEX /path/to/file.pdf
|
.B pdf2htmlEX /path/to/file.pdf
|
||||||
Convert file.pdf into file.html
|
Convert file.pdf into file.html
|
||||||
.TP
|
.TP
|
||||||
.B pdf2htmlEX --tmp-dir tmp --clean-tmp 0 --debug 1 /path/to/file.pdf
|
.B pdf2htmlEX --clean-tmp 0 --debug 1 /path/to/file.pdf
|
||||||
Convert file.pdf and leave all intermediate files.
|
Convert file.pdf and leave all intermediate files.
|
||||||
.TP
|
.TP
|
||||||
.B pdf2htmlEX --dest-dir out --single-html 0 --debug 1 /path/to/file.pdf
|
.B pdf2htmlEX --dest-dir out --single-html 0 /path/to/file.pdf
|
||||||
Convert file.pdf into out/file.html and leave font/image files separated.
|
Convert file.pdf into out/file.html and leave font/image files separated.
|
||||||
|
|
||||||
.SH COPYRIGHT
|
.SH COPYRIGHT
|
||||||
|
@ -398,7 +398,7 @@ void HTMLRenderer::embed_font(const string & filepath, GfxFont * font, FontInfo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ffw_set_widths(width_list, max_key + 1);
|
ffw_set_widths(width_list, max_key + 1, param->stretch_narrow_glyph, param->squeeze_wide_glyph);
|
||||||
ffw_reencode_raw(cur_mapping, max_key + 1, 1);
|
ffw_reencode_raw(cur_mapping, max_key + 1, 1);
|
||||||
|
|
||||||
if(ctu)
|
if(ctu)
|
||||||
|
20
src/ffw.c
20
src/ffw.c
@ -19,6 +19,8 @@
|
|||||||
|
|
||||||
#include "ffw.h"
|
#include "ffw.h"
|
||||||
|
|
||||||
|
static real EPS=1e-6;
|
||||||
|
|
||||||
static inline int min(int a, int b)
|
static inline int min(int a, int b)
|
||||||
{
|
{
|
||||||
return (a<b)?a:b;
|
return (a<b)?a:b;
|
||||||
@ -294,16 +296,16 @@ void ffw_metric(double * ascent, double * descent)
|
|||||||
/*
|
/*
|
||||||
* TODO:bitmap, reference have not been considered in this function
|
* TODO:bitmap, reference have not been considered in this function
|
||||||
*/
|
*/
|
||||||
void ffw_set_widths(int * width_list, int mapping_len)
|
void ffw_set_widths(int * width_list, int mapping_len, int stretch_narrow, int squeeze_wide)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* Disabled, because it causes crashing
|
||||||
|
|
||||||
memset(cur_fv->selected, 1, cur_fv->map->enccount);
|
memset(cur_fv->selected, 1, cur_fv->map->enccount);
|
||||||
// remove kern
|
// remove kern
|
||||||
FVRemoveKerns(cur_fv);
|
FVRemoveKerns(cur_fv);
|
||||||
FVRemoveVKerns(cur_fv);
|
FVRemoveVKerns(cur_fv);
|
||||||
// remove bearing
|
*/
|
||||||
// TODO: optimize this, merge the transform matrix with width setting (below)
|
|
||||||
//FVSetWidthScript(cur_fv, wt_lbearing, 0, 0);
|
|
||||||
//FVSetWidthScript(cur_fv, wt_rbearing, 0, 0);
|
|
||||||
|
|
||||||
SplineFont * sf = cur_fv->sf;
|
SplineFont * sf = cur_fv->sf;
|
||||||
|
|
||||||
@ -333,12 +335,12 @@ void ffw_set_widths(int * width_list, int mapping_len)
|
|||||||
DBounds bb;
|
DBounds bb;
|
||||||
SplineCharFindBounds(sc, &bb);
|
SplineCharFindBounds(sc, &bb);
|
||||||
|
|
||||||
// TODO: add an option
|
|
||||||
double glyph_width = bb.maxx - bb.minx;
|
double glyph_width = bb.maxx - bb.minx;
|
||||||
if(glyph_width > width_list[i])
|
if((glyph_width > EPS)
|
||||||
|
&& (((glyph_width > width_list[i] + EPS) && (squeeze_wide))
|
||||||
|
|| ((glyph_width < width_list[i] - EPS) && (stretch_narrow))))
|
||||||
{
|
{
|
||||||
real transform[6];
|
real transform[6]; transform[0] = ((double)width_list[i]) / glyph_width;
|
||||||
transform[0] = ((double)width_list[i]) / glyph_width;
|
|
||||||
transform[3] = 1.0;
|
transform[3] = 1.0;
|
||||||
transform[1] = transform[2] = transform[4] = transform[5] = 0;
|
transform[1] = transform[2] = transform[4] = transform[5] = 0;
|
||||||
FVTrans(cur_fv, sc, transform, NULL, fvt_alllayers | fvt_dontmovewidth);
|
FVTrans(cur_fv, sc, transform, NULL, fvt_alllayers | fvt_dontmovewidth);
|
||||||
|
@ -40,9 +40,13 @@ struct Param
|
|||||||
double h_eps, v_eps;
|
double h_eps, v_eps;
|
||||||
double space_threshold;
|
double space_threshold;
|
||||||
double font_size_multiplier;
|
double font_size_multiplier;
|
||||||
|
|
||||||
int auto_hint;
|
int auto_hint;
|
||||||
int tounicode;
|
int tounicode;
|
||||||
int space_as_offset;
|
int space_as_offset;
|
||||||
|
|
||||||
|
int stretch_narrow_glyph;
|
||||||
|
int squeeze_wide_glyph;
|
||||||
|
|
||||||
std::string css_filename;
|
std::string css_filename;
|
||||||
std::string font_suffix, font_format;
|
std::string font_suffix, font_format;
|
||||||
|
@ -34,7 +34,7 @@ int ffw_get_em_size(void);
|
|||||||
// fix metrics and get them
|
// fix metrics and get them
|
||||||
void ffw_metric(double * ascent, double * descent);
|
void ffw_metric(double * ascent, double * descent);
|
||||||
|
|
||||||
void ffw_set_widths(int * width_list, int mapping_len);
|
void ffw_set_widths(int * width_list, int mapping_len, int stretch_narrow, int squeeze_wide);
|
||||||
|
|
||||||
void ffw_auto_hint(void);
|
void ffw_auto_hint(void);
|
||||||
|
|
||||||
|
@ -41,6 +41,8 @@ void show_usage_and_exit(const char * dummy = nullptr)
|
|||||||
cerr << "Options:" << endl;
|
cerr << "Options:" << endl;
|
||||||
argparser.show_usage(cerr);
|
argparser.show_usage(cerr);
|
||||||
cerr << endl;
|
cerr << endl;
|
||||||
|
cerr << "Run 'man pdf2htmlEX' for detailed information" << endl;
|
||||||
|
cerr << endl;
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,6 +81,8 @@ void parse_options (int argc, char **argv)
|
|||||||
.add("auto-hint", ¶m.auto_hint, 0, "Whether to generate hints for fonts")
|
.add("auto-hint", ¶m.auto_hint, 0, "Whether to generate hints for fonts")
|
||||||
.add("tounicode", ¶m.tounicode, 0, "Specify how to deal with ToUnicode map, 0 for auto, 1 for forced, -1 for disabled")
|
.add("tounicode", ¶m.tounicode, 0, "Specify how to deal with ToUnicode map, 0 for auto, 1 for forced, -1 for disabled")
|
||||||
.add("space-as-offset", ¶m.space_as_offset, 0, "treat space characters as offsets")
|
.add("space-as-offset", ¶m.space_as_offset, 0, "treat space characters as offsets")
|
||||||
|
.add("stretch_narrow_glyph", ¶m.stretch_narrow_glyph, 0, "stretch narrow glyphs instead of padding space")
|
||||||
|
.add("squeeze_wide_glyph", ¶m.squeeze_wide_glyph, 0, "squeeze wide glyphs instead of truncating")
|
||||||
|
|
||||||
.add("css-filename", ¶m.css_filename, "", "Specify the file name of the generated css file")
|
.add("css-filename", ¶m.css_filename, "", "Specify the file name of the generated css file")
|
||||||
.add("font-suffix", ¶m.font_suffix, ".ttf", "suffix for extracted font files")
|
.add("font-suffix", ¶m.font_suffix, ".ttf", "suffix for extracted font files")
|
||||||
|
Loading…
Reference in New Issue
Block a user