2012-05-25 12 views
11

में एक नई लाइन जोड़ना मैं अब कुछ समय के लिए इस समस्या को हल करने का प्रयास कर रहा हूं। मेरे पास iTextSharp में कुछ पाठ है, मैं एक नई लाइन डालने की कोशिश कर रहा हूं। मैंने बिना किसी सफलता के \n एस्केप कैरेक्टर, Environment.NewLine, और document.Add(new Phrase(Environment.NewLine)) का उपयोग करने का प्रयास किया है। तो ऐसा करने का कोई तरीका है?iTextSharp

//Open the reader 
PdfReader reader = new PdfReader(oldFile); 
Rectangle size = reader.GetPageSizeWithRotation(1); 
Document document = new Document(size); 
// open the writer 
FileStream fs = new FileStream(newFile, FileMode.Create, FileAccess.Write); 
PdfWriter writer = PdfWriter.GetInstance(document, fs); 
document.Open(); 

//Configure the content 
PdfContentByte cb = writer.DirectContent; 
// select the font properties 
BaseFont bf = BaseFont.CreateFont("c:\\windows\\fonts\\calibri.ttf", BaseFont.CP1252, BaseFont.NOT_EMBEDDED); 
cb.SetColorFill(BaseColor.BLACK); 
cb.SetFontAndSize(bf, 10); 

//Write the text here 
cb.BeginText(); 
text = "F\n";//Doesn’t work 
document.Add(new Phrase(Environment.NewLine));//Doesn’t work 
text += "o\n"; 
text += Environment.NewLine;//Doesn’t work 
text += "o\n"; 
cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, text, 85, 311, 0); 
cb.EndText(); 

//Create the new page 
PdfImportedPage page = writer.GetImportedPage(reader, 1); 
cb.AddTemplate(page, 0, 0); 

//Close all streams 
document.Close(); 
fs.Close(); 
writer.Close(); 
reader.Close(); 

कोई सुझाव: यहाँ मेरी कोड का टुकड़ा मैं में (लाइनों //Doesn't work साथ टिप्पणी की ध्यान दें) यह करने के लिए कोशिश कर रहा हूँ है?

संपादित एक:

फिर भी document.Add(new Paragraph("\n")); साथ काम नहीं कर रहा। क्या मैंने यह गलत किया?

cb.BeginText(); 
text = "F"; 
document.Add(new Paragraph("\n")); 
text += "o"; 
document.Add(new Paragraph("\n")); 
text += "o"; 
cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, text, 85, 311, 0); 
cb.EndText(); 
+0

क्या आप जानते हैं iTextSharp –

उत्तर

22

वहाँ iTextSharp में पाठ के साथ काम करने के लिए दो मुख्य तरीके हैं, या तो Paragraph और Phrase तरह कपोल-कल्पना के माध्यम से या एक PdfContentByte का उपयोग कर मैन्युअल रूप से क्रियान्वित करने आदेशों से है। अबास्ट्रक्शन मार्जिन, लाइन ब्रेक और स्पेसिंग जैसी चीजों को संभालेगा जबकि मैन्युअल रूट आपके ऊपर है। आप वास्तव में उन दोनों को मिश्रण नहीं कर सकते जो आप कर रहे हैं। मैं मैन्युअल मार्ग के बजाय abstractions का उपयोग करने की अत्यधिक अनुशंसा करता हूं जब तक कि आपके पास दानेदार नियंत्रण की विशिष्ट आवश्यकता न हो। नीचे एक नमूना दिखा रहा है दोनों बंद।

लेकिन आपके प्रश्न का उत्तर देने के लिए, कच्चे पीडीएफ कमांड (जो आप उपयोग कर रहे हैं) कुछ x,y पर बाएं से दाएं निर्देशांक पर टेक्स्ट खींचते हैं और वे "रिटर्न" या "लाइन ब्रेक" की अवधारणा का समर्थन नहीं करते हैं। ऐसा करने के लिए आपको वर्तमान पाठ कर्सर को मैन्युअल रूप से एक नई पंक्ति में स्थानांतरित करने की आवश्यकता है। इसके नमूने के लिए नीचे दिए गए कोड को देखें।

 string outputFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "test.pdf"); 
     using (FileStream fs = new FileStream(outputFile, FileMode.Create, FileAccess.Write, FileShare.None)) { 
      using (Document doc = new Document(PageSize.LETTER)) { 
       using (PdfWriter writer = PdfWriter.GetInstance(doc, fs)) { 
        doc.Open(); 

        //This creates two lines of text using the iTextSharp abstractions 
        doc.Add(new Paragraph("This is Paragraph 1")); 
        doc.Add(new Paragraph("This is Paragraph 2")); 

        //This does the same as above but line spacing needs to be calculated manually 
        PdfContentByte cb = writer.DirectContent; 
        cb.SaveState(); 
        cb.SetColorFill(BaseColor.BLACK); 
        cb.SetFontAndSize(BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED), 12f); 
        cb.BeginText(); 
        cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "This is cb1", 20, 311, 0); 
        cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "This is cb2", 20, 291, 0);//Just guessing that line two should be 20px down, will actually depend on the font 
        cb.EndText(); 
        cb.RestoreState(); 
        doc.Close(); 
       } 
      } 
     } 
+0

स्पष्टीकरण के लिए धन्यवाद! –

+0

अच्छा स्पष्टीकरण क्रिस, धन्यवाद। – Kashif

+0

अच्छे उत्तर के लिए धन्यवाद –

3
document.Add(new Paragraph("\n")); 

संपादित करें:

cb.BeginText(); 
string text = ""; 
text = "F\n";   
text += "o\n";    
text += "o"; 
cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, text, 85, 311, 0); 
cb.EndText(); 


//Create the new page 
PdfImportedPage page = writer.GetImportedPage(reader, 1); 
cb.AddTemplate(page, 0, 0); 

Paragraph p = new Paragraph(text); 
document.Add(p); 

//Close all streams 
document.Close(); 
fs.Close(); 
writer.Close(); 
reader.Close(); 
+0

का उपयोग कर पीडीएफ फिर भी एक के बाद एक लाइन दिखा पर radiobutton सूची बनाने का तरीका, देखने संपादित शायद मैं यह गलत कर रहा हूँ ... करते हैं? –

+1

एंड्रयू अब इसे आजमाएं। – Kashif

+0

अभी भी एक ही पंक्ति पर, हालांकि यदि आप क्रिस के उत्तर की जांच करते हैं, तो यह iText सॉफ़्टवेयर की तकनीकी सीमा हो सकती है। मैं आपकी मदद की सराहना करता हूं फिर भी! –

4

document.Add(new Paragraph(" ")); मेरे लिए अच्छा काम करता है। याद रखें, Paragraph कथन स्वचालित रूप से एक लाइन फ़ीड जोड़ता है। आपको बस इतना करना है कि इसे प्रस्तुत करने के लिए कुछ दें। इस मामले में, एक जगह बस ठीक करेगी। इस तरह

+0

यह मेरे लिए भी अच्छा काम करता है। धन्यवाद – SajuPK

9

कोशिश कुछ:

document.Add(new Chunk("\n")); 
+1

यह समझाने के लिए कि आपका समाधान क्या करता है? यह एक बहुत ही कम गुणवत्ता वाली पोस्ट है। – thomaux

+2

@Anzeno यह दिखता है और दस्तावेज के लिए एक नए लाइन चरित्र के साथ एक नया चक() जोड़ता है। व्याख्या करने के लिए बहुत कुछ नहीं है। – JSON

0

मैं सिर्फ इस उपकरण कोशिश कर रहा हूँ और नई लाइन को जोड़ने के लिए मैं सिर्फ जोड़ा '\ r \ n' और यह काम किया है। नीचे इस तरह की तरह।

String content01 = "Nulla condimentum dui lobortis risus viverra, eu pellentesque sem blandit.\r\nUt congue turpis quis sapien mollis, vitae rutrum mi consectetur. Integer maximus nisl sed tellus pharetra pharetra."; 
Phrase contentPhrase = new Phrase(content01); 
Paragraph contentPr = new Paragraph(); 
contentPr.Add(contentPhrase); 

फिर पैराग्राफ सामग्री Ptr को मेरे दस्तावेज़ उदाहरण में जोड़ा गया।

0

मुझे पता है कि यह थोड़ा पुराना है, लेकिन अभी तक एक और तरीका है। यहां इस्तेमाल की गई एक रिपोर्ट से थोड़ा सा है।

  var contents = new Paragraph(); 
      contents.Alignment = Element.ALIGN_CENTER; 

      contents.Add(new Chunk(string.Format("{0} {1}\n", emp.FirstName, emp.LastName), new Font(baseFont, 11f, Font.BOLD))); 
      contents.Add(new Chunk(string.Format("Dept: {0}\n", emp.Departments.Title), new Font(baseFont, 9f))); 
      contents.Add(new Chunk(string.Format("Wk Ending: {0}\n", _date), new Font(baseFont, 9f))); 

जैसा कि आप देख सकते हैं, मैंने जो किया वह हिस्सा बना था। यह आपको लाइन ब्रेक को पूर्ववत करने के लिए "\ n" का उपयोग करने की अनुमति देता है।

0

स्पेसिंग अट्रीबेट्स के अतिरिक्त, आप ब्रेक की ऊंचाई को निश्चित रूप से सेट कर सकते हैं ...

var spacerParagraph = new Paragraph(); 
spacerParagraph.SpacingBefore = 4f; 
spacerParagraph.SpacingAfter = 0f; 
document.Add(spacerParagraph);