लघु उत्तर: अगर वहाँ लेआउट रिक्ति है कि वास्तविक रिक्त स्थान के रूप में व्यवहार किया जाना चाहिए है आप Doc.GetText("SVG")
के माध्यम से पाठ के अलग-अलग टोकन प्राप्त कर सकते हैं, TEXT
और TSPAN
तत्वों के लिए XML पार्स करने, और निर्धारित करने। पीडीएफबॉक्स से जो व्यवहार आप देख रहे हैं वह संभवतः उस धारणा को बनाने का प्रयास है। इसके अलावा, एडोब एक्रोबैट भी क्लिपबोर्ड के माध्यम से स्पेस टेक्स्ट वापस कर सकता है क्योंकि पीडीएफबॉक्स करता है।
लंबे उत्तर: इससे अधिक समस्याएं हो सकती हैं, क्योंकि यह पीडीएफ में पाठ का मूल उद्देश्य नहीं हो सकता है।
एबीसीपीडीएफ सही चीज़ कर रहा है, क्योंकि पीडीएफ स्पेक केवल वर्णन करता है कि आउटपुट माध्यम में चीजें कहाँ रखी जानी चाहिए। कोई एक पीडीएफ फ़ाइल बना सकता है जो एबीसीपीडीएफ दोनों शैलियों में व्याख्या करता है, भले ही मूल वाक्य लगभग समान दिखता है।
यह प्रदर्शित करने के लिए, यहां एडोब इनडिज़ीन से दस्तावेज़ का एक स्नैपशॉट है जो आपके नमूना वाक्य के लिए दोनों मामलों से मेल खाने वाला टेक्स्ट लेआउट दिखाता है।
ध्यान दें कि पहली पंक्ति वास्तविक रिक्तियों के साथ निर्माण नहीं किया गया था, बजाय, शब्द अलग-अलग पाठ क्षेत्रों में हाथ से रखा जाता है और एक ठीक से स्थान दिया गया है वाक्य की तरह लगभग देखने के लिए खड़े थे। दूसरी पंक्ति में एक वाक्य है जिसमें शब्दों के बीच एक पाठ क्षेत्र में वास्तविक टेक्स्ट रिक्त स्थान हैं। यदि आप लेआउट रिक्त स्थान का पता लगाने के लिए चाहते हैं इस प्रकार
ThisSentenceDoesn'tHaveAnySpacesBetweenWords.
This Sentence Doesn't Have Any Spaces Between Words.
, आप एसवीजी उत्पादन का उपयोग करें और मैन्युअल रूप से पाठ के टोकन के माध्यम से कदम चाहिए:
जब पीडीएफ के लिए निर्यात और फिर ABCpdf द्वारा में पढ़ते हैं, Doc.GetText("TEXT")
निम्नलिखित वापस आ जाएगी । Doc.GetText("SVG")
एबीसीपीडीएफ के रूप में उन्हें टेक्स्ट पर देखता है और अन्य ड्राइंग इकाइयां देता है, और आप तय कर सकते हैं कि आप लेआउट आधारित स्पेसिंग के मामले को कैसे संभालना चाहते हैं।
आप इस के समान उत्पादन प्राप्त होगा:
<?xml version="1.0" standalone="no"?>
<svg width="612" height="792" x="0" y="0" version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<text xml:space="preserve" x="36" y="46.1924" font-size="14" font-family="ArialMT" textLength="26.446" transform="translate(36, 46.1924) translate(-36, -46.1924)">This</text>
<text xml:space="preserve" x="66.002" y="46.1924" font-size="14" font-family="ArialMT" textLength="59.15" transform="translate(66.002, 46.1924) translate(-66.002, -46.1924)">Sentence</text>
<text xml:space="preserve" x="129.604" y="46.1924" font-size="14" font-family="ArialMT" textLength="47.46" transform="translate(129.604, 46.1924) translate(-129.604, -46.1924)">Doesn’t</text>
<text xml:space="preserve" x="181.208" y="46.1924" font-size="14" font-family="ArialMT" textLength="32.676" transform="translate(181.208, 46.1924) translate(-181.208, -46.1924)">Have</text>
<text xml:space="preserve" x="219.61" y="46.1924" font-size="14" font-family="ArialMT" textLength="24.122" transform="translate(219.61, 46.1924) translate(-219.61, -46.1924)">Any</text>
<text xml:space="preserve" x="249.612" y="46.1924" font-size="14" font-family="ArialMT" textLength="46.69" transform="translate(249.612, 46.1924) translate(-249.612, -46.1924)">Spaces</text>
<text xml:space="preserve" x="301.216" y="46.1924" font-size="14" font-family="ArialMT" textLength="54.474" transform="translate(301.216, 46.1924) translate(-301.216, -46.1924)">Between</text>
<text xml:space="preserve" x="360.016" y="46.1924" font-size="14" font-family="ArialMT" transform="translate(360.016, 46.1924) translate(-360.016, -46.1924)"><tspan textLength="13.216">W</tspan><tspan dx="-0.252" textLength="31.122">ords.</tspan></text>
<text xml:space="preserve" x="36.014" y="141.9944" font-size="14" font-family="ArialMT" transform="translate(36.014, 141.9944) translate(-36.014, -141.9944)">
<tspan textLength="181.3">This Sentence Doesn’t Have </tspan><tspan dx="-0.756" textLength="150.178">Any Spaces Between W</tspan><tspan dx="-0.252" textLength="31.122">ords.</tspan></text>
</svg>
और ध्यान दें कि बुनियादी संरचना मूल उद्देश्य है कि आप समस्याओं दे दी है पता चलता है। (Xml: space और विशेषताओं को हटा दिया, खाली स्थान के उदाहरण के लिए संशोधन)
<?xml version="1.0" standalone="no"?>
<svg>
<text>This</text>
<text>Sentence</text>
<text>Doesn’t</text>
<text>Have</text>
<text>Any</text>
<text>Spaces</text>
<text>Between</text>
<text><tspan>W</tspan><tspan>ords.</tspan></text>
<text>
<tspan>This Sentence Doesn’t Have </tspan>
<tspan>Any Spaces Between W</tspan>
<tspan>ords.</tspan>
</text>
</svg>
तो यह है कि पुराने संस्करण केवल टेक्स्ट तत्वों (यानी बीटी/ईटी, मुझे लगता है) चलते हैं, पृष्ठ पर स्थिति को अनदेखा करते हैं, और केवल एक स्थान जोड़ते हैं जब कोई बीटी/ईटी के भीतर पाया जाता है - जबकि अब आप एक "दृश्य" विश्लेषण का उपयोग करते हैं जो खाते में स्थिति लेता है? मुझे यकीन नहीं है कि पहले दृष्टिकोण में आप प्रत्येक पाठ तत्व के प्रत्येक छोर के बीच एक जगह नहीं जोड़ेंगे। क्या यह है कि कुछ पीडीएफ के प्रत्येक * शब्द * के बजाय प्रत्येक * चरित्र * के लिए एक अलग पाठ तत्व होता है - और आप "वाक्य" के बजाय "एस ई एन टी ई एन सी ई" आउटपुट से बचना चाहते हैं? अगर मुझे पता है कि पुराना तरीका कैसे काम करता है, तो शायद मैं नया रास्ता खरीदूंगा! :) – Chris