我正在使用iTextSharp v5.5.11并且我想修改以下代码以显示生成的PDF中的已选中复选框(可能不一定需要复选框控件;等效的复选框图标或类似的复选框)。到目前为止我的代码生成了一个复选框,在PDF生成中没有检查。正如所暗示的,可能有更好的方法来做到这一点。这是我到目前为止的代码。请帮忙:
using System;
using System.Collections.Generic;
using System.IO;
using Carnotaurus.UtilityPack.Extensions.PrimitiveExtensions;
using iTextSharp.text;
using iTextSharp.text.pdf;
namespace Carno.GhostPubs.WindowsFormsApp
{
public static class PdfITextSharpExtensions
{
public static void CreatePdf(this Document doc, IReadOnlyList<string> lines, int pageSize,
string outputFullFilePath)
{
try
{
var writer = PdfWriter.GetInstance(doc,
new FileStream(outputFullFilePath, FileMode.Create, FileAccess.Write, FileShare.None));
doc.Open();
for (var index = 0; index <= lines.Count - 1; index++)
{
var mod = index % pageSize;
if (mod == 0 && index > 0)
{
doc.NewPage();
}
var field = lines[index];
doc.Add(new Paragraph(field));
var cb = writer.DirectContent;
var onOff = new PdfAppearance[2];
onOff[0] = cb.CreateAppearance(20, 20);
onOff[0].Rectangle(1, 1, 18, 18);
onOff[0].Stroke();
onOff[1] = cb.CreateAppearance(20, 20);
onOff[1].SetRGBColorFill(255, 128, 128);
onOff[1].Rectangle(1, 1, 18, 18);
onOff[1].FillStroke();
onOff[1].MoveTo(1, 1);
onOff[1].LineTo(19, 19);
onOff[1].MoveTo(1, 19);
onOff[1].LineTo(19, 1);
onOff[1].Stroke();
var rect = new Rectangle(180, 806 - index * 40, 200, 788 - index * 40);
var checkFieldName = field.RemoveSpaces();
var radioCheckField = new RadioCheckField(writer, rect, checkFieldName, "On");
var checkField = radioCheckField.CheckField;
checkField.SetAppearance(PdfAnnotation.APPEARANCE_NORMAL, "On", onOff[1]);
checkField.SetAppearance(PdfAnnotation.APPEARANCE_NORMAL, "Off", onOff[0]);
// checkField.ValueAsName = "On";
writer.AddAnnotation(checkField);
ColumnText.ShowTextAligned(cb, Element.ALIGN_LEFT,
new Phrase(field, new Font(Font.FontFamily.HELVETICA, 18)), 210, 790 - index * 40, 0);
cb = writer.DirectContent;
}
}
catch (Exception ex)
{
}
finally
{
doc.Close();
}
}
}
}
答案 0 :(得分:0)
根据评论,我们确定您不需要交互式复选框(用户可以通过单击Adobe Reader中的复选框进行更改)。你不想要PDF表格;你只需要一个复选框字符(选中或取消选中)。
不幸的是,我发现您使用Helvetica作为字体,而Helvetica不包含复选框或复选标记字符。你必须找到另一种字体。
在Stack Overflow之前,您的问题已经多次得到解答:
使用图像的好处是,您确实希望按照您想要的方式对复选框进行整形。使用字体时,您必须对字体提供的任何字形感到满意。这可能是一个空的复选框(如TickboxCharacter)示例中的情况;或者没有方框的复选标记,如How to display ✔ in PDF using iTextSharp?
中所述您可能还想阅读iText : Unable to print mathematical characters like ∈, ∩, ∑, ∫, ∆ √, ∠,因为复选框(已选中或未选中)只不过是一个特殊字符,例如∈,∩,Σ,∫,Δ√,∠,......