我有PDF模板文件与字段。客户创建的模板。它有一些文本、字段标签和字段本身。文本和标签使用嵌入在模板中的某种字体。
当我尝试用西里尔文值填充字段时会出现问题-结果文档中没有西里尔文符号。
FontFactory.RegisterDirectory(Environment.GetFolderPath(Environment.SpecialFolder.Fonts));
using (var dest = File.Create(@"result.pdf"))
{
using (var stamper = new PdfStamper(reader, dest))
{
var fields = stamper.AcroFields;
fields.SetField("ClientName", "Имя клиента");
stamper.FormFlattening = true;
stamper.Close();
}
}
所以问题是:1。如果我可以嵌入字体在Adobe Acrobat只用于字段,那么如何做?2.如果我可以用iTextSharp为现有字段定义字体族,那么该怎么做?
我写了适合我的解决方案。
因此完整的代码如下所示:
static IEnumerable<PdfFontInfo> ReadDocumentFonts(PdfReader reader)
{
if (reader.AcroForm == null)
yield break;
var dr = reader.AcroForm.GetAsDict(PdfName.DR);
// Read font information from resources
var fontDict = dr.GetAsDict(PdfName.FONT);
foreach (var fontKey in fontDict.Keys)
{
var data = fontDict.GetAsDict(fontKey);
// Read font descriptor if it possible
var descriptor = data.GetAsDict(PdfName.FONTDESCRIPTOR);
if (descriptor != null)
{
// Read font name and family
var family = descriptor.GetAsString(PdfName.FONTFAMILY);
yield return new PdfFontInfo(fontKey, family.ToUnicodeString());
}
}
}
static IReadOnlyList<BaseFont> CreateSubstitutionFontsForFields(PdfReader reader)
{
if (reader.AcroForm.Fields == null)
return new List<BaseFont>(0);
var documentFontMap = ReadDocumentFonts(reader).ToDictionary(f => f.Name, StringComparer.InvariantCultureIgnoreCase);
var substFonts = new Dictionary<string, BaseFont>();
var fallbackRequired = false;
// Read font information of each field
foreach (var field in reader.AcroForm.Fields)
{
var fieldFontDa = field.Info.GetAsString(PdfName.DA);
if (fieldFontDa == null)
continue;
var parts = AcroFields.SplitDAelements(fieldFontDa.ToUnicodeString());
if (parts.Length == 0)
continue;
var fontName = (string) parts[0];
PdfFontInfo inf;
if (documentFontMap.TryGetValue(fontName, out inf))
{
if (!substFonts.ContainsKey(fontName))
{
var font = FontFactory.GetFont(fontName, BaseFont.IDENTITY_H, true).BaseFont;
substFonts.Add(fontName, font);
}
}
else
fallbackRequired = true;
}
var allFonts = new List<BaseFont>(substFonts.Values);
if (fallbackRequired)
allFonts.Add(FALLBACK_FONT);
return allFonts;
}
如果您能发现任何错误,欢迎您评论。
我正在使用pdfbox 2.0.5使用以下代码填写PDF文档的表单字段: 我得到这个错误:U+0434('AFII10069')在此字体Times-Roman(泛型:TimesNewRomanPSMT)编码:StandardEncoding with Difference中不可用 我必须在文本字段中指定哪种字体来处理西里尔(或亚洲)字符? 谢谢,罗波
我试图用fdf或xfdf中的汉字填充pdf字段。 到目前为止,我已经尝试了pdftk、mcpdf、pdfbox和fpdm。 它们都可以将字符输入字段,但不会显示。当我点击要编辑的字段时,字符按预期显示,但当我再次点击字段外时,字符消失。如果我输入的是英语,它们就会显示错误,例如“hello”变成“IFMMP”。 这一切都让我怀疑这是字体/字符映射的问题,我尝试过将完整的字体嵌入到pdf中,但没有任
字体Adobe希伯来文 文本方向RTL 我试过平场和不平场。 当字段没有平坦化时,在使用Acrobat Reader打开生成的PDF后,我看到了我的字段,但它是空的。只有在我点击该字段后,该字段的内容才会正确出现。当我在Chrome上查看PDF时,字段不会出现(或者它可能在那里,但里面没有文本)。 编辑:测试PDF可从这里下载
我在SQL Server 2012中有两个表 表1 表2 每个用户可以拥有1到8个权限。 我需要创建一个视图,该视图将为我提供具有8个权限条目的UserID,其中任何未使用的条目都包含null值,即条目的顺序无关紧要。 这让我很困惑,我甚至不知道从哪里开始?
问题内容: 是否可以用不是_id …的参考模型字段填充猫鼬模型,例如用户名。 所以像 问题答案: 您可以使用API。API是更加灵活,你不必指定,并在纲要。 http://mongoosejs.com/docs/api.html#document_Document-populate http://mongoosejs.com/docs/api.html#model_Model.populate 您