C#中如何读取xml,并将textbox中输入的值显示到pdf中对应的位置
通过读取xml文件的fieldname属性的值进行pdf位置的定位
将textbox上输入值显示到pdf上对应的位置 或者 创建一个datatable表格 将xml中获取的fieldname属性的值设为列,随意添加两行信息,将表中的信息显示到pdf中对应的位置,几行信息生成几张pdf
// An highlighted block
private void buttonMakePDFSingle_Click(object sender, EventArgs e)
{
//デフォルトはマイドキュメントパス
string createPdfPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
//指定したローカルフォルダにPDFを作成する。
FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
folderBrowserDialog.ShowNewFolderButton = true;
folderBrowserDialog.Description = "PDF帳票作成フォルダを選択してください。";
folderBrowserDialog.SelectedPath = createPdfPath;
if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
{
//获取xml的路径
string pdfXmlPath = Path.Combine(System.Windows.Forms.Application.StartupPath, "記載事項建築PdfWriteInfo.xml");
//获取目标pdf的路径
string pdfTemplatePath = Path.Combine(System.Windows.Forms.Application.StartupPath, "記載事項建築PdfTemplate.PDF");
string pdfXmlPath1 = Path.Combine(System.Windows.Forms.Application.StartupPath, "記載事項工作PdfWriteInfo.xml");
string pdfTemplatePath1 = Path.Combine(System.Windows.Forms.Application.StartupPath, "記載事項工作PdfTemplate.PDF");
string pdfXmlPath2 = Path.Combine(System.Windows.Forms.Application.StartupPath, "記載事項昇降機PdfWriteInfo.xml");
string pdfTemplatePath2 = Path.Combine(System.Windows.Forms.Application.StartupPath, "記載事項昇降機PdfTemplate.PDF");
iTextPdfWriterClass pdfWriterClass = new iTextPdfWriterClass();
PdfReport pdfReport = pdfWriterClass.GetPdfReportFromXmlPath(pdfXmlPath);
iTextPdfWriterClass pdfWriterClass1 = new iTextPdfWriterClass();
PdfReport pdfReport1 = pdfWriterClass1.GetPdfReportFromXmlPath(pdfXmlPath1);
iTextPdfWriterClass pdfWriterClass2 = new iTextPdfWriterClass();
PdfReport pdfReport2 = pdfWriterClass2.GetPdfReportFromXmlPath(pdfXmlPath2);
//将XML文件加载进来
XmlDocument doc = new XmlDocument();
doc.Load(pdfXmlPath);
XmlDocument doc1 = new XmlDocument();
doc1.Load(pdfXmlPath1);
XmlDocument doc2 = new XmlDocument();
doc2.Load(pdfXmlPath2);
//这一步是获取textbox上输入的值显示到pdf上要用到的
//将textbox上输入的值存到list中
List<string> box = new List<string>();
box.Add(textBoxKenchikuA01.Text.ToString());
box.Add(textBoxKenchikuA02.Text.ToString());
box.Add(textBoxKenchikuA03.Text.ToString());
box.Add(textBoxKenchikuA05.Text.ToString());
box.Add(textBoxKenchikuA06.Text.ToString());
box.Add(textBoxKenchikuA07.Text.ToString());
box.Add(textBoxKenchikuA08.Text.ToString());
box.Add(textBoxKenchikuA09.Text.ToString());
box.Add(textBoxKenchikuA10.Text.ToString());
box.Add(textBoxKenchikuA11.Text.ToString());
box.Add(textBoxKenchikuA12.Text.ToString());
box.Add(textBoxKenchikuA13.Text.ToString());
box.Add(textBoxKenchikuA14.Text.ToString());
List<string> info = new List<string>();
//读取XML文件
XmlNode xn = doc.SelectSingleNode("pdfreport");
XmlNode xn2 = xn.SelectSingleNode("page");
XmlNode xn3 = xn2.SelectSingleNode("pdfcontentstring");
XmlNodeList list = xn3.ChildNodes;
//将xml文件中的filedname值添加到list中
info = getdata(list);
//将textbox上的信息显示到pdf上
if (info.Count > 0)
{
MessageBox.Show(info1[0]);
for (int i = 0; i < box.Count; i++)
{
pdfReport.SetShowTextValue(0, 0, info[i], PdfShowTextAlignedType.FieldName, box[i]);
pdfWriterClass.CreatePdf(pdfReport, pdfTemplatePath, "D:/bb.pdf");
}
}
//这一步是生成表 直接生成pdf
//创建一个名为"Table_New"的空表
DataTable dt = new DataTable("Table_New");
//创建带列名和类型的列
for (int i = 0; i < info.Count; i++)
{
dt.Columns.Add(info[i], typeof(String));
}
//创建数据
DataRow dr = dt.NewRow();
dt.Rows.Add();
dr.ItemArray = new object[] { "dd" ,"ff"};
dr[0] = "成都";
dr[1] = "成都";
dr[2] = "成都";
dr[3] = "成都";
dr[4] = "成都";
dr[5] = "3";
dr[6] = "0";
dr[7] = "333";
dr[8] = "2018年05月20日";
dr[9] = "666";
dr[10] = "2018年05月20日";
dr[11] = "333";
dr[12] = "we";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = "成都1";
dr[1] = "成都1";
dr[2] = "成都1";
dr[3] = "成都1";
dr[4] = "成都1";
dr[5] = "31";
dr[6] = "01";
dr[7] = "3331";
dr[8] = "2018年05月20日";
dr[9] = "666";
dr[10] = "2018年05月20日";
dr[11] = "3313";
dr[12] = "wew";
dt.Rows.Add(dr);
if (dt.Columns.Count > 0)
{
int columnNum = 0;
columnNum = dt.Columns.Count;
for(int j = 0; j < dt.Rows.Count; j++) {
for (int i = 0; i < columnNum; i++)
{
pdfReport.SetShowTextValue(0, 0, dt.Columns[i].ColumnName, PdfShowTextAlignedType.FieldName, dt.Rows[j][i].ToString());
pdfWriterClass.CreatePdf(pdfReport, pdfTemplatePath, "D:/aa"+j+".pdf");
}
}
}
}
else
{
MessageBox.Show("没进来");
return;
}
}
//将节点名相同的子节点的fieldname属性的值存入list中
public List<string> getdata(XmlNodeList list)
{
List<string> info = new List<string>();
foreach (XmlNode item in list)
{
XmlElement xe = (XmlElement)item;
info.Add(xe.GetAttribute("fieldname").ToString());
}
return info;
}
}
}