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