我对 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;
}