0

我对 C# 相当陌生,但我正在使用它将一些 WMF/PMF 格式的旧文件转换为 PDF。我有脚本工作,但原始文档中的一些字体没有通过。例如,其中一些旧文档是工资单检查运行,并且检查使用特殊的 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;
}
4

0 回答 0