c#iTextSharp将WMF转换为PDF嵌入字体

时间:2018-08-07 19:31:53

标签: c# pdf fonts itext wmf

我对C#相当陌生,但是正在使用它将WMF / PMF格式的一些较旧的文件转换为PDF。我的脚本可以工作,但是原始文档中的 some 字体没有通过。例如,其中一些旧文档是薪资支票运行,而支票使用特殊的MICR字体(在其中显示帐户/路由编号)。此MICR行经过转换后,看起来像是随机的基本字体。

我只是使用iTextSharp将WMF转换为图像,然后将该图像作为页面添加到PDF中。

我已经研究了嵌入字体,但是我的问题是我可能不知道原始字体名称是什么。这些文件可以是许多东西,并且它们可能很旧。有没有办法包含一个字体库,该字体库会扩展iTextSharp的基本字体,以便在转换过程中更容易识别它们?

这是执行转换的功能。所有WMF文件(每次检查一个)都放在一个目录中,该函数将它们全部加载到一个PDF中:

static bool BuildPDF(string pDecodeDir)
{
    Document pdfDoc = new Document();
    DirectoryInfo decodeDir = new DirectoryInfo(pDecodeDir);
    int vCount = 0;

    foreach (var file in decodeDir.GetFiles("*.WMF"))
    {
        try
        {
            iTextSharp.text.Image img1 = ImgWMF.GetInstance(file.FullName);
            if (vCount == 0)
            {
                // in order to inherit the document size properly, we need to load the first image before creating the PDF object
                pdfDoc = new Document(img1);
                PdfWriter.GetInstance(pdfDoc, new FileStream(targetPath, FileMode.Create));
                pdfDoc.Open();
            }
            else
            {
                pdfDoc.NewPage();
            }

            Console.WriteLine("Adding page {0}: {1}", vCount.ToString(), file.Name);

            img1.SetAbsolutePosition(0, 0);
            pdfDoc.Add(img1);

            vCount++;
        }
        catch (System.Exception docerr)
        {
            Console.WriteLine("Doc Error: {0}", docerr.Message);
            return false;
        }
    }

    Console.WriteLine("{0} created!", targetPath);
    pdfDoc.Close();

    return true;
}

0 个答案:

没有答案