0

我想得到一个带有俄罗斯文本的 pdf。VS2010 使用 libharu

我的源代码文件被编码为 Cyrillic(ISO) 使用此代码设置字体和编码

detail_font = HPDF_GetFont(pdf, "Times-Roman", "ISO8859-5");

完整代码:

int main (int argc, char **argv)
    {
    HPDF_Doc  pdf;
    char fname[256];
    HPDF_Page page;
    HPDF_Font title_font;
    HPDF_Font detail_font;
    HPDF_UINT page_height = 400;
    HPDF_UINT page_width = 400;
    const char *detail_font_name;

    strcpy (fname, "encoding");
    strcat (fname, ".pdf");

    pdf = HPDF_New (error_handler, NULL);
    if (!pdf) {
        printf ("error: cannot create PdfDoc object\n");
        return 1;
    }

    if (setjmp(env)) {
        HPDF_Free (pdf);
        return 1;
    }

    page = HPDF_AddPage (pdf);
    detail_font = HPDF_GetFont(pdf, "Times-Roman", "ISO8859-5");
    HPDF_Page_BeginText (page);

    /* move the position of the text to top of the page. */
    HPDF_Page_MoveTextPos(page, 10, 280);

    HPDF_Page_SetFontAndSize (page, detail_font, 16);
    HPDF_Page_MoveTextPos (page, 0, -20);
    HPDF_Page_ShowText(page,"регистратор температуры ");
    HPDF_Page_SetWidth (page, page_width);
    HPDF_Page_SetHeight (page, page_height);

    /* finish to print text. */
    HPDF_Page_EndText (page);
    HPDF_SaveToFile (pdf, fname);

    /* clean up */
    HPDF_Free (pdf);

    return 0;
}

我收到带有俄文文本的异常 pdf。

在此处输入图像描述

如何解决这个问题?我的源文件编码不可用?我可以通过 utf-8 编码获得带有俄语文本的普通 pdf,但字体嵌入在我的 PDF 中,所以我不能选择 utf-8。

字符可以显示但它们重叠

4

1 回答 1

0

我按 txt 样式阅读了 pdf。检查

/Type /Font
/BaseFont /Times-Bold
/Subtype /Type1
/FirstChar 32
/LastChar 255
/Widths [
250 333 555 500 500 1000 833 278 333 333 500 570 250 333 250 278 
500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 
930 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 
611 778 722 556 667 722 722 1000 722 722 667 333 278 333 581 500 
333 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 
556 556 444 389 333 556 500 722 500 500 444 394 220 394 520 250 
250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 
250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 
250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 
250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 
250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 
250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 
250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 
250 250 250 250 250 250 250 250 250 250 250 250 250 500 250 250 
]

Russina 文本是从 176~256。应该像这个宽度数组一样修改 176~256 宽度

/Widths [
600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
250 600 250 250 250 250 250 250 250 250 250 250 250 250 250 250
600 600 600 600 600 600 900 600 600 600 600 600 700 600 700 600
600 600 600 600 600 600 700 600 800 880 800 800 600 600 600 600
500 500 500 480 540 500 600 500 500 500 500 500 600 600 500 500
500 500 500 500 800 500 580 500 700 800 700 600 600 500 600 500
800 600 600 600 600 600 600 600 600 600 600 600 600 500 600 600
]

当然,我将数组填充 600 并更改我喜欢的俄语字符宽度。

于 2019-12-07T07:26:49.320 回答