सी # के लिए समाधान आप प्रश्न के संपादन-भाग में पा सकते हैं। ब्रूनो Lowagieसी # - itextSharp प्रत्येक पृष्ठ पर उप-योग
को विशेष धन्यवाद मैं सी # में iTextSharp के माध्यम से एक चालान बनाने के लिए कोशिश कर रहा हूँ। यह बहुत अच्छी तरह से काम करता है लेकिन मुझे हर पृष्ठ पर उप-योग मुद्रित करने का प्रयास करते समय समस्याएं मिलती हैं I
यहाँ उत्पादों के लिए तालिका बनाने के लिए उपयोग कर कोड im का एक हिस्सा है:
PdfPTable table = new PdfPTable(5);
table.WidthPercentage = 100;
float[] widths = new float[] { 10f, 30f, 120f, 30f, 30f };
table.SetWidths(widths);
table.SkipLastFooter = true;
table.SpacingAfter = 10;
//Cells to Write Header & Footer
AddCell(table, "Pos.", PdfPCell.ALIGN_RIGHT, BORDER_LTB, 0);
AddCell(table, "Menge", PdfPCell.ALIGN_RIGHT, BORDER_TB);
AddCell(table, "Text", PdfPCell.ALIGN_LEFT, BORDER_TB);
AddCell(table, "Einzelpreis ", PdfPCell.ALIGN_RIGHT, BORDER_TB);
AddCell(table, "Summe", PdfPCell.ALIGN_RIGHT, BORDER_RTB);
AddCell(table, "SUBTOTAL", PdfPCell.ALIGN_LEFT, BORDER_LTB, 7, 4);
AddCell(table, "", PdfPCell.ALIGN_LEFT, BORDER_RTB);
table.HeaderRows = 2;
table.FooterRows = 1;
//Cells with positions of invoice
for (int i = 0; i < beleg.Einzel.Count; i++)
{
AddCell(table, beleg.Einzel[i].be_lfd_nr.ToString(), PdfPCell.ALIGN_LEFT, BORDER_LTB);
AddCell(table, beleg.Einzel[i].be_art_menge.ToString("N", _gbVars.NFI3D), PdfPCell.ALIGN_RIGHT, BORDER_TB);
AddCell(table, (beleg.Einzel[i].be_art_bez.ToString() + "\n" + beleg.Einzel[i].be_pos_text.ToString()).Trim(), PdfPCell.ALIGN_LEFT, BORDER_TB);
AddCell(table, beleg.Einzel[i].be_summe_preis.ToString("N", _gbVars.NFI2D), PdfPCell.ALIGN_RIGHT, BORDER_TB);
AddCell(table, beleg.Einzel[i].be_summe_netto.ToString("N", _gbVars.NFI2D), PdfPCell.ALIGN_RIGHT, BORDER_RTB);
}
table.SplitLate = false;
document.Add(table);
Border_RTB और इतने पर मेरी बॉर्डर-शैलियाँ के लिए स्थिरांक हैं।
इस कोड उत्पन्न करता है एक मेज डायन इस तरह दिखता है:
+------------------------------------------+
| Pos | Menge | Text | Einzelpreis | Summe |
+------------------------------------------+
| 1 | 2 | Text | 10.00 | 20.00 |
+------------------------------------------+
| 2 | 1 | Text | 10.00 | 10.00 |
+------------------------------------------+
| 3 | 4 | Text | 10.00 | 40.00 |
+------------------------------------------+
| 4 | 2 | Text | 10.00 | 20.00 |
+------------------------------------------+
|SUBTOTAL | |
+------------------------------------------+
टेबल अगले पृष्ठ पर प्रवाह कर सकते हैं एक मैं पाद लेख पर हर पृष्ठ के उप-योग लिखने के लिए whant। घटना "ऑनएंडपेज" मेरी मदद नहीं करती है क्योंकि यह घटना पृष्ठ को तोड़ने वाली तालिका में "जानती" नहीं है।
क्या कोई मुझे बता सकता है कि मुझे प्रत्येक पृष्ठ पर उप-योग कैसे मिलता है? क्या कोई समाधान है कि मैं किसी पृष्ठ पर कुछ पीडीएफ-फाइल पर प्रिंट कैसे कर सकता हूं?
क्षमा करें अगर मेरा विवरण अच्छा नहीं है। मेरे अंग्रेजी के साथ समस्याएं हैं। : -/
संपादित करें:
यहाँ समाधान है। ब्रूनो के लिए विशेष धन्यवाद। उसने मुझे रास्ता दिखाया है। मेरे संस्करण में, सबटॉटल प्रत्येक पृष्ठ पर रीसेट नहीं होता है। मुझे लगता है कि यह समस्या के मेरे विवरण में एक गलतफहमी थी।
नई clases:
public class Totals
{
public double subtotal = 0;
public double total = 0;
}
public class SubTotalEvent : IPdfPCellEvent
{
Double price;
Totals totals;
bool printTotals = false; //If we just whant to print out the Subtotal, this will be true.
bool CellWrittenOnce = false; //Bool to SUM price just once (if row flows to a second page)
public SubTotalEvent(Totals totals, double price) {
printTotals = false;
this.totals = totals;
this.price = price;
}
public SubTotalEvent(Totals totals) {
this.totals = totals;
printTotals = true;
}
public void CellLayout(PdfPCell cell, Rectangle position, PdfContentByte[] canvases) {
if (printTotals)
{
PdfContentByte canvas = canvases[PdfPTable.TEXTCANVAS];
ColumnText.ShowTextAligned(canvas, Element.ALIGN_LEFT, new Phrase(totals.subtotal.ToString()), position.GetLeft(0) + 2, position.GetBottom(0) + 2, 0);
return;
}
if (!CellWrittenOnce) {
totals.subtotal += price;
totals.total += price;
}
CellWrittenOnce = true;
}
}
कोड तालिका बनाने के लिए:
PdfPTable table = new PdfPTable(5);
table.WidthPercentage = 100;
float[] widths = new float[] { 10f, 30f, 120f, 30f, 30f };
table.SetWidths(widths);
table.SkipLastFooter = true;
table.SpacingAfter = 10;
AddCell(new PdfPCell(new Phrase("item")));
AddCell(new PdfPCell(new Phrase("amount")));
AddCell(new PdfPCell(new Phrase("text")));
AddCell(new PdfPCell(new Phrase("price")));
AddCell(new PdfPCell(new Phrase("sum")));
Totals totals = new Totals();
PdfPCell cel = new PdfPCell(new Phrase("Subtotal"));
cel.Colspan = 4;
table.AddCell(cel);
cel = new PdfPCell();
cel.CellEvent = new SubTotalEvent(totals);
table.AddCell(cel);
table.HeaderRows = 2;
table.FooterRows = 1;
for (int i = 0; i < beleg.Einzel.Count; i++)
{
AddCell(new PdfPCell(new Phrase(i.toString())));
AddCell(new PdfPCell(new Phrase("2")));
AddCell(new PdfPCell(new Phrase("ItemText")));
AddCell(new PdfPCell(new Phrase("10.00")));
cell = new PdfPCell(new Phrase("20.00"));
cell.CellEvent = new SubTotalEvent(totals, 20.00);
table.AddCell(cell);
}
table.SplitLate = false;
document.Add(table);
आपको 'पीडीएफपीएजहेल्टरहेल्पर' कक्षा को लागू करने की आवश्यकता है। जब भी पृष्ठ बनाया जाता है तो आपका कार्यान्वयन निष्पादित होगा। इसे लागू करने के तरीके पर इस ट्यूटोरियल को देखें http://www.mazsoft.com/blog/post/2008/04/30/Code- नमूना-for-using-iTextSharp-PDF-library – Darren
मैं 'PdfPageEventHelper' कक्षा को लागू करता हूं। लेकिन मैं सार्वजनिक ओवरराइड शून्य ऑनएंडपेज (पीडीएफवाइटर लेखक, दस्तावेज़ दस्तावेज़) में कहां से पता लगा सकता हूं, जहां मैं तालिका में हूं? तालिका इस बिंदु पर पहले से ही लिखी गई है। इस कार्यक्रम को 'दस्तावेज़' में जोड़ा जाता है। जोड़ें (तालिका); ' –
कुछ समस्याएं आपकी समस्या के विवरण से तुरंत मुझे स्पष्ट नहीं हैं, इसलिए मुझे यकीन नहीं है कि मेरे पास अभी तक कोई जवाब है या नहीं। क्या निम्नलिखित धारणाएं सही हैं: 1. आपके चालान दस्तावेज़ में एक एकल, बड़ी तालिका होती है जो संभवतः एकाधिक पृष्ठों को फैल सकती है। 2. आपका चालान एक फॉर्म नहीं है, दस्तावेज़ बनाने के दौरान आपके पास सभी जानकारी तक पहुंच है। 3. आप वर्तमान पृष्ठ पर सभी उत्पादों के उप-योग को मुद्रित करना चाहते हैं + उस पृष्ठ के शीर्षलेख/पाद लेख में वर्तमान पृष्ठ तक उप-योगों का योग। –