以下は、iTextSharpを使用してPDFを作成するために書いている関数です。
機能を説明しましょう...
ここでは、別のテンプレート PDF ファイルから PDF ファイルを作成しています。テンプレート PDF ファイルが のこの関数に送信されbytes[]
、これから作成pdfReader
します...
From pdfReader
I create pdfStamper
(つまり、新しい PDF ファイル) を作成し、そのフィールドに応答値を書き込みます。正常に動作しています...唯一の問題はfint
、値のサイズが非常に大きいことです...
public void GeneratePrintPDFTest(ResponseGroup actual, Pages page, byte[] filebyte, out string pdfname, string localstorage)
{
string rootPath = @"D:/FOP-PDF/";
var pdfReader = new PdfReader(filebyte);
var pdfStamper = new PdfStamper(pdfReader,new FileStream(rootPath.ToString(CultureInfo.InvariantCulture) + page.PageId.ToString(CultureInfo.InvariantCulture)
+ ".pdf",FileMode.Create));
pdfname = rootPath.ToString(CultureInfo.InvariantCulture) + page.PageId.ToString(CultureInfo.InvariantCulture) + ".pdf";
AcroFields pdfFormFields = pdfStamper.AcroFields;
foreach (DictionaryEntry de in pdfReader.AcroFields.Fields)
{
var response = actual.Responses.Where(obj => obj.ITPPageFieldKeyId == Convert.ToInt32(de.Key.ToString())).Select(obj => obj).FirstOrDefault();
if (response != null)
{
if (response.ResponseValues != null && !string.IsNullOrEmpty(response.ResponseValues.ToString())
&& response.ResponseValues.ToString() != "0" && !string.IsNullOrEmpty(response.DataItemID)
&& response.DataItemID != "0")
{
if (response.PrintFormulaResult || response.PageFieldFormulaId == 0)
{
pdfFormFields.SetField(de.Key.ToString(), response.ResponseValues.ToString());
}
}
}
}
pdfStamper.FormFlattening = false;
pdfStamper.Close();
}
次の解決策を試しましたが、役に立ちません....
float fSize = 10;
pdfFormFields.SetFieldProperty(de.Key.ToString(), de.Key.ToString(), fSize, null);
また、テンプレート PDF ファイルから来ているのではないかと疑っていますが、そうであればプログラムで変更するにはどうすればよいでしょうか。
これで私を助けてください...前もって感謝します...