2011-06-13 11 views
8

iTextSharp का उपयोग कर किसी पीडीएफ दस्तावेज़ में किसी पृष्ठ पर सीमा जोड़ना संभव है? मैं स्क्रैच से पीडीएफ फ़ाइल उत्पन्न कर रहा हूं, इसलिए मुझे पहले से मौजूद दस्तावेज़ में सीमा जोड़ने की जरूरत नहीं है।iTextSharp का उपयोग कर किसी पृष्ठ पर सीमा कैसे जोड़ूं?

Document pdfDocument = new Document(PageSize.LETTER); 
Font headerFont = new Font(baseFont, 13); 
Font font = new Font(baseFont, 10); 
PdfWriter writer = PdfWriter.GetInstance(pdfDocument, 
             new FileStream(fileName, FileMode.Create)); 
pdfDocument.Open(); 

//I add IElements here. 

pdfDocument.Close(); 
+0

को लाल बॉर्डर जोड़ सकता हूँ करने में सक्षम था। क्या आप यह पूछने का मतलब था कि यह कैसे करें? – Oded

+0

बेशक [चार्स]। –

+0

मुझे यकीन नहीं है कि क्या आप सीधे दस्तावेज़ में सीमा जोड़ सकते हैं। हालांकि आप एक ही परिणाम प्राप्त करने के लिए एक टेबल या 'पीडीएफटेबल' का उपयोग करने में सक्षम होना चाहिए। –

उत्तर

7

यहां सी # में एक उत्तर (मार्क स्टोरर से अनुकूलित) है। यह उदाहरण सीमा को आकर्षित करने के लिए पृष्ठ के मार्जिन का उपयोग करता है, जिसे मैं कभी-कभी पेज लेआउट को डिबग करने के लिए उपयोगी लगता हूं।

public override void OnEndPage(PdfWriter writer, Document document) 
{ 
    base.OnEndPage(writer, document); 

    var content = writer.DirectContent; 
    var pageBorderRect = new Rectangle(document.PageSize); 

    pageBorderRect.Left += document.LeftMargin; 
    pageBorderRect.Right -= document.RightMargin; 
    pageBorderRect.Top -= document.TopMargin; 
    pageBorderRect.Bottom += document.BottomMargin; 

    content.SetColorStroke(BaseColor.RED); 
    content.Rectangle(pageBorderRect.Left, pageBorderRect.Bottom, pageBorderRect.Width, pageBorderRect.Height); 
    content.Stroke(); 
} 
1

मैं सुझाव है कि आप वर्तमान पृष्ठ की प्रत्यक्ष सामग्री प्राप्त के रूप में आप यह करते हैं, और PdfContentByte के साथ अपने सीमा:

यहाँ उदाहरण के लिए मेरी कोड है।

शायद आप PdfPageEventHelper -डेड क्लास चाहते हैं जो ऑनपेज ईवेंट में इसकी ड्राइंग करता है।

आप वर्तमान पृष्ठ आकार को document पैरामीटर के getPageSize() के माध्यम से पूछ सकते हैं, और अपनी सीमाओं को आकर्षित करने के लिए उसमें (थोड़ा tweaked) का उपयोग कर सकते हैं। यह देखते हुए कि आप iTextSharp का उपयोग कर रहे हैं, तो संभवतः आपके पास "get" विधि के बजाय PageSize संपत्ति है।

कुछ की तरह:

public void onEndPage(PdfWriter writer, Document doc) { 
    PdfContentByte content = writer.getDirectContent(); 
    Rectangle pageRect = doc.getPageSize(); 

    pageRect.setLeft(pageRect.getLeft() + 10); 
    pageRect.setRight(pageRect.getRight() - 10); 
    pageRect.setTop(pageRect.getTop() - 10); 
    pageRect.setBottom(pageRect.getBottom() + 10); 

    content.setColorStroke(Color.red); 
    content.rectangle(pageRect.getLeft(), pageRect.getBottom(), pageRect.getWidth(), pageRect.getHeight()); 
    content.stroke(); 
} 

ध्यान दें कि आप वास्तव में पारित कर सकते हैं content.rectangle() में एक Rectangle है, उस क्षण कि आयत की सीमा & भरने सेटिंग्स उपयोग किया जाता है। मुझे लगा कि थोड़ा उलझन में हो सकता है, इसलिए इस तरह से कोड नहीं किया।

0

मैं मुझे यकीन है कि आप कर सकते हैं कर रहा हूँ एक मौजूदा पीडीएफ

public void createPdf(PdfReader pdfReader) 
     throws DocumentException, IOException { 
    String userDir = System.getProperty("user.dir"); 
    System.out.println("userDir = " + userDir); 
    RESULT = userDir + "/work/"+"sample.pdf"; 
    // step 1 
    Document document = new Document(); 
    // step 2 
    PdfCopy copy = new PdfCopy(document, new FileOutputStream(RESULT)); 

    // step 3 
    document.open(); 
    int noOfPages = pdfReader.getNumberOfPages(); 
    for (int page = 0; page < noOfPages;) { 
     if(page==0) { 
      PdfImportedPage immportedPage = copy.getImportedPage(pdfReader, ++page); 
      PageStamp stamp = copy.createPageStamp(immportedPage); 
      PdfContentByte canvas = stamp.getOverContent(); 
      drawPageBorder(canvas, PageSize.A4.getWidth(), PageSize.A4.getHeight()); 
      stamp.alterContents(); 
      copy.addPage(immportedPage); 
     } else { 
      copy.addPage(copy.getImportedPage(pdfReader, ++page)); 
     } 
    } 

    copy.freeReader(pdfReader); 
    pdfReader.close(); 
    // step 4 
    document.close(); 
} 

public void drawPageBorder(PdfContentByte content, float width, float height) { 
    content.saveState(); 
    PdfGState state = new PdfGState(); 
    state.setFillOpacity(0.0f); 
    content.setGState(state); 
    content.setColorStroke(BaseColor.RED); 
    content.setLineWidth(6); 
    content.rectangle(5, 5, width, height); 
    content.fillStroke(); 
    content.restoreState(); 
} 
संबंधित मुद्दे