2016-05-19 33 views
0

我正在使用itextSharp 4.1.6將AcroFields添加到現有的PDF,並在第二步中填充這些字段的內容。 當我在Adobe Reader中打開這些文檔時,可以看到內容。當我嘗試打印文檔時,所有填充的字段都是空的。Printed Pdf顯示沒有填充AcroForms的內容

這種情況發生在可編輯和壓扁的PDF上。 'GenerateAppearances'設置爲True。 由於當前的許可證概念,我無法升級到其他版本。 我的代碼:

var dlg = new OpenFileDialog 
{ 
    FileName = "", 
    Filter = @"pdf|*.pdf" 
}; 
if (dlg.ShowDialog() != DialogResult.OK) return; 

// first step: create field 
var outputpath1 = Path.Combine(Path.GetTempPath(), string.Format("{0}.pdf", Guid.NewGuid().ToString("N"))); 
var pdfReader1 = new PdfReader(dlg.FileName); 
var output1 = new FileStream(outputpath1, FileMode.Create, FileAccess.Write); 
var stamper1 = new PdfStamper(pdfReader1, output1); 
InsertTextfield(stamper1, 1, 20, 500, 150, 100, "test"); 
stamper1.Close(); 
pdfReader1.Close(); 

// second step: insert some text 
var outputpath2 = Path.Combine(Path.GetTempPath(), string.Format("{0}.pdf", Guid.NewGuid().ToString("N"))); 
var pdfReader2 = new PdfReader(outputpath1); 
var output2 = new FileStream(outputpath2, FileMode.Create, FileAccess.Write); 
var stamper2 = new PdfStamper(pdfReader2, output2); 
stamper2.AcroFields.GenerateAppearances = true; 
var formData = stamper2.AcroFields; 
formData.SetField("test", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. "); 
stamper2.Close(); 
pdfReader2.Close(); 

Process.Start(outputpath2); 

而且InsertTextField

private static void InsertTextfield(PdfStamper stamper, int page, float x, float y, float width, float height, string fieldname) 
{ 
    var field = PdfFormField.CreateTextField(stamper.Writer, true, false, 500); 
    field.SetWidget(new Rectangle(x, y, x + width, y + height), PdfAnnotation.HIGHLIGHT_INVERT); 
    field.SetFieldFlags(PdfAnnotation.FLAGS_PRINT); 
    field.FieldName = fieldname; 
    stamper.AddAnnotation(field, page); 
} 

對於文檔,只需創建一個新的Word文檔,添加一些文本,並保存爲PDF格式。首先選擇這個文件。

那麼,我怎樣才能讓我的提交內容出現在打印中?

編輯:添加的代碼

+2

1.分享你的代碼2.共享您的文件3.嘗試重現該問題在最近的版本,5.5.9。 –

+0

*這種情況發生在可編輯和展平的PDF上* - 如果平展文檔也出現這種情況,除非您使用在打印時關閉的可選內容組,否則非常可疑。 – mkl

+0

感謝您分享您的代碼。現在,用iTextSharp'5.5.9'再試一次。 –

回答

0

你應該通過創建TextField的構造你的文本字段。
對我的作品在iTextSharp的4.1.6

private static void InsertTextfield(PdfStamper stamper, int page, float x, float y, float width, float height, string fieldname) 
{ 
    var field = new TextField(stamper.Writer, new Rectangle(x, y, x + width, y + height), fieldname); 
    field.Options = TextField.MULTILINE; 
    stamper.AddAnnotation(field.GetTextField(), page); 
}