המרות PDF ב- Java

1. הקדמה

במאמר מהיר זה נתמקד בביצוע תכנות המרה בין קבצי PDF לפורמטים אחרים ב- Java.

באופן ספציפי יותר נתאר כיצד לשמור קובצי PDF כקבצי תמונה, כגון PNG או JPEG, להמיר קבצי PDF למסמכי Microsoft Word, לייצא כ- HTML ולחלץ את הטקסטים באמצעות מספר ספריות קוד פתוח של Java.

2. תלות Maven

הספרייה הראשונה שנבחן היא Pdf2Dom. נתחיל עם התלות של Maven שאנחנו צריכים להוסיף לפרויקט שלנו:

 org.apache.pdfbox pdfbox-tools 2.0.3 net.sf.cssbox pdf2dom 1.6 

אנו נשתמש בתלות הראשונה לטעינת קובץ ה- PDF שנבחר. התלות השנייה אחראית לגיור עצמו. את הגרסאות העדכניות ביותר תוכלו למצוא כאן: pdfbox-tools ו- pdf2dom.

מה עוד שנשתמש אני מסמס כדי לחלץ את הטקסט מקובץ PDF ו- נקודת עניין ליצור את.docx מסמך.

בואו נסתכל על התלות של Maven שעלינו לכלול בפרויקט שלנו:

 com.itextpdf itextpdf 5.5.10 com.itextpdf.tool xmlworker 5.5.10 org.apache.poi poi-ooxml 3.15 org.apache.poi poi-scratchpad 3.15 

הגרסה האחרונה של iText תמצאו כאן ותוכלו לחפש כאן עניין של אפאצ'י.

3. המרות PDF ו- HTML

כדי לעבוד עם קבצי HTML בהם נשתמש Pdf2Dom - מנתח PDF הממיר את המסמכים לייצוג HTML DOM. לאחר מכן ניתן לסדר את עץ ה- DOM שהתקבל לקובץ HTML או לעבד אותו עוד יותר.

כדי להמיר PDF ל- HTML, עלינו להשתמש ב- XMLWorker, הספרייה שמספקת אני מסמס.

3.1. PDF ל- HTML

בואו נסתכל על המרה פשוטה מ- PDF ל- HTML:

חלל פרטי יוצר HTMLFromPDF (שם קובץ מחרוזת) {PDDocument pdf = PDDocument.load (קובץ חדש (שם קובץ)); פלט סופר = PrintWriter חדש ("src / output / pdf.html", "utf-8"); PDFDomTree חדש (). writeText (pdf, פלט); output.close (); } 

בקטע הקוד שלמעלה אנו טוענים את קובץ ה- PDF, תוך שימוש ב- API לטעון מ- PDFBox. כאשר ה- PDF נטען, אנו משתמשים בניתוח כדי לנתח את הקובץ ולכתוב לפלט שצוין על ידי java.io.Writer.

ציין זאת המרת PDF ל- HTML לעולם אינה תוצאה של 100% פיקסל לפיקסלים. התוצאות תלויות במורכבות ובמבנה של קובץ ה- PDF המסוים.

3.2. HTML ל- PDF

עכשיו, בואו נסתכל על המרה מ- HTML ל- PDF:

ריק סטטי פרטי יוצר PDFFromHTML (שם קובץ מחרוזת) {מסמך מסמך = מסמך חדש (); כותב PdfWriter = PdfWriter.getInstance (מסמך, FileOutputStream חדש ("src / output / html.pdf")); document.open (); XMLWorkerHelper.getInstance (). ParseXHtml (סופר, מסמך, FileInputStream חדש (שם קובץ)); document.close (); }

ציין זאת בהמרת HTML ל- PDF, עליך לוודא כי ל- HTML יש את כל התגים שהתחילו ונסגרו כראוי, אחרת ה- PDF לא ייווצר. ההיבט החיובי בגישה זו הוא ש- PDF ייווצר בדיוק כמו שהיה בקובץ HTML.

4. PDF להמרות תמונה

ישנן דרכים רבות להמרת קבצי PDF לתמונה. אחד הפתרונות הפופולריים ביותר נקרא אפאצ'י PDFBox. ספרייה זו היא כלי קוד פתוח של Java לעבודה עם מסמכי PDF. לצורך המרת תמונה ל- PDF, נשתמש אני מסמס שוב.

4.1. PDF לתמונה

כדי להתחיל להמיר קבצי PDF לתמונות, עלינו להשתמש בתלות שהוזכרה בסעיף הקודם - כלי pdfbox.

בואו נסתכל על דוגמת הקוד:

חלל פרטי createImageFromPDF (שם קובץ מחרוזת, סיומת מחרוזת) {PDDocument document = PDDocument.load (קובץ חדש (שם קובץ)); PDFRenderer pdfRenderer = PDFRenderer חדש (מסמך); עבור (עמוד int = 0; עמוד <document.getNumberOfPages (); עמוד ++) {BufferedImage bim = pdfRenderer.renderImageWithDPI (עמוד, 300, ImageType.RGB); ImageIOUtil.writeImage (bim, String.format ("src / output / pdf-% d.% S", עמוד + 1, סיומת), 300); } document.close (); }

ישנם מעט חלקים חשובים בקוד הנ"ל. אנחנו צריכים להשתמש PDFRenderer, על מנת לעבד PDF כ- BufferedImage. כמו כן, כל עמוד בקובץ PDF צריך להיות מוצג בנפרד.

לבסוף, אנו משתמשים ImageIOUtil, מכלי PDFBox של אפאצ'י, כדי לכתוב תמונה עם התוסף שאותו אנו מציינים. פורמטים אפשריים של קבצים הם jpeg, jpg, gif, tiff אוֹ png.

שים לב ש- Apache PDFBox הוא כלי מתקדם - אנו יכולים ליצור קבצי PDF משלנו מאפס, למלא טפסים בתוך קובץ PDF, לחתום ו / או להצפין את קובץ ה- PDF.

4.2. תמונה ל- PDF

בואו נסתכל על דוגמת הקוד:

ריק סטטי פרטי generatePDFFromImage (שם קובץ מחרוזת, סיומת מחרוזת) {מסמך מסמך = מסמך חדש (); קלט מחרוזת = שם קובץ + "." + סיומת; פלט מחרוזת = "src / output /" + סיומת + ".pdf"; FileOutputStream fos = FileOutputStream חדש (פלט); כותב PdfWriter = PdfWriter.getInstance (document, fos); author.open (); document.open (); document.add (Image.getInstance ((URL חדש (קלט)))); document.close (); author.close (); }

שים לב, שנוכל לספק תמונה כקובץ, או לטעון אותה מ- URL, כפי שהיא מוצגת בדוגמה שלמעלה. יתר על כן, ההרחבות של קובץ הפלט בו אנו יכולים להשתמש הן jpeg, jpg, gif, tiff אוֹ png.

5. PDF להמרות טקסט

כדי לחלץ את הטקסט הגולמי מקובץ PDF, נשתמש גם בו אפאצ'י PDFBox שוב. עבור המרת טקסט ל- PDF, אנו הולכים להשתמש אני מסמס.

5.1. PDF לטקסט

יצרנו שיטה בשם createTxtFromPDF (...) וחילק אותולשלושה חלקים עיקריים: טעינת קובץ PDF, חילוץ טקסט ויצירת קובץ סופית.

נתחיל בטעינה של חלק:

קובץ f = קובץ חדש (שם קובץ); מחרוזת מנוסחת טקסט; מנתח PDFParser = PDFParser חדש (RandomAccessFile חדש (f, "r")); parser.parse ();

על מנת לקרוא קובץ PDF אנו משתמשים PDFParser, עם אפשרות "r" (קרא). יתר על כן, עלינו להשתמש ב- parser.parse () שיטה שתגרום לניתוח ה- PDF כזרם ולאכלוסו ב- COSDocument לְהִתְנַגֵד.

בואו נסתכל על חלק הטקסט המחלץ:

COSDocument cosDoc = parser.getDocument (); PDFTextStripper pdfStripper = PDFTextStripper חדש (); PDDocument pdDoc = חדש PDDocument (cosDoc); parsedText = pdfStripper.getText (pdDoc);

בשורה הראשונה נשמור COSDocument בתוך ה cosDoc מִשְׁתַנֶה. לאחר מכן הוא ישמש לבנייה מסמך PD, שהוא הייצוג בזכרון של מסמך PDF. לבסוף, נשתמש PDFTextStripper להחזרת הטקסט הגולמי של מסמך. אחרי כל הפעולות האלה, נצטרך להשתמש סגור() שיטה לסגירת כל הזרמים המשומשים.

בחלק האחרון נשמור טקסט בקובץ החדש שנוצר באמצעות הג'אווה הפשוטה PrintWriter:

PrintWriter pw = PrintWriter חדש ("src / output / pdf.txt"); pw.print (parsedText); pw.close ();

שים לב שאתה לא יכול לשמור על עיצוב בקובץ טקסט רגיל מכיוון שהוא מכיל טקסט בלבד.

5.2. טקסט ל- PDF

המרת קבצי טקסט ל- PDF היא קצת מסובכת. על מנת לשמור על עיצוב הקובץ, תצטרך להחיל כללים נוספים.

בדוגמה הבאה, אנו לא לוקחים בחשבון את עיצוב הקובץ.

ראשית, עלינו להגדיר את גודל קובץ ה- PDF, הגרסה וקובץ הפלט. בואו נסתכל על דוגמת הקוד:

מסמך pdfDoc = מסמך חדש (PageSize.A4); PdfWriter.getInstance (pdfDoc, FileOutputStream חדש ("src / output / txt.pdf")) .setPdfVersion (PdfWriter.PDF_VERSION_1_7); pdfDoc.open ();

בשלב הבא נגדיר את הגופן וגם את הפקודה המשמשת ליצירת פסקה חדשה:

גופן myfont = גופן חדש (); myfont.setStyle (Font.NORMAL); myfont.setSize (11); pdfDoc.add (פיסקה חדשה ("\ n"));

לבסוף, אנו הולכים להוסיף פסקאות לקובץ PDF שזה עתה נוצר:

BufferedReader br = BufferedReader חדש (FileReader חדש (שם קובץ)); מחרוזת strLine; בעוד ((strLine = br.readLine ())! = null) {Paragraph para = New Paragraph (strLine + "\ n", myfont); para.setAlignment (Element.ALIGN_JUSTIFIED); pdfDoc.add (פסקה); } pdfDoc.close (); br.close ();

6. המרות PDF ל- Docx

יצירת קובץ PDF ממסמך Word אינה קלה ולא נעסוק בנושא זה כאן. אנו ממליצים לספריות של צד שלישי לעשות זאת, כמו jWordConvert.

כדי ליצור קובץ Microsoft Word ממסמך PDF, נצטרך שתי ספריות. שתי הספריות הן קוד פתוח. הראשון הוא אני מסמס והוא משמש לחילוץ הטקסט מקובץ PDF. השנייה היא נקודת עניין ומשמש ליצירת ה-.docx מסמך.

בואו נסתכל על קטע הקוד של החלק לטעינת PDF:

XWPFDocument doc = XWPFDocument חדש (); מחרוזת pdf = שם קובץ; קורא PdfReader = PdfReader חדש (pdf); מנתח PdfReaderContentParser = PdfReaderContentParser חדש (קורא); 

לאחר טעינת קובץ ה- PDF, עלינו לקרוא ולעבד כל עמוד בנפרד בלולאה, ואז לכתוב לקובץ הפלט:

עבור (int i = 1; i <= reader.getNumberOfPages (); i ++) {TextExtractionStrategy strategy = parser.processContent (i, SimpleTextExtractionStrategy () חדש; טקסט מחרוזת = strategy.getResultantText (); XWPFParagraph p = doc.createParagraph (); XWPFRun run = p.createRun (); run.setText (טקסט); run.addBreak (BreakType.PAGE); } FileOutputStream out = FileOutputStream חדש ("src / output / pdf.docx"); doc.write (out); // סגור את כל הקבצים הפתוחים

שים לב, כי עם SimpleTextExtractionStrategy () אסטרטגיית החילוץ, נאבד את כל כללי העיצוב. על מנת לתקן זאת, שחק באסטרטגיות מיצוי המתוארות כאן, כדי להשיג פיתרון מורכב יותר.

7. PDF ל- X ספריות מסחריות

בחלקים הקודמים תיארנו ספריות קוד פתוח. יש כמה ספריות נוספות שכדאי לשים לב אליהן, אך הן בתשלום:

  • jPDFImages - jPDFImages יכולים ליצור תמונות מדפים במסמך PDF ולייצא אותם כתמונות JPEG, TIFF או PNG.
  • JPEDAL - JPedal היא פיתוח פעיל ומסוגל מאוד של ספריית Java PDF מקורית, המשמש להדפסה, צפייה והמרה של קבצים
  • pdfcrowd - זוהי ספריית המרה נוספת של אינטרנט / HTML ל- PDF ו- PDF לאינטרנט / HTML, עם ממשק משתמש מתקדם

8. סיכום

במאמר זה דנו בדרכים להמיר קובץ PDF לפורמטים שונים.

ניתן למצוא את היישום המלא של מדריך זה בפרויקט GitHub - זהו פרויקט מבוסס Maven. על מנת לבדוק, פשוט הפעל את הדוגמאות וראה את התוצאות ב- תְפוּקָה תיקיה.