Я создаю PDF, используя iTextSharp в целях печатания чеков. Моя проблема - то, что я не могу заставить имя/адрес печатать по проверке, где небольшое окно находится на конверте для проверки. Интервал между строками адреса слишком большой. Я устанавливаю высоту линии в теге шрифта в документе HTML, но это не переносится.
Вот часть адреса, определенно:
conn.Open();
using (SqlDataReader itemReader = strSQL.ExecuteReader())
{
checksHolder.InnerHtml += "<table cellSpacing=\"0\" cellPadding=\"0\" border=\"0\" width=\"100%\">\n";
while (itemReader.Read())
{
if (i % 3 == 0 && i != 0)
{
checksHolder.InnerHtml += "</table>\n";
checksHolder.InnerHtml += "<!-- pagebreak -->\n";
checksHolder.InnerHtml += "<table cellSpacing=\"0\" cellPadding=\"0\" border=\"0\" width=\"100%\">\n";
f = 0;
}
if (i > 0 && i % 3 != 0)
{
checksHolder.InnerHtml += "<tr><td colspan=\"3\">
";
checksHolder.InnerHtml += "</td></tr>\n";
}
String[] tmpArray = getConsignorInfo(itemReader["check_cs_id"].ToString());
int CheckNum = Int32.Parse(itemReader["check_number"].ToString());
String CheckAmount = itemReader["check_amount"].ToString();
String PayableTo = tmpArray[0];
String Memo = itemReader["check_memo"].ToString();
String name = tmpArray[0];
String address = tmpArray[1];
String city = tmpArray[2];
String state = tmpArray[3];
String zip = tmpArray[4];
Char NBSP = '\u00A0';
checksHolder.InnerHtml += "<tr><td colspan=\"3\">
</td></tr>\n";
checksHolder.InnerHtml += "<tr>\n";
//checksHolder.InnerHtml += "<td width=\"5\"></td>\n";
checksHolder.InnerHtml += "<td colspan=\"2\">\n";
checksHolder.InnerHtml += "\n";
checksHolder.InnerHtml += " \n";
checksHolder.InnerHtml += PayableTo + "\n";
checksHolder.InnerHtml += "</td>\n";
checksHolder.InnerHtml += "<td align=\"right\">\n";
checksHolder.InnerHtml += "" + string.Format("{0:c}", Double.Parse(CheckAmount.ToString())).Replace("$", "") + "\n";
checksHolder.InnerHtml += "</td>\n";
checksHolder.InnerHtml += "</tr>\n";
checksHolder.InnerHtml += "<tr>\n";
checksHolder.InnerHtml += "<td colspan=\"3\">\n";
checksHolder.InnerHtml += " \n";
checksHolder.InnerHtml += "</td>\n";
checksHolder.InnerHtml += "</tr>\n";
checksHolder.InnerHtml += "<tr>\n";
checksHolder.InnerHtml += "<td colspan=\"3\">\n";
checksHolder.InnerHtml += "";
if (wordify(decimal.Parse(CheckAmount.ToString())).Length >= 90)
{
checksHolder.InnerHtml += wordify(decimal.Parse(CheckAmount.ToString()));
}
else
{
string exes = " ";
for (int x = wordify(decimal.Parse(CheckAmount.ToString())).Length; x <= 90; x++)
{
exes += "x";
}
checksHolder.InnerHtml += wordify(decimal.Parse(CheckAmount.ToString())) + exes;
}
checksHolder.InnerHtml += "\n";
checksHolder.InnerHtml += "</td>\n";
checksHolder.InnerHtml += "</tr>\n";
checksHolder.InnerHtml += "<tr>\n";
checksHolder.InnerHtml += "<td colspan=\"2\">\n";
checksHolder.InnerHtml += "<table cellSpacing=\"0\" cellPadding=\"0\" border=\"0\" width=\"100%\">\n";
checksHolder.InnerHtml += "<tr>\n";
checksHolder.InnerHtml += "<td colspan=\"2\">
\n";
checksHolder.InnerHtml += "" + name + "
\n";
checksHolder.InnerHtml += address + "
\n";
checksHolder.InnerHtml += city + ",\n";
checksHolder.InnerHtml += state + " \n";
checksHolder.InnerHtml += zip + "\n";
checksHolder.InnerHtml += "</td>\n";
checksHolder.InnerHtml += "</tr>\n";
checksHolder.InnerHtml += "<tr>\n";
checksHolder.InnerHtml += "<td colspan=\"3\">\n";
checksHolder.InnerHtml += "
</td>\n";
checksHolder.InnerHtml += "</tr>\n";
checksHolder.InnerHtml += "<tr>\n";
checksHolder.InnerHtml += "<td width=\"10\"></td>\n";
checksHolder.InnerHtml += "<td>\n";
checksHolder.InnerHtml += "" + Memo.Substring(0, 50) + "...\n";
checksHolder.InnerHtml += "</td>\n";
checksHolder.InnerHtml += "</tr>\n";
checksHolder.InnerHtml += "</table>\n";
checksHolder.InnerHtml += "</td>\n";
checksHolder.InnerHtml += "<td valign=\"bottom\" width=\"40\">\n";
checksHolder.InnerHtml += "
\n";
checksHolder.InnerHtml += "</td>\n";
checksHolder.InnerHtml += "</tr>\n";
i++;
f++;
}
checksHolder.InnerHtml += "</table>\n";
itemReader.Close();
}
public void CreatePDFDocument(string strHtml)
{
string strFileName = HttpContext.Current.Server.MapPath("printCheck.pdf");
//step 1: creation of a document-object
iTextSharp.text.Rectangle rec = new iTextSharp.text.Rectangle(612, 792);
Document document = new Document(rec);
document.SetMargins(45f, 30f, 55f, 30f);
//step 2:
//we create a writer that listens to the document
var pdfWriter = PdfWriter.GetInstance(document, new FileStream(strFileName, FileMode.Create));
pdfWriter.InitialLeading = 12.5f;
string[] stringSeparators = new string[] { "<!-- pagebreak -->" };
//Response.Write(strHtml);
string[] newString = strHtml.Split(stringSeparators, StringSplitOptions.None);
//HTMLWorker obj = new HTMLWorker(document);
document.Open();
var xmlWorkerHelper = XMLWorkerHelper.GetInstance();
var cssResolver = new StyleAttrCSSResolver();
var xmlWorkerFontProvider = new XMLWorkerFontProvider();
var cssAppliers = new CssAppliersImpl(xmlWorkerFontProvider);
var htmlContext = new HtmlPipelineContext(cssAppliers);
htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());
PdfWriterPipeline pdfWriterPipeline = new PdfWriterPipeline(document, pdfWriter);
HtmlPipeline htmlPipeline = new HtmlPipeline(htmlContext, pdfWriterPipeline);
CssResolverPipeline cssResolverPipeline = new CssResolverPipeline(cssResolver, htmlPipeline);
XMLWorker xmlWorker = new XMLWorker(cssResolverPipeline, true);
XMLParser xmlParser = new XMLParser(xmlWorker);
int i = 0;
foreach (String currentString in newString) {
if (i > 0)
{
document.NewPage();
}
StringReader sr = new StringReader(currentString);
xmlParser.Parse(sr);
i++;
}
document.Close();
ShowPdf(strFileName);
}
У меня только есть половина дюйма, чтобы поставить имя в. Я попытался определить высоту линии с оба 8px
и просто 8
на всякий случай. Ничто не работало. Кто-либо знает, как я должен отформатировать HTML, чтобы перенести высоту линии? Заранее спасибо.