मुझे पीडीएफ के एक विशेष निर्देशांक सेट में एकाधिक गोलाकार आयतों को आकर्षित करने की आवश्यकता है। मैंने इस उदाहरण (IMDB one) को प्राप्त करने के लिए Chunks' को डायनैमिक रूप से निर्देशांक (PdfPageEvent और इसकी onGenericTag() विधि का उपयोग करके) मिलता है। यह Chunks' निर्देशांक पूरी तरह से प्राप्त कर रहा है और आयतों को रख रहा है जहां उन्हें होना है। समस्या तब आती है जब मैं उन्हें रंग सेट करता हूं, रंग पूरी तरह से टेक्स्ट छुपाते हैं। मुझे पता है कि ग्रंथ वहां हैं क्योंकि मैं वास्तव में उन्हें कॉपी करने में सक्षम हूं। अगर मैं रंग नहीं लगाता, तो टेक्स्ट दिखाई दे रहे हैं।

अगर मैं रंग नहीं लगाता तो वे वास्तव में इस तरह दिखते हैं:

enter image description here

और अगर मैं रंग लागू करता हूं तो वे इस तरह दिखते हैं (इस तरह उन्हें दिखना चाहिए, लेकिन टेक्स्ट सहित): यहां छवि विवरण दर्ज करें

आयतों के आकार के संदर्भ में मतभेदों पर ध्यान न दें, मैंने उदाहरणों के आधार पर मूल ग्रंथों को ओवरराइड किया है, लेकिन मूल पूरी तरह से दिखाए गए हैं। पाठ क्यों छुपाया जाता है? मुझे पता है कि यह उदाहरण के कारण किया जा सकता है, लेकिन मुझे नहीं पता कि मैं क्या गलत कर रहा हूं। मैं 5.5.13 संस्करण का उपयोग कर रहा हूं।

इस प्रकार मैं पैराग्राफ में भाग बना और जोड़ता हूं:

List<Chunk> chunksList = new ArrayList<>(); //rects
            Chunk rdChunk;
            for(Person rd: persons) {
                rdChunk = new Chunk(rd.getName(), textFont);
                rdChunk.setGenericTag(rd.getName());
                chunksList .add(rdChunk);
            }
            document.add(createParagraph("as: ", chunksList , basicLeftIndentation));

private Paragraph createParagraph(String field, List<Chunk> chunks, long leftIndentation) {

    Paragraph paragraph = new Paragraph();

    paragraph.add(new Chunk(field, labelFont));
    for(Chunk chunk: chunks) {
        paragraph.add(new Chunk("  "));
        paragraph.add(chunk);
    }
    paragraph.setIndentationLeft(leftIndentation);

    return paragraph;
}

और इस प्रकार मैं PdfPageEvent इंटरफ़ेस का उपयोग करता हूं:

@Override
public void onGenericTag(PdfWriter writer, Document document, Rectangle rect, String text) {
    int[] colors;
    switch(text) {

    case "XX":
        colors = new int[]{142, 166, 207};
        break;
    case "XY":
        colors = new int[]{207, 188, 142};
        break;

    drawRectangle(writer.getDirectContent(), rect, colors);
}

public void drawRectangle(PdfContentByte content, Rectangle rect, int[] colors) {

    content.saveState();
    content.roundRectangle(rect.getLeft() -2,
                      rect.getBottom() - 3,
                      rect.getWidth() + 4,
                      rect.getHeight() + 4, 7f);
    content.setRGBColorFill(colors[0], colors[1], colors[2]);
    content.fill();
    content.restoreState();
}
0
Drumnbass 29 जुलाई 2019, 15:30

1 उत्तर

सबसे बढ़िया उत्तर

समस्या हल हो गई, मैं कॉल कर रहा था

writer.getDirectContent();

की बजाय

writer.getDirectContentUnder();
0
Drumnbass 29 जुलाई 2019, 18:12