ตัวอย่างในบทความนี้แบ่งปันรหัสเฉพาะของ Java Converting PDF Image สำหรับการอ้างอิงของคุณกับคุณ เนื้อหาเฉพาะมีดังนี้
ขั้นแรกส่วนประกอบ 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") โมฆะคงที่สาธารณะหลัก (สตริง [] args) พ่น 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) หน้า (i); @suppresswarnings ("ไม่ได้ใช้") int width = new float (page.getTrimbox (). getWidth ()). intvalue (); @suppresswarnings ("ไม่ได้ใช้") ความสูง int = ใหม่ลอย (หน้า. getTrimbox (). getheight ()). intvalue (); bufferedImage image = page.convertToImage (); imageio.write (image, "jpg", ไฟล์ใหม่ ("img" + file.Separator + (i + 1) + ".jpg")); System.out.println ("ภาพในหน้า ->"+(i+1)); }} catch (exception e) {e.printstacktrace (); } ในที่สุด {ถ้า (doc! = null) {doc.close (); }} วันที่สิ้นสุด = วันที่ใหม่ (); System.out.println (end.getTime ()-start.getTime ()); System.out.println ("over"); -แต่ปัญหาอยู่ในปัญหา:
เมื่อเอกสาร PDF คือ 180m จะรายงานข้อยกเว้นการแยกวิเคราะห์โดยตรง
การประมวลผลช้ามากเมื่อจำนวนหน้า 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 {โมฆะคงที่สาธารณะหลัก (String [] args) พ่น IOException {String pdfrealepath = system.getProperty ("user.dir") + "/"+"zk.pdf"; ไฟล์ไฟล์ = ไฟล์ใหม่ (pdfrealepath); RandomAccessFile RAF = new RandomActCessFile (ไฟล์, "R"); FileChannel channel = raf.getChannel (); MappedByTebuffer buf = channel.map (filechannel.mapmode.read_only, 0, channel.size ()); pdffile pdffile = new pdffile (buf); สำหรับ (int i = 1; i <= pdffile.getNumpages (); i ++) {pdfpage page = pdffile.getPage (i); สี่เหลี่ยมผืนผ้าสี่เหลี่ยม = สี่เหลี่ยมใหม่ (0, 0, ((int) page.getBbox () .getWidth ()), ((int) page.getBbox (). getheight ())); Image img = page.getImage (rect.width, rect.height, rect, null, true, true); bufferedImage tag = new bufferedImage (rect.width, rect.height, bufferedimage.type_int_rgb); tag.getGraphics (). drawimage (img, 0, 0, rect.width, rect.height, null); fileOutputStream out = new fileOutputStream ("IMG" + file.Saperator + (i + 1) + ".jpg"); // เอาต์พุตไปยังสตรีมไฟล์ jpeGimageEncoder encoder = jpegCodec.createJpeGenCoder (out); jpeGenCodeParam param2 = encoder.getDefaultJPeGenCodeParam (TAG); param2.setquality (1f, false); // 1F คือการปรับปรุง encoder คุณภาพของภาพที่สร้างขึ้น SetJpeGenCodeParam (param2); encoder.encode (แท็ก); // jpeg เข้ารหัส out.close (); System.out.println ("ภาพในหน้า ->"+(i+1)); -แต่ปัญหาอยู่ที่ปัญหา: เมื่อเวอร์ชันของ PDF ไม่ใช่ 1.4 มีการรายงานข้อผิดพลาดโดยตรง: คาดว่า 'xref' จะเริ่มต้นของตาราง
เมื่อเทียบกับ PDFBox การแปลงมีประสิทธิภาพน้อยกว่ามาก PDF ที่มีประมาณ 200 หน้าใช้เวลาประมาณ 6 เท่าของเวลาที่ใช้ในช่วงหลัง ในเวลาเดียวกันมีปัญหาบางอย่างเกี่ยวกับการสนับสนุนแบบอักษรจีน
อย่างไรก็ตามไม่มีปัญหาว่ารุ่น PDF ไม่สามารถแปลงได้
PDFrenderer ไม่สามารถแปลงเวอร์ชัน 1.4 หรือสูงกว่า ฉันพบวิธีแก้ปัญหา แต่ไม่พบ
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น