日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

pdf 中的java运行,java - 从pdf文件读取特定位置的itext在intellij中运行,并提供所需的输出,但是可执行jar抛出错误 - 堆栈内存溢出...

發(fā)布時(shí)間:2024/10/8 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pdf 中的java运行,java - 从pdf文件读取特定位置的itext在intellij中运行,并提供所需的输出,但是可执行jar抛出错误 - 堆栈内存溢出... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我正在從n個(gè)頁(yè)面的輸入pdf文件中讀取特定位置,并在這些位置上列出文本。 然后,我編寫一個(gè)新的pdf文檔,并將列表中的這些字符串寫入包含單元格的表中。 我提出了兩個(gè)主要問(wèn)題。

我想在表中有三列,但是如果列表中的字符串不是3的倍數(shù)(即列數(shù)),那么它將留下多余的字符串,并且不會(huì)打印它們。 例如,如果我要打印4個(gè)字符串,則程序?qū)⒃诘谝恍械娜齻€(gè)單元格中打印前三個(gè)字符串,但會(huì)保留一個(gè)字符串。 我編寫了一些代碼來(lái)檢查字符串的數(shù)量,并將其設(shè)為3的mod( % ),并在其中添加了帶點(diǎn)(。)的空白單元格,以提供多余的單元格來(lái)完成該行,從而不留任何字符串。 有更好的方法嗎?

當(dāng)我運(yùn)行主類時(shí),該程序在intellij中運(yùn)行,并為我生成輸出pdf文件。 但是,當(dāng)我制作可執(zhí)行jar并通過(guò)雙擊運(yùn)行它時(shí),它什么也沒(méi)有做。 為了再次檢查,我在intellij終端中運(yùn)行了jar,發(fā)現(xiàn)它引發(fā)了以下錯(cuò)誤:

現(xiàn)在,為什么在intellij中運(yùn)行它時(shí)也不會(huì)出現(xiàn)相同的問(wèn)題? 我該如何克服這個(gè)問(wèn)題? 我在Eclipse中重新編寫了整個(gè)項(xiàng)目,而eclipse根本不編譯它,并給出了intellij命令行中可執(zhí)行文件運(yùn)行的問(wèn)題。

這是我在項(xiàng)目中擁有的三個(gè)班級(jí):

package addressLabels;

import com.itextpdf.text.DocumentException;

import com.itextpdf.text.DocumentException;

import com.itextpdf.text.pdf.PdfReader;

import com.itextpdf.text.pdf.parser.FilteredTextRenderListener;

import com.itextpdf.text.pdf.parser.LocationTextExtractionStrategy;

import com.itextpdf.text.pdf.parser.PdfTextExtractor;

import com.itextpdf.text.pdf.parser.RegionTextRenderFilter;

import com.itextpdf.text.pdf.parser.RenderFilter;

import com.itextpdf.text.pdf.parser.TextExtractionStrategy;

import java.io.File;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

public class Driver {

public static final String SRC = "C:/temp/ebay.pdf";

public static void main(String[] args) throws IOException, DocumentException {

ReadCertainLocationOnPageInPdf contentsObj = new ReadCertainLocationOnPageInPdf(SRC);

WritePdf writer = new WritePdf(contentsObj.getListOfAddresses());

//contentsObj.printListOfAddresses();

}

}//class Driver ends here.

package addressLabels;

import com.itextpdf.text.Rectangle;

import com.itextpdf.text.pdf.PdfReader;

import com.itextpdf.text.pdf.parser.*;

import java.io.File;

import java.io.IOException;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

public class ReadCertainLocationOnPageInPdf {

//private String cleanTextMarkedForTokenization;

private List listOfAddresses;

public ReadCertainLocationOnPageInPdf(String pdfFileAddress){

this.listOfAddresses = new ArrayList();

parsePdf(pdfFileAddress);

}//constructor ends here.

private void parsePdf(String pdfFileAddress) {

File f = new File(pdfFileAddress);

if (f.isFile() && f.canRead()){

try {

PdfReader reader = new PdfReader(pdfFileAddress);

int numPages = reader.getNumberOfPages();

//Get information about the page size

//Rectangle mediabox = reader.getPageSize(1);

//printDataAboutThisPage(mediabox);

//StringBuilder sb = new StringBuilder("");

for (int pageNum = 1; pageNum <= numPages; pageNum++){

String oneAddress = getTextFromThisPage(pageNum, reader);

this.addOneAddressToListOfAddresses(oneAddress);

//sb.append(getTextFromThisPage(pageNum, reader)).append("\n\n");

}

//this.addOneAddressToListOfAddresses(sb.toString());

reader.close();

} catch (IOException e) {

e.printStackTrace();

}

}//if ends here

//System.out.println(sb.toString());

}

private void printDataAboutThisPage(Rectangle mediabox) {

//Lower left corner is x

float x = mediabox.getRight();

float y = mediabox.getTop();

System.out.println("Lower left corner: " + x);

System.out.println("Upper right conrner: " + y);

System.out.println("The values of x increase from left to right; the values of y increase from bottom to top. \n The unit of the measurement system in PDF is called \"user unit\". \n By default one user unit coincides with one point (this can change, but you won't find many PDFs with a different UserUnit value).\n In normal circumstances, 72 user units = 1 inch.");

}

private String getTextFromThisPage(int pageNo, PdfReader reader) throws IOException {

//java.awt.geom.Rectangle2D rect = new java.awt.geom.Rectangle2D.Float(226, 547, 240, 158);

java.awt.geom.Rectangle2D rect = new java.awt.geom.Rectangle2D.Float(226, 547, 240, 158);

RenderFilter regionFilter = new RegionTextRenderFilter(rect);

TextExtractionStrategy strategy = new FilteredTextRenderListener(new LocationTextExtractionStrategy(), regionFilter);

String t = PdfTextExtractor.getTextFromPage(reader, pageNo, strategy);

t = this.cleanOneLabel(t);

return t;

}

private String cleanOneLabel(String t) {

StringBuilder sb2 = new StringBuilder("");

String[] lines = t.split(System.getProperty("line.separator"));

for(String s:lines) {

if(!s.equals(""))

sb2.append(s).append("\n");

}

String pattern = "(?m)^\\s*\\r?\\n|\\r?\\n\\s*(?!.*\\r?\\n)";

String replacement = "";

return sb2.toString().replaceAll(pattern, replacement);// ??? s = s.replaceAll("\n+", "\n");

}

private String cleanOneLabel2(String t) {

StringBuilder sb2 = new StringBuilder("");

String[] lines = t.split(System.getProperty("line.separator"));

for(int i = 0; i < lines.length; i++) {

if(lines[i].contains("Post to:")) {

lines[i] = lines[i].replace("Post to:", "pakbay-Post to:");

}

}

for(String s:lines) {

if(!s.equals(""))

sb2.append(s).append("\n");

}

String pattern = "(?m)^\\s*\\r?\\n|\\r?\\n\\s*(?!.*\\r?\\n)";

String replacement = "";

return sb2.toString().replaceAll(pattern, replacement);// ??? s = s.replaceAll("\n+", "\n");

}

public List getListOfAddresses(){

return this.listOfAddresses;

}

public void printListOfAddresses(){

for(int i = 0; i < listOfAddresses.size(); i++){

System.out.print(listOfAddresses.get(i));

}

}

public void addOneAddressToListOfAddresses(String oneAddress) {

//clean the string before adding it to the list of addresses.

//Remove extra spaces, tabs and blank lines from the passed string.

String pattern = "(?m)^\\s*\\r?\\n|\\r?\\n\\s*(?!.*\\r?\\n)";

String replacement = "";

oneAddress = oneAddress.replaceAll(pattern, replacement);

//Add the cleaned address to the list of addresses.

this.listOfAddresses.add(oneAddress);

}

}//class ReadCertainLocationOnPageInPdf ends here.

package addressLabels;

import java.io.FileOutputStream;

import java.util.Date;

import com.itextpdf.text.*;

import com.itextpdf.text.pdf.PdfPCell;

import com.itextpdf.text.pdf.PdfPTable;

import com.itextpdf.text.pdf.PdfWriter;

public class WritePdf {

private static String FILE = "C:/temp/ebay-output.pdf";

private java.util.List listOfAddresses;

public WritePdf(java.util.List listOfAddresses) {

this.listOfAddresses = listOfAddresses;

System.out.println("Size: " + this.getListOfAddresses().size());

System.out.println("Element at zeroth position in list: " + this.getListOfAddresses().get(0));

System.out.println("Element at nth position in list: " + this.getListOfAddresses().get(this.getListOfAddresses().size()-1));

writeTheListOnPdf();

}

private void writeTheListOnPdf() {

try {

Document document = new Document();

PdfWriter.getInstance(document, new FileOutputStream(FILE));

document.open();

addMetaData(document);

//addTitlePage(document);

addContent(document);

document.close();

} catch (Exception e) {

e.printStackTrace();

}

}

private void addContent(Document document) throws DocumentException{

PdfPTable table = makeTable();

for (int i = 0; i < this.getListOfAddresses().size() ; i++) {

PdfPCell cell = makeCell();

cell.addElement(new Phrase(this.getListOfAddresses().get(i)));

table.addCell(cell);

}

/* we have three columns in the table. If the number of addresses is not exactly equal to the number of

* cells created then the pdf file is corrupt and the program throws error. So we have to add some extra cells

* to complete a row. */

calculateAndAddExtraCells(table);

document.add(table);

}

private void calculateAndAddExtraCells(PdfPTable table) {

int numOfAddresses = this.getListOfAddresses().size();

int numOfExtraCells = this.getListOfAddresses().size()%3;

int loopCounter = 0;

if (numOfExtraCells == 0)

loopCounter = 3;

else if (numOfExtraCells == 1)

loopCounter = 2;

else if (numOfExtraCells == 2)

loopCounter = 1;

for (int i = 1; i <= loopCounter ; i++) {

PdfPCell blankCell = this.makeCell();

blankCell.addElement(new Phrase("."));

table.addCell(blankCell);

}

}

private PdfPCell makeCell() {

PdfPCell cell = new PdfPCell();

cell.setPadding(4);

//cell.setNoWrap(true);

cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);

cell.setVerticalAlignment(PdfPCell.ALIGN_CENTER);

cell.setBorder(Rectangle.NO_BORDER);

return cell;

}

private PdfPTable makeTable() {

PdfPTable table = new PdfPTable(3);

table.setWidthPercentage(100);

table.setSplitRows(false);

return table;

}

private void addMetaData(Document document) {

document.addTitle("Address labels for the input pdf file");

document.addSubject("Address labels");

document.addKeywords("ebay, amazon, addresses, labels");

document.addAuthor("Ajmal Khan");

document.addCreator("Ajmal Khan");

}

public java.util.List getListOfAddresses() {

return listOfAddresses;

}

public void setListOfAddresses(java.util.List listOfAddresses) {

this.listOfAddresses = listOfAddresses;

}

}//writePdf ends here.

這是pom.xml

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.swedishnow

ebayAddresses

1.0-SNAPSHOT

org.apache.maven.plugins

maven-jar-plugin

true

addressLabels.Driver

com.itextpdf

kernel

7.0.0

com.itextpdf

layout

7.0.0

org.slf4j

slf4j-log4j12

1.7.18

com.itextpdf

itext-xtra

5.5.4

com.itextpdf

itextpdf

5.5.9

我使用此視頻中推薦的方法在intellij Community 2018.1.5 Edition中創(chuàng)建可執(zhí)行jar。

總結(jié)

以上是生活随笔為你收集整理的pdf 中的java运行,java - 从pdf文件读取特定位置的itext在intellij中运行,并提供所需的输出,但是可执行jar抛出错误 - 堆栈内存溢出...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天天躁狠狠躁狠狠躁夜夜躁68 | 天天色综合色 | 日本公与丰满熄 | 精品久久久久久久免费人妻 | 狠狠干网址 | 成人做爰视频www网站小优视频 | www一区| 有码视频在线观看 | 干欧美| 亚洲一区二区欧美 | 欧美在线专区 | 激情五月色综合国产精品 | 成人毛片视频免费看 | 亚洲自拍av在线 | 男女瑟瑟视频 | 天天躁日日躁狠狠躁伊人 | 四虎影院在线免费播放 | 好男人在线视频www 亚洲福利国产 | 一区二区三区www污污污网站 | 制服丝袜国产在线 | 欧美激情视频一区二区三区 | 少妇一区二区三区 | 天天天色综合 | 狠狠爱免费视频 | 亚洲综合精品视频 | 91精品国自产在线 | 久草福利 | 日韩成人av网址 | 午夜天堂影院 | 国自产拍偷拍精品啪啪一区二区 | 亚洲精品视频一区 | 日批黄色 | 欧美激情一二三区 | 国产专区在线 | 亚洲精品 日韩无码 | 欧美乱子伦 | 成人福利在线免费观看 | 国产人成精品 | 亚洲精品区 | 91一区二区三区在线观看 | av网站在线播放 | 秋霞成人午夜鲁丝一区二区三区 | 中文字幕亚洲一区二区三区五十路 | 久久理伦 | 日本综合色 | 国产精品久久久久久久久久久久久久久久久 | 我要色综合天天 | 欧美a视频在线观看 | 亚洲国产成人综合 | 大乳护士喂奶hd | 欧美成人一区在线 | 国产福利av | 老熟妇高潮一区二区三区 | 91久久久久久久 | 婷婷深爱激情 | 国产免费无遮挡 | 久久久久国色av免费观看性色 | 国产精品美女久久久久图片 | av大片免费看 | 宅男午夜影院 | 最近高清中文在线字幕在线观看 | 国产精品一区二区6 | 成人7777| 女人又爽又黄免费女仆 | 性久久久久久久久 | 久久精视频 | 无码人妻丰满熟妇啪啪欧美 | www.色午夜 | 一二三四国产精品 | 欧美精品网 | 韩国一区二区在线观看 | 日本少妇久久久 | 亚洲精品国产精品乱码不66 | 国产真人无遮挡作爱免费视频 | 视频在线观看免费 | 国产综合久久久久 | 97自拍偷拍视频 | 久久久人妻无码一区二区 | 国语对白一区二区三区 | 色窝窝无码一区二区三区 | 曰批免费视频播放免费 | 国产一级二级三级精品 | 午夜亚洲AV永久无码精品蜜芽 | 蜜臀av午夜精品 | 欧美亚洲综合网 | 天天操天天干天天舔 | 亚洲欧美日韩一区二区 | 香港三级在线视频 | 91 在线视频| 刘玥91精选国产在线观看 | 中文在线观看视频 | 国产精品久久久久久一区二区三区 | 亚洲乱码av| 精品无人国产偷自产在线 | 午夜视频国产 | 日本黄色免费看 | 欧美三级小视频 | 91亚洲精品视频 | 超碰97在线播放 |