दिलचस्प पोस्ट
एंड्रॉइड डिवाइस पर एप्लिकेशन इंस्टॉल होने के बाद केवल एक बार रन कोड फ़ंक्शन तर्क के रूप में jQuery डॉलर का चिह्न ($)? पायथन में 100,000 HTTP अनुरोध भेजने का सबसे तेज़ तरीका क्या है? Opensl का उपयोग करके आरएसए निजी कुंजी कैसे उत्पन्न करें? IPhone पर HTTP कुकीज़ प्रबंधित करना बारकोड स्कैनर ऐप का उपयोग किए बिना ज़ेडिंग लाइब्रेरी एम्बेड करें ईवेंट हैंडलर डायनामिक सामग्री पर काम नहीं कर रहा है Symfony 2 में सीएसएस फ़ाइलों में संपत्ति का पथ फ्लोट रेंज के बीच यादृच्छिक संख्या कैसे प्राप्त करें? सर्वर नियंत्रणों से 'नाम' विशेषता को कैसे निकालना है? सी # में थ्रेड पूल का उपयोग कब करना है? आयात करने के दौरान जावा कैसे तय करता है? पायथन के साथ ssh पर कमांड निष्पादित करें OPENSSL file_get_contents (): क्रिप्टो को सक्षम करने में विफल रहा क्यों JSF कई बार getters कॉल

पीडीएफबॉक्स प्रतीक मुद्रा यूरो को सांकेतिक शब्दों में बदलना

मैंने अपाचे पीडीएफबॉक्स लाइब्रेरी के साथ एक पीडीएफ दस्तावेज़ बनाया है। मेरी समस्या यूरो मुद्रा प्रतीक को सांकेतिक शब्दों में बदलना है, जब पेज पर एक स्ट्रिंग खींचते हैं, क्योंकि बेस फ़ॉन्ट हेल्वेंटिका इस वर्ण को प्रदान नहीं करता है। मैं "þÿ ¬" आउटपुट "प्रतीक" में कैसे रूपांतरित कर सकता हूं?

वेब के समाधान से एकत्रित समाधान "पीडीएफबॉक्स प्रतीक मुद्रा यूरो को सांकेतिक शब्दों में बदलना"

दुर्भाग्य से पीडीएफबॉक्स की स्ट्रिंग एन्कोडिंग अभी तक सही नहीं है (संस्करण 1.8.x)। दुर्भाग्यवश यह सामान्य रूपातरियों का उपयोग करता है जब सामान्य पीडीएफ ऑब्जेक्ट्स में स्ट्रिंग्स को एन्कोड करते हैं जैसे कि सामग्री धाराओं में स्ट्रिंग जो मूलतः गलत है। इस प्रकार, PDPageContentStream.drawString (जो कि गलत एन्कोडिंग का उपयोग करता है) का उपयोग करने के बजाय, आपको अपने आप को सही एन्कोडिंग में अनुवाद करना होगा

उपयोग के बजाय ईजी

  contentStream.beginText(); contentStream.setTextMatrix(100, 0, 0, 100, 50, 100); contentStream.setFont(PDType1Font.HELVETICA, 2); contentStream.drawString("€"); contentStream.endText(); contentStream.close(); 

जिसके परिणामस्वरूप

€ गलत एन्कोडिंग

आप कुछ पसंद का उपयोग कर सकते हैं

  contentStream.beginText(); contentStream.setTextMatrix(100, 0, 0, 100, 50, 100); contentStream.setFont(PDType1Font.HELVETICA, 8); byte[] commands = "(x) Tj ".getBytes(); commands[1] = (byte) 128; contentStream.appendRawCommands(commands); contentStream.endText(); contentStream.close(); 

जिसके परिणामस्वरूप

€ सही एन्कोडिंग

यदि आपको आश्चर्य है कि मुझे 128 के रूप में बाइट कोड का उपयोग करने के लिए मिला है, तो पीडीएफ विनिर्देश आईएसओ 32000-1 , एनेक्स डी 2, लैटिन कैरेक्टर सेट और एन्कोडिंग पर नज़र डालें , जो कि ऑक्टल मान 200 (दशमलव 128) को दर्शाता है € में WinAnsiEncoding प्रतीक


पीएस : एक वैकल्पिक दृष्टिकोण इस बीच अन्य उत्तरों द्वारा प्रस्तुत किया गया है जो कि € प्रतीक के मामले में कुछ समान है:

  contentStream.beginText(); contentStream.setTextMatrix(100, 0, 0, 100, 50, 100); contentStream.setFont(PDType1Font.HELVETICA, 8); contentStream.drawString(String.valueOf(Character.toChars(EncodingManager.INSTANCE.getEncoding(COSName.WIN_ANSI_ENCODING).getCode("Euro")))); contentStream.endText(); contentStream.close(); 

यह वास्तव में भी '€ प्रतीक' ड्रॉ। लेकिन भले ही यह दृष्टिकोण साफ दिखता है (यह byte एरेज़ का उपयोग नहीं करता है, यह वास्तविक पीडीएफ स्ट्रीम ऑपरेशन को मैन्युअल रूप से नहीं बनाया जाता है), यह अपने तरीके से गंदी है:

टूटी हुई विधि का उपयोग करने के लिए, यह वास्तव में स्ट्रिंग तर्क को विधि में बग का विरोध करने के लिए सही तरीके से तोड़ता है

इस प्रकार, अगर पीडीएफबॉक्स लोगों ने टूटी पीडीएफबॉक्स विधि को ठीक करने का फैसला किया है, तो यह प्रतीत होता है कि साफ-काम के आसपास के कोड को असफल होना शुरू हो जाएगा क्योंकि यह निश्चित विधि टूटी गई इनपुट डेटा को खिलाएगा।

बेशक, मुझे संदेह है कि वे 2.0.0 से पहले इस बग को ठीक करेंगे (और 2.0.0 में निश्चित विधि का एक अलग नाम है), लेकिन कोई भी कभी नहीं जानता …

यह मेरे लिए काम किया:

 char symbol = '€'; Encoding e = EncodingManager.INSTANCE.getEncoding(COSName.WIN_ANSI_ENCODING); String toPDF = String.valueOf(Character.toChars(e.getCode(e.getNameFromCharacter(symbol))));` 

ए ने कई लोगों का समाधान बनाया:

  String text = "Lorem ipsum dolor sit amet, consectetur adipisici € 1.234,56 " + "elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua."; contentStream.beginText(); contentStream.setFont(font, 12); contentStream.moveTextPositionByAmount(10, 500); char[] tc = text.toCharArray(); StringBuilder te = new StringBuilder(); Encoding e = EncodingManager.INSTANCE.getEncoding(COSName.WIN_ANSI_ENCODING); for (int i = 0; i < tc.length; i++) { Character c = tc[i]; int code = 0; if(Character.isWhitespace(c)){ code = e.getCode("space"); }else{ code = e.getCode(e.getNameFromCharacter(c)); } te.appendCodePoint(code); } contentStream.drawString( te.toString() ); contentStream.endText(); contentStream.close(); 

वर्ण स्थान के लिए यह अज्ञात कोड है क्योंकि नाम "स्पेस हाकरारैबिक" को WinAnsiEncoding में वर्णित नहीं किया गया है, मुझे नहीं पता कि यह नाम क्यों वापस आता है। वैसे भी मेरे पास वर्ण रिक्त स्थान का सत्यापनकर्ता है, लेकिन समरूप कोड स्थान के साथ यह नाम भी मैप करना संभव है:

 e.addCharacterEncoding( 040, "spacehackarabic" ); 

धन्यवाद…

शायद बहुत देर हो चुकी है, लेकिन मैंने इसका उपयोग किया था:

 String toPDF = String.valueOf(Character.toChars(e.getCode("Euro"))); 

सुनिश्चित करें कि आप अपरकेस "ई" डालते हैं, यदि आप "यूरो" करते हैं तो कोई त्रुटि फेंकता है कृपया इस लिंक की एक नज़र डालें, जिससे मुझे बहुत मदद मिलती है http://partners.adobe.com/public/developer/en/opentype/glyphlist.txt