दिलचस्प पोस्ट
सी में Ctrl-C पकड़ो उद्धरण चिह्नों के साथ बैज रेगेक्स? Laravel 5.2 $ त्रुटियां ब्लेड में नहीं दिख रही हैं आरडीडीएस में स्पार्क-ओपनिंग फाइल नाम मैं DataAnnotation ValidationAttribute के आदेश को कैसे निर्दिष्ट कर सकता हूं? NameValueSectionHandler प्रकार के कॉन्फ़िगरेशन के मूल्यों को कैसे प्राप्त करें फोन-गैप-जावास्क्रिप्ट क्रॉस-डोमेन अजाक्स अनुरोध भेज रहा है पहचान करने के लिए jQuery प्राप्त करना .change () IE में AngularJS के साथ अमान्य होने पर बटन सबमिट करना अक्षम करें PHP में जावास्क्रिप्ट का उपयोग कर सत्र चर सेट करें जावास्क्रिप्ट – झंडा तक सच = रुको बूल ऑपरेटर ++ और – क्या मैं क्रॉसप्लैट अनुप्रयोग निष्पादन के लिए बढ़ावा पुस्तकालय का उपयोग कर सकता हूं? एक टाइमस्टैम्प में SQL सर्वर में datetime फ़ील्ड का डिफ़ॉल्ट मान जोड़ें क्या आप मोंगो में $ addToSet के लिए एक कुंजी निर्दिष्ट कर सकते हैं?

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

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

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

दुर्भाग्य से पीडीएफबॉक्स की स्ट्रिंग एन्कोडिंग अभी तक सही नहीं है (संस्करण 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