تشارككم الأمثلة الواردة في هذه المقالة في رمز Java المحدد لتحويل صورة PDF للرجوع إليه. المحتوى المحدد كما يلي
أولاً ، مكون PDFBox 1.8.4 باستخدام Apache
حزمة PDF ؛ استيراد java.awt.image.bufferedImage ؛ استيراد java.io.file ؛ استيراد java.io.ioException ؛ استيراد java.util.date ؛ استيراد java.util.list ؛ استيراد javax.imageio.imageio ؛ استيراد org.apache.pdfbox.pdmodel.pddocument ؛ استيراد org.apache.pdfbox.pdmodel.pdpage ؛ الفئة العامة pdfbox {suppressWarnings ("rawtypes") public static void main (string [] args) remrows ioException {string p = system.getProperty ("user.dir") + "/"+"zk.pdf" ؛ pddocument doc = pddocument.load (p) ؛ int pagecount = doc.getNumberOfPages () ؛ system.out.println (pagecount) ؛ تاريخ البدء = تاريخ جديد () ؛ حاول {list pages = doc.getDocumentCatalog (). getAllPages () ؛ لـ (int i = 0 ؛ i <pages.size () ؛ i ++) {pdpage page = (pdpage) pages.get (i) ؛ suppressWarnings ("غير مستخدمة") int width = new float (page.gettrimbox (). getWidth ()). Intvalue () ؛ suppressWarnings ("غير مستخدمة") int height = new float (page.gettrimbox (). getheight ()). Intvalue () ؛ صورة bufferedImage = page.converttoImage () ؛ imageio.write (Image ، "JPG" ، ملف جديد ("img" + file.separator + (i + 1) + ".jpg")) ؛ System.out.println ("Image in the Page ->"+(i+1)) ؛ }} catch (استثناء e) {E.PrintStackTrace () ؛ } أخيرًا {if (doc! = null) {doc.close () ؛ }} نهاية التاريخ = تاريخ جديد () ؛ System.out.println (end.getTime ()-start.getTime ()) ؛ System.out.println ("Over") ؛ }}لكن المشكلة تكمن في المشكلة:
عندما يكون وثيقة PDF 180 مترًا ، فإنها تقارير مباشرة عن استثناء التحليل
تكون المعالجة بطيئة جدًا عندما يكون عدد صفحات PDF أكثر من 500 صفحة
في وقت لاحق ، حاولت استخدام PDF-Renderer الإصدار 1.0.5
حزمة PDF ؛ استيراد java.awt.image ؛ استيراد java.awt.Rectangle ؛ استيراد java.awt.image.bufferedImage ؛ استيراد java.io.file ؛ استيراد java.io.fileOutputStream ؛ استيراد java.io.ioException ؛ استيراد java.io.randomaccessfile ؛ استيراد java.nio.mappedbytebuffer ؛ استيراد java.nio.channels.filechannel ؛ استيراد com.sun.image.codec.jpeg.jpegcodec ؛ استيراد com.sun.image.codec.jpeg.jpegencodeparam ؛ استيراد com.sun.image.codec.jpeg.jpegimageencoder ؛ استيراد com.sun.pdfview.pdffile ؛ استيراد com.sun.pdfview.pdfpage ؛ الفئة العامة pdfrenderer {public static void main (string [] args) يلقي ioException {String pDfreAlePath = system.getProperty ("user.dir") + "/"+"zk.pdf" ؛ ملف الملف = ملف جديد (PDFREALEPTH) ؛ RandomAccessFile raf = new RandomAccessFile (ملف ، "r") ؛ قناة filechannel = raf.getChannel () ؛ medbytebuffer buf = channel.map (filechannel.mapmode.read_only ، 0 ، channel.size ()) ؛ pdffile pdffile = pdffile جديد (buf) ؛ لـ (int i = 1 ؛ i <= pdffile.getNumpages () ؛ i ++) {pdfpage page = pdffile.getPage (i) ؛ المستطيل المستقيمي = مستطيل جديد (0 ، 0 ، ((int) page.getBbox () .getWidth ()) ، ((int) page.getBbox (). getheight ())) ؛ IMAG IMG = page.getImage (rect.width ، rect.hight ، rect ، null ، true ، true) ؛ علامة bufferedImage = جديد bufferedImage (rect.width ، rect.hight ، bufferedImage.type_int_rgb) ؛ tag.getGraphics (). drawImage (img ، 0 ، 0 ، rect.width ، rect.Height ، null) ؛ FileOutputStream Out = new FileOutputStream ("img" + file.separator + (i + 1) + ".jpg") ؛ // الإخراج إلى ملف تدفق jpegimageencoder encoder = jpegcodec.createjpegencoder (out) ؛ jpegencodeparam param2 = encoder.getDefaultJpegenCodeparam (tag) ؛ param2.setQuality (1f ، false) ؛ // 1F هو تحسين Encoder.setjpegencodeparam (param2) ؛ Encoder.encode (tag) ؛ // JPEG الترميز Out.Close () ؛ System.out.println ("Image in the Page ->"+(i+1)) ؛ }}}لكن المشكلة تكمن في المشكلة: عندما لا يكون إصدار PDF 1.4 ، يتم الإبلاغ عن خطأ مباشرة: "xref" المتوقع في بداية الجدول
مقارنة مع PDFBox ، التحويل أقل كفاءة بكثير. يستغرق PDF مع حوالي 200 صفحة حوالي 6 أضعاف الوقت الذي يستغرقه الأخير. في الوقت نفسه ، هناك بعض المشكلات في دعم الخطوط الصينية.
ومع ذلك ، لا توجد مشكلة في أنه لا يمكن تحويل إصدار PDF.
لا يمكن لـ PDFrenderer تحويل 1.4 أو أعلى الإصدارات. لقد وجدت الحل ولكن لم يتم العثور عليها.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.