क्या Android एप्लिकेशन से PDF फ़ाइलें बनाने का कोई तरीका है?
क्या Android एप्लिकेशन से PDF फ़ाइलें बनाने का कोई तरीका है?
जवाबों:
अगर कोई भी Android डिवाइस पर PDF जेनरेट करना चाहता है, तो यह कैसे करना है:
यदि आप API स्तर 19 या उससे अधिक वाले उपकरणों के लिए विकसित कर रहे हैं, तो आप PrintedPdfDocument में निर्मित का उपयोग कर सकते हैं: http://developer.android.com/reference/android/print/pdf/PrintedPdfDocument.html
// open a new document
PrintedPdfDocument document = new PrintedPdfDocument(context,
printAttributes);
// start a page
Page page = document.startPage(0);
// draw something on the page
View content = getContentView();
content.draw(page.getCanvas());
// finish the page
document.finishPage(page);
. . .
// add more pages
. . .
// write the document content
document.writeTo(getOutputStream());
//close the document
document.close();
जटिल सुविधाओं के साथ एक पीडीएफ बनाने की चाल वांछित एक्सएमएल लेआउट के साथ एक डमी गतिविधि करना है। फिर आप इस डमी गतिविधि को खोल सकते हैं, प्रोग्रामेटिक रूप से स्क्रीनशॉट ले सकते हैं और इस लाइब्रेरी का उपयोग करके उस छवि को पीडीएफ में बदल सकते हैं । बेशक सीमाएं हैं जैसे स्क्रॉल करने में सक्षम नहीं होना, एक पृष्ठ से अधिक नहीं, लेकिन सीमित एप्लिकेशन के लिए यह त्वरित और आसान है। आशा है कि यह किसी की मदद करता है!
एंड्रॉइड में गैर-अंग्रेजी अक्षरों के साथ पीडीएफ के लिए एक मनमाने ढंग से HTML के रूपांतरण की समस्या का पूर्ण समाधान खोजना आसान नहीं है। मैं इसे रूसी यूनिकोड पत्रों के लिए परीक्षण करता हूं।
हम तीन पुस्तकालयों का उपयोग करते हैं:
(1) HTML से XHTML में रूपांतरण के लिए Jsoup (jsoup-1.7.3.jar):
(2) iTextPDF (itextpdf-5.5.0.jar),
(3) XMLWorker (xmlworker-5.5.1.jar)।
public boolean createPDF(String rawHTML, String fileName, ContextWrapper context){
final String APPLICATION_PACKAGE_NAME = context.getBaseContext().getPackageName();
File path = new File( Environment.getExternalStorageDirectory(), APPLICATION_PACKAGE_NAME );
if ( !path.exists() ){ path.mkdir(); }
File file = new File(path, fileName);
try{
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
document.open();
// Подготавливаем HTML
String htmlText = Jsoup.clean( rawHTML, Whitelist.relaxed() );
InputStream inputStream = new ByteArrayInputStream( htmlText.getBytes() );
// Печатаем документ PDF
XMLWorkerHelper.getInstance().parseXHtml(writer, document,
inputStream, null, Charset.defaultCharset(), new MyFont());
document.close();
return true;
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
} catch (DocumentException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
मुश्किल समस्या यह है कि iTextPDF XMLWorker लाइब्रेरी का उपयोग करके पीडीएफ में रूसी पत्र प्रदर्शित करना है। इसके लिए हमें FontProvider इंटरफ़ेस का अपना कार्यान्वयन बनाना चाहिए:
public class MyFont implements FontProvider{
private static final String FONT_PATH = "/system/fonts/DroidSans.ttf";
private static final String FONT_ALIAS = "my_font";
public MyFont(){ FontFactory.register(FONT_PATH, FONT_ALIAS); }
@Override
public Font getFont(String fontname, String encoding, boolean embedded,
float size, int style, BaseColor color){
return FontFactory.getFont(FONT_ALIAS, BaseFont.IDENTITY_H,
BaseFont.EMBEDDED, size, style, color);
}
@Override
public boolean isRegistered(String name) { return name.equals( FONT_ALIAS ); }
}
यहां हम मानक Android फ़ॉन्ट Droid Sans का उपयोग करते हैं, जो सिस्टम फ़ोल्डर में स्थित है:
private static final String FONT_PATH = "/system/fonts/DroidSans.ttf";
थोड़ी देर हो चुकी है और मैंने अभी तक इसे स्वयं परीक्षण नहीं किया है, लेकिन एक अन्य पुस्तकालय जो बीएसडी लाइसेंस के तहत है, वह एंड्रॉइड पीडीएफ लेखक है ।
अद्यतन मैंने स्वयं पुस्तकालय का प्रयास किया है। सरल पीडीएफ पीढ़ियों के साथ ठीक काम करता है (यह पाठ, लाइनों, आयतों, बिटमैप, फोंट को जोड़ने के लिए तरीके प्रदान करता है)। एकमात्र समस्या यह है कि उत्पन्न पीडीएफ को मेमोरी में स्ट्रिंग में संग्रहीत किया जाता है, इससे बड़े दस्तावेज़ों में मेमोरी समस्या हो सकती है।
PDFJet अपनी लाइब्रेरी का एक ओपन-सोर्स संस्करण प्रदान करता है जो किसी भी मूल पीडीएफ पीढ़ी कार्य को संभालने में सक्षम होना चाहिए। यह शुद्ध रूप से जावा-आधारित समाधान है और इसे एंड्रॉइड के साथ संगत कहा जाता है। कुछ अतिरिक्त सुविधाओं के साथ एक व्यावसायिक संस्करण है जो बहुत महंगा नहीं लगता है।
देर से, लेकिन अनुरोध करने के लिए प्रासंगिक और उम्मीद है कि सहायक। यदि किसी बाहरी सेवा का उपयोग किया जाता है (जैसा कि कॉमन्सवेयर द्वारा उत्तर में सुझाया गया है) तो डोकमोसिस में एक क्लाउड सेवा होती है, जो प्रसंस्करण में मदद कर सकती है - प्रसंस्करण को क्लाउड सेवा में उतारना जो भारी प्रसंस्करण करता है। यह दृष्टिकोण कुछ परिस्थितियों में आदर्श है लेकिन निश्चित रूप से नेट-कनेक्ट होने पर निर्भर करता है।
यू भी PoDoFo लाइब्रेरी का उपयोग कर सकते हैं । मुख्य लक्ष्य यह है कि यह एलजीपीएल के तहत प्रकाशित हो। चूंकि यह सी ++ में लिखा गया है, इसलिए आपको इसे एनडीके का उपयोग करके क्रॉस-संकलित करना चाहिए और सी-साइड और जावा आवरण लिखना चाहिए। ओपनसीवी परियोजना से कुछ तृतीय-पक्ष पुस्तकालयों का उपयोग किया जा सकता है । OpenCV प्रोजेक्ट में भी U android.toolchain.cmake
फाइल मिल सकती है , जो आपको जनरेट करने में मदद करेगी Makefile
।